mirror of
https://github.com/gromlab-ru/slm-design.git
synced 2026-08-22 07:30:16 +03:00
88 lines
4.6 KiB
Markdown
88 lines
4.6 KiB
Markdown
# Граница доменного пакета
|
||
|
||
> Пояснение новой контейнерной сущности Level 2.
|
||
|
||
## Связанные правила
|
||
|
||
- [`SLM-L2-DOMAIN-R002`](../../rules/level-2.md#slm-l2-domain-r002)
|
||
- [`SLM-L2-DOMAIN-A003`](../../rules/level-2.md#slm-l2-domain-a003)
|
||
- [`SLM-L2-GROUP-R004`](../../rules/level-2.md#slm-l2-group-r004)
|
||
- [`SLM-L2-BUSINESS-R005`](../../rules/level-2.md#slm-l2-business-r005)
|
||
|
||
## Предметная граница
|
||
|
||
Доменный пакет представляет одну связную предметную область и объединяет только принадлежащие ей SLM-модули. Пакет `auth` может содержать business-сценарии авторизации, её browser/server presets и React-модули, но не страницу профиля или общий database client.
|
||
|
||
Пакет не владеет исполняемой ответственностью. Конкретными API, состоянием, зависимостями и lifecycle владеют модули внутри него.
|
||
|
||
## Корень пакета
|
||
|
||
```text
|
||
domains/auth/
|
||
├── README.md
|
||
├── business/
|
||
├── presets/
|
||
├── adapters/
|
||
└── react/
|
||
```
|
||
|
||
В корне разрешены:
|
||
|
||
- документация;
|
||
- ownership metadata;
|
||
- декларативный manifest или декларативная конфигурация архитектурной проверки;
|
||
- обязательный модуль `business`;
|
||
- Groups допустимых ролей.
|
||
|
||
В корне запрещены:
|
||
|
||
- `index.ts` или другой агрегирующий executable entry point;
|
||
- runtime-файлы и side effects;
|
||
- изменяемое состояние и ресурсы lifecycle;
|
||
- реэкспорт API внутренних модулей;
|
||
- page-specific компоненты или сборка нескольких доменов.
|
||
|
||
Metadata содержит только статические данные, не исполняется приложением, build tooling или проверяющим инструментом и не становится скрытым API пакета.
|
||
|
||
## Модули и Groups
|
||
|
||
`business` размещается непосредственно в пакете. Presets и самостоятельные adapters размещаются в Groups `presets` и `adapters`. Framework Group называется по фреймворку: `react`, `vue` и аналогично.
|
||
|
||
```text
|
||
auth/
|
||
├── business/ # SLM-модуль
|
||
├── presets/ # Group
|
||
│ └── browser/ # SLM-модуль
|
||
└── react/ # Framework Group
|
||
├── session/ # SLM-модуль
|
||
└── login-form/ # SLM-модуль
|
||
```
|
||
|
||
Groups не имеют `index.ts`. Поэтому публичными путями являются `auth/business`, `auth/presets/browser`, `auth/react/session`, но не `auth`, `auth/presets` или `auth/react`.
|
||
|
||
## Навигационные Groups
|
||
|
||
Слой `domains` может содержать навигационные Groups с пакетами:
|
||
|
||
```text
|
||
domains/
|
||
└── commerce/ # Навигационная Group
|
||
├── catalog/ # Доменный пакет
|
||
└── orders/ # Доменный пакет
|
||
```
|
||
|
||
Такая Group отличается от Group внутри пакета только допустимым составом: она содержит доменные пакеты и другие navigation Groups, а не модули.
|
||
|
||
## Границы соседних слоёв
|
||
|
||
| Ответственность | Владелец |
|
||
|---|---|
|
||
| Предметные сценарии, `DomainApi`, доменные ошибки | `business` |
|
||
| Техническая реализация зависимости одного домена | Adapter внутри пакета |
|
||
| Универсальный технический сервис | `infra` |
|
||
| Domain-specific framework API | Модуль внутри `react`, `vue` и аналогичной Group |
|
||
| Страница, маршрут, redirect, продуктовый текст | `compositions` |
|
||
| UI, объединяющий несколько доменов | `compositions` |
|
||
|
||
Зависимость от React сама по себе не доказывает принадлежность пакету. Решающим остаётся владелец ответственности.
|