mirror of
https://github.com/gromlab-ru/slm-design.git
synced 2026-08-22 07:30:16 +03:00
60 lines
2.6 KiB
Markdown
60 lines
2.6 KiB
Markdown
# Модули слоя domains
|
||
|
||
> Пояснение размещения предметных ответственностей в обычных SLM-модулях.
|
||
|
||
## Связанные правила
|
||
|
||
- [`SLM-MODULE-A004`](../rules/registry.md#slm-module-a004)
|
||
- [`SLM-MODULE-R006`](../rules/registry.md#slm-module-r006)
|
||
- [`SLM-GROUP-R007`](../rules/registry.md#slm-group-r007)
|
||
- [`SLM-LAYER-R001`](../rules/registry.md#slm-layer-r001)
|
||
|
||
## Обычные модули SLM
|
||
|
||
Модуль слоя `domains` является обычным SLM-модулем. Он отличается от модулей других слоёв только предметной ответственностью, а не отдельной архитектурной сущностью или обязательной файловой формой.
|
||
|
||
```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/ # SLM-модуль
|
||
│ └── orders/ # SLM-модуль
|
||
└── cabinet/ # Group
|
||
└── profile/ # SLM-модуль
|
||
```
|
||
|
||
Group не имеет `index.ts`, реализации, состояния или публичного API. Она не создаёт dependency boundary и не реэкспортирует содержащиеся в ней модули.
|
||
|
||
## Среды выполнения
|
||
|
||
Если части публичного API модуля предназначены для разных сред выполнения, модуль сохраняет одну ответственность и разделяет доступ фасетами `client`, `browser` и `server`.
|