
Architectural framework manages state and event processing, utilizing parameters, projections, events, intents, and event chains to ensure code predictability, testability, and scalability.
ndmatrix-parameter — это архитектурный фреймворк для управления состоянием и обработки событий в проектах компании. Фреймворк основан на разделении на:
Фреймворк позволяет строго отделять логику изменения состояния от вычислений, обеспечивая предсказуемость, тестируемость и расширяемость кода.
S : 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 Projection<S: Any> : Parameter<S>Message может порождать дочерние события.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) запускает цепочку из всех обработчиков в корневом контексте.Добавьте в зависимости 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) содержит следующие разделы:
"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"]На основе конфига плагин сгенерирует:
EventChain.StateFlow/MutableStateFlow, которые не являются результатом map, combine и т.д.StateFlow выносите параметры.dispatch определяйте изменения состояния — они превращаются в Intent.Event.dispatch оформляйте как отдельный EventHandler.Intent.flow.map, combine и т.д. на проекции в конфиге.{ParamName}ParameterHolder
{ParamName}Intents
Event{EventName} и Event{EventName}Handler
{GeneralEventName}Chain
ndmatrix-parameter — это архитектурный фреймворк для управления состоянием и обработки событий в проектах компании. Фреймворк основан на разделении на:
Фреймворк позволяет строго отделять логику изменения состояния от вычислений, обеспечивая предсказуемость, тестируемость и расширяемость кода.
S : 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 Projection<S: Any> : Parameter<S>Message может порождать дочерние события.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) запускает цепочку из всех обработчиков в корневом контексте.Добавьте в зависимости 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) содержит следующие разделы:
"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"]На основе конфига плагин сгенерирует:
EventChain.StateFlow/MutableStateFlow, которые не являются результатом map, combine и т.д.StateFlow выносите параметры.dispatch определяйте изменения состояния — они превращаются в Intent.Event.dispatch оформляйте как отдельный EventHandler.Intent.flow.map, combine и т.д. на проекции в конфиге.{ParamName}ParameterHolder
{ParamName}Intents
Event{EventName} и Event{EventName}Handler
{GeneralEventName}Chain