# Домены Level 3 > Пояснение строгой внутренней архитектуры домена. Level 3 заменяет доменный модуль Level 2 немодульной предметной границей — доменом. Внутри неё размещаются модули с разными техническими ролями. Это не новый слой и не обязательный каркас для каждого проекта. ## Связанные правила - [`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) ## Роли внутри домена ```text Модуль бизнес-логики определяет поведение и публичный контракт. Порты описывают возможности, которые нужны бизнес-логике. Адаптеры реализуют порты в конкретной среде. Типовые сборки повторяемо создают API. Модуль React связывает готовый API с React. Владелец графа удерживает экземпляр API и завершает его жизненный цикл. ``` | Роль | Структурный вид | Когда появляется | |---|---|---| | Бизнес-логика | Обязательный модуль `business` | Всегда | | Типовая сборка | Модуль внутри `presets` | Нужен повторяемый способ сборки | | Адаптер | Закрытый сегмент сборки или модуль внутри `adapters` | Нужна техническая интеграция | | Связь с React | Модуль `react` непосредственно в домене | Домен предоставляет API для React | ## Форма домена ```text 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 ``` Модуль `business` обязателен; остальные ветки появляются по необходимости. `presets` и `adapters` являются группами без собственного исполняемого кода и API. Каталоги `errors`, `lib`, `ports`, `services`, `types`, `hooks` и `providers` являются сегментами соответствующих модулей-владельцев. Навигационные группы в слое `domains` допустимы, но не являются доменами и не меняют их публичные границы. Основные примеры Level 3 показывают домены непосредственно в `domains`. ## Публичные API модулей Корень домена не имеет `index.ts` и не реэкспортирует дочерние модули. Внешний потребитель использует публичную точку входа нужного модуля: ```ts import { authFactory, type AuthApi } from '@/domains/auth/business' import { createApplicationAuth } from '@/domains/auth/presets/application' import { AuthProvider, useAuth } from '@/domains/auth/react' ``` Закрытый адаптер внутри `presets/application/adapters` не получает внешней точки входа. Адаптер, оформленный самостоятельным модулем, предоставляет минимальный публичный API. Доступ к нему за пределами домена допускается только как явно объявленная точка расширения интеграции. ## Карта раздела - [Граница домена](./domain.md) - [Модуль бизнес-логики](./business.md) - [Фабрика, порты и адаптеры](./factory-ports-adapters.md) - [Типовые сборки и SSR](./presets.md) - [Модуль React](./framework-bindings.md) - [Тестирование](./testing.md) - [Пример переноса домена](./auth-example.md) - [Открытые вопросы](./open-questions.md)