Arcitech
1.0.5indexedArchitectural framework manages state and event processing, utilizing parameters, projections, events, intents, and event chains to ensure code predictability, testability, and scalability.
Architectural framework manages state and event processing, utilizing parameters, projections, events, intents, and event chains to ensure code predictability, testability, and scalability.
ndmatrix-parameter — это архитектурный фреймворк для управления состоянием и обработки событий в проектах компании. Фреймворк основан на разделении на:
Фреймворк позволяет строго отделять логику изменения состояния от вычислений, обеспечивая предсказуемость, тестируемость и расширяемость кода.
abstract class Projection<S: Any> : Parameter<S>
Message может порождать дочерние события.Добавьте в зависимости Gradle:
implementation "io.github.izzzgoy:ndmatrix:1.0.2"
implementation "io.github.izzzgoy:ndmatrix-plugin:1.0.10"
Подключите плагин в build.gradle.kts модуля (например, feature.auth):
architect {
packageName = "com.multiplatform.feature.auth.api.ui"
}
commonMain {
kotlin.srcDirs("build/generated/architect")
}
Структура файлов:
commonMain/
└─ config/{filename}.json // Файлы конфигурации
build/generated/architect/ // Сгенерированные классы
Конфиг (config/{name}.json) содержит следующие разделы:
На основе конфига плагин сгенерирует:
EventChain.{ParamName}ParameterHolder{ParamName}IntentsEvent{EventName} и Event{EventName}HandlerS : Any.MutableStateFlow<S>.interface Parameter<S>: содержит val value: S и val flow: StateFlow<S>.abstract class ParameterHolder<E: Message.Intent, S: Any>(initialValue: S) — базовая реализация.abstract class EventHandler<E: Message>suspend fun handle(e: E) — основной метод обработки конкретного типа.suspend fun process(e: Message) — обобщённый метод для маршрутизации.IntentHandler<E: Message.Intent> — базовый класс для параметров-процессоров.AbstractEventHandler<E : Message.Event> — инфраструктура для событий:
events: SharedFlow<Message>.abstract class EventChain<E : Message.Event>
intentsHandlers: List<ParameterHolder<*, *>> и eventsSender: List<AbstractEventHandler<*>>.isDebug = true, собирает postMetadata для отладки.rawEvents всех eventsSender, маршрутизируя дочерние события в обработчики.general(e: E) запускает цепочку из всех обработчиков в корневом контексте."SomeParam": {
"type": "integer", // или полный путь к типу
"nullable": false,
"initial": "0",
"intents": {
"SetValue": {
"args": { "value": { "type": "integer", "nullable": false } }
}
}
}
[{
"name": "Total",
"type": "integer",
"nullable": false,
"initial": "0",
"sources": [
{ "type": "Param", "name": "SomeParam" }
]
}]
"UserLoggedIn": {
"args": { "userId": { "type": "string" } },
"returns": [
{ "name": "SomeParam.SetValue", "type": "Param" }
]
}
["UserLoggedIn"]
StateFlow/MutableStateFlow, которые не являются результатом map, combine и т.д.StateFlow выносите параметры.dispatch определяйте изменения состояния — они превращаются в Intent.Event.dispatch оформляйте как отдельный EventHandler.Intent.flow.map, combine и т.д. на проекции в конфиге.{GeneralEventName}ChainSurfaced from shared tags and platforms — no rankings paid for.