2026-07-30 13:22:45 +03:00
# Домены Level 3
2026-07-30 09:19:59 +03:00
2026-07-30 17:25:44 +03:00
> Пояснение строгой внутренней архитектуры домена.
2026-07-30 09:19:59 +03:00
2026-07-30 17:25:44 +03:00
Level 3 заменяет доменный модуль Level 2 немодульной предметной границей — доменом. Внутри неё размещаются модули с разными техническими ролями. Это не новый слой и не обязательный каркас для каждого проекта.
2026-07-30 09:19:59 +03:00
2026-07-30 13:22:45 +03:00
## Связанные правила
2026-07-30 10:56:48 +03:00
2026-07-30 13:22:45 +03:00
- [`SLM-L3-DOMAIN-R001` ](../../rules/level-3.md#slm-l3-domain-r001 )
- [`SLM-L3-DOMAIN-A002` ](../../rules/level-3.md#slm-l3-domain-a002 )
- [`SLM-L3-BUSINESS-R003` ](../../rules/level-3.md#slm-l3-business-r003 )
- [`SLM-L1-MODULE-A004` ](../../rules/level-1.md#slm-l1-module-a004 )
2026-07-30 09:19:59 +03:00
2026-07-30 17:25:44 +03:00
## Роли внутри домена
2026-07-30 09:19:59 +03:00
```text
2026-07-30 17:25:44 +03:00
Модуль бизнес-логики определяет поведение и публичный контракт.
Порты описывают возможности, которые нужны бизнес-логике.
Адаптеры реализуют порты в конкретной среде.
Типовые сборки повторяемо создают API.
Модуль React связывает готовый API с React.
Владелец графа удерживает экземпляр API и завершает е г о жизненный цикл.
2026-07-30 09:19:59 +03:00
```
2026-07-30 13:22:45 +03:00
| Роль | Структурный вид | Когда появляется |
|---|---|---|
2026-07-30 17:25:44 +03:00
| Бизнес-логика | Обязательный модуль `business` | Всегда |
| Типовая сборка | Модуль внутри `presets` | Нужен повторяемый способ сборки |
| Адаптер | Закрытый сегмент сборки или модуль внутри `adapters` | Нужна техническая интеграция |
| Связь с React | Модуль `react` непосредственно в домене | Домен предоставляет API для React |
2026-07-30 13:22:45 +03:00
2026-07-30 17:25:44 +03:00
## Форма домена
2026-07-30 09:19:59 +03:00
```text
2026-07-30 13:22:45 +03:00
domains/auth/
├── business/
│ ├── errors/
│ ├── lib/
│ ├── ports/
│ ├── services/
│ ├── types/
│ └── index.ts
├── presets/
│ └── application/
│ ├── adapters/
│ └── index.ts
├── adapters/
│ └── identity-provider/
│ └── index.ts
└── react/
├── hooks/
├── providers/
└── index.ts
2026-07-30 09:19:59 +03:00
```
2026-07-30 17:25:44 +03:00
Модуль `business` обязателен; остальные ветки появляются по необходимости. `presets` и `adapters` являются группами без собственного исполняемого кода и API. Каталоги `errors` , `lib` , `ports` , `services` , `types` , `hooks` и `providers` являются сегментами соответствующих модулей-владельцев.
2026-07-30 09:19:59 +03:00
2026-07-30 17:25:44 +03:00
Навигационные группы в слое `domains` допустимы, но не являются доменами и не меняют их публичные границы. Основные примеры Level 3 показывают домены непосредственно в `domains` .
2026-07-30 09:19:59 +03:00
2026-07-30 17:25:44 +03:00
## Публичные API модулей
2026-07-30 09:19:59 +03:00
2026-07-30 17:25:44 +03:00
Корень домена не имеет `index.ts` и не реэкспортирует дочерние модули. Внешний потребитель использует публичную точку входа нужного модуля:
2026-07-30 09:19:59 +03:00
2026-07-30 13:22:45 +03:00
```ts
import { authFactory, type AuthApi } from '@/domains/auth/business '
import { createApplicationAuth } from '@/domains/auth/presets/application '
import { AuthProvider, useAuth } from '@/domains/auth/react '
```
2026-07-30 09:19:59 +03:00
2026-07-30 17:25:44 +03:00
Закрытый адаптер внутри `presets/application/adapters` не получает внешней точки входа. Адаптер, оформленный самостоятельным модулем, предоставляет минимальный публичный API. Доступ к нему за пределами домена допускается только как явно объявленная точка расширения интеграции.
2026-07-30 09:19:59 +03:00
2026-07-30 13:22:45 +03:00
## Карта раздела
2026-07-30 09:19:59 +03:00
2026-07-30 17:25:44 +03:00
- [Граница домена ](./domain.md )
- [Модуль бизнес-логики ](./business.md )
- [Фабрика, порты и адаптеры ](./factory-ports-adapters.md )
- [Типовые сборки и SSR ](./presets.md )
- [Модуль React ](./framework-bindings.md )
2026-07-30 13:22:45 +03:00
- [Тестирование ](./testing.md )
2026-07-30 17:25:44 +03:00
- [Пример переноса домена ](./auth-example.md )
2026-07-30 13:22:45 +03:00
- [Открытые вопросы ](./open-questions.md )