mirror of
https://github.com/gromlab-ru/slm-design.git
synced 2026-08-22 07:30:16 +03:00
62 lines
3.3 KiB
Markdown
62 lines
3.3 KiB
Markdown
# Доменные модули Level 1
|
||
|
||
> Пояснение базовой модели предметных областей без обязательной внутренней архитектуры.
|
||
|
||
## Связанные правила
|
||
|
||
- [`SLM-L1-DOMAIN-R015`](../rules/level-1.md#slm-l1-domain-r015)
|
||
- [`SLM-L1-MODULE-A004`](../rules/level-1.md#slm-l1-module-a004)
|
||
- [`SLM-L1-MODULE-R006`](../rules/level-1.md#slm-l1-module-r006)
|
||
- [`SLM-L1-GROUP-R007`](../rules/level-1.md#slm-l1-group-r007)
|
||
|
||
## Один домен, один модуль
|
||
|
||
Связная предметная область получает один доменный модуль. Level 1 не требует выделять Domain API, ports, adapters, assemblies или framework bindings в самостоятельные соседние модули.
|
||
|
||
```text
|
||
domains/auth/
|
||
├── hooks/
|
||
├── services/
|
||
├── stores/
|
||
├── types/
|
||
├── ui/
|
||
└── index.ts
|
||
```
|
||
|
||
Показанные каталоги являются возможными сегментами, а не обязательным каркасом. Доменный модуль может содержать предметные типы, сценарии, состояние, framework-код, локальные адаптеры, компоненты и вложенные модули.
|
||
|
||
## Публичный API
|
||
|
||
Внешний код использует домен через обычный публичный API модуля:
|
||
|
||
```ts
|
||
import { signOut, useSession } from '@/domains/auth'
|
||
```
|
||
|
||
Глубокий импорт во внутренний сегмент нарушает модульную границу:
|
||
|
||
```ts
|
||
import { useSession } from '@/domains/auth/hooks/use-session'
|
||
```
|
||
|
||
## Groups
|
||
|
||
При большом количестве доменных модулей слой `domains` может содержать обычные навигационные Groups:
|
||
|
||
```text
|
||
domains/
|
||
├── shop/ # Group
|
||
│ ├── catalog/ # Доменный модуль
|
||
│ └── orders/ # Доменный модуль
|
||
└── cabinet/ # Group
|
||
└── profile/ # Доменный модуль
|
||
```
|
||
|
||
Group не имеет `index.ts`, реализации, состояния или публичного API. Она не создаёт dependency boundary и не реэкспортирует содержащиеся в ней домены.
|
||
|
||
## Переход на Level 2
|
||
|
||
Доменный модуль переводится в доменный пакет Level 2, когда ему нужны устойчивые API, несколько фабрик, разные среды выполнения или независимые SLM-модули сборок и framework-интеграции.
|
||
|
||
Такой переход изменяет только форму выбранного домена: корневой доменный модуль исчезает, а его публичные модели и операции переходят обязательному модулю `api` внутри доменного пакета. Другие предметные области SLM root не обязаны переходить вместе с ним, но входящие imports и production composition roots выбранного домена обновляются.
|