mirror of
https://github.com/gromlab-ru/slm-design.git
synced 2026-08-22 07:30:16 +03:00
95 lines
3.8 KiB
Markdown
95 lines
3.8 KiB
Markdown
---
|
||
title: Архитектурная модель
|
||
status: draft
|
||
normative: true
|
||
---
|
||
|
||
# Архитектурная модель
|
||
|
||
## Структура приложения
|
||
|
||
**SLM-ARCH-001 - ОБЯЗАН.** SLM-приложение должно разделять код по ответственности между следующими слоями:
|
||
|
||
```text
|
||
src/
|
||
├── app/
|
||
├── compositions/
|
||
├── domains/
|
||
├── infra/
|
||
├── ui/
|
||
└── shared/
|
||
```
|
||
|
||
Не каждый слой обязан содержать код в минимальном приложении, но роль каждого существующего модуля должна соответствовать одному владельцу.
|
||
|
||
## Группы ответственности
|
||
|
||
| Группа | Слои | Ответственность |
|
||
|---|---|---|
|
||
| Framework composition | `app`, `compositions` | Подключение к framework и сборка application flows |
|
||
| Product | `domains` | Продуктовые модели, сценарии и runtime surfaces |
|
||
| Technical | `infra`, `ui` | Технические capabilities и универсальный UI |
|
||
| Foundation | `shared` | Детерминированный общий фундамент |
|
||
|
||
## Верхнеуровневое направление
|
||
|
||
```text
|
||
app → compositions | shared
|
||
compositions → compositions | domains | infra | ui | shared
|
||
domains → infra | ui | shared согласно правилам внутренних зон
|
||
infra → infra | shared
|
||
ui → ui | shared
|
||
shared -/→ остальные SLM-слои
|
||
```
|
||
|
||
Схема описывает imports между SLM-слоями проекта. Framework APIs и external packages регулируются ответственностью импортирующего слоя и не показаны как SLM-слои.
|
||
|
||
**SLM-ARCH-002 - ОБЯЗАН.** Верхнеуровневое направление зависимостей между SLM-слоями должно соблюдаться для runtime imports и type imports, кроме явно описанных исключений.
|
||
|
||
**SLM-ARCH-003 - ЗАПРЕЩЕНО.** Нижний слой не может импортировать `app` или `compositions`.
|
||
|
||
**SLM-ARCH-004 - ЗАПРЕЩЕНО.** `infra`, `ui` и `shared` не могут владеть product graph или выступать service locator для domain runtimes.
|
||
|
||
## Путь данных
|
||
|
||
```text
|
||
app
|
||
→ composition
|
||
→ domain runtime surface
|
||
→ domain business scenario
|
||
→ business-owned port
|
||
→ domain adapter
|
||
→ infra / SDK / storage / external source
|
||
```
|
||
|
||
**SLM-ARCH-005 - ОБЯЗАН.** Каждый переход в цепочке продуктовых данных должен сохранять ownership: framework связывает, domain определяет semantics, adapter интегрирует, infra предоставляет technical capability.
|
||
|
||
## Путь UI
|
||
|
||
```text
|
||
app route
|
||
→ page/layout composition
|
||
→ domain UI и composition UI
|
||
→ universal UI
|
||
→ shared styles/resources
|
||
```
|
||
|
||
Владение multi-domain и domain UI определяется правилами [SLM-CMP-006 - SLM-CMP-007](./layers/compositions.md#product-ui) и [SLM-FRM-013](./layers/domains/framework.md#domain-ui).
|
||
|
||
## Внутренняя модель domain
|
||
|
||
```text
|
||
domain client/server assembly
|
||
→ own business factory
|
||
→ own adapters
|
||
|
||
domain framework surface
|
||
→ own DomainRuntime через runtime access boundary
|
||
|
||
composition
|
||
→ создаёт несколько domain runtimes
|
||
→ передаёт готовые capabilities
|
||
```
|
||
|
||
Внутренняя assembly одного domain и cross-domain graph разделены правилами [Client и server assembly](./layers/domains/client-and-server.md) и [Compositions](./layers/compositions.md).
|