# Граница домена > Пояснение предметной и структурной границы Level 3. ## Связанные правила - [`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-R011`](../../rules/level-1.md#slm-l1-module-r011) - [`SLM-L1-GROUP-R007`](../../rules/level-1.md#slm-l1-group-r007) ## Предметная граница Домен представляет одну связную предметную область: `auth`, `catalog`, `orders` или `checkout`. Он объединяет её бизнес-логику, технические интеграции, повторяемые сборки и модули фреймворков, но не превращается в большой модуль со смешанными ролями. Домен является предметной границей, а не владельцем исполняемого кода в смысле Level 1. Каждый сценарий, адаптер и способ сборки принадлежит конкретному модулю. Поэтому одна предметная область может иметь несколько публичных API, не нарушая правило о единственном владельце ответственности. ## Структурные виды и роли | Путь | Роль | Структурный вид | |---|---|---| | `domains/auth` | Предметная область авторизации | Домен | | `domains/auth/business` | Бизнес-логика | Модуль | | `domains/auth/business/ports` | Необходимые бизнес-логике возможности | Сегмент | | `domains/auth/presets` | Навигация по типовым сборкам | Группа | | `domains/auth/presets/application` | Сборка уровня приложения | Модуль | | `domains/auth/presets/application/adapters` | Закрытые адаптеры сборки | Сегмент | | `domains/auth/adapters` | Навигация по самостоятельным адаптерам | Группа | | `domains/auth/adapters/identity-provider` | Повторно используемый адаптер | Модуль | | `domains/auth/react` | Связь с React | Модуль | Роль отвечает на вопрос, что делает код. Структурный вид определяет, какую архитектурную границу он образует. Имя папки само по себе не доказывает ни роль, ни структурный вид. ## Корень домена Корень домена не содержит реализацию, состояние, ресурсы жизненного цикла, `index.ts` или общий файл реэкспортов. Его прямыми детьми могут быть модуль `business`, группы `presets` и `adapters`, а также модули фреймворков, например `react`. Корневые ветки `model`, `types`, `errors`, `lib`, `ui`, `client`, `server` или `tests` не создаются автоматически. Такой каталог должен быть либо сегментом модуля-владельца, либо самостоятельным модулем с одной из допустимых ролей домена. ## Публичная граница ```text @/domains/auth/business @/domains/auth/presets/application @/domains/auth/react ``` Эти пути являются публичными API отдельных модулей. Корневого пути `@/domains/auth` для исполняемого кода не существует: он не должен объединять независимый от среды модуль `business`, клиентский React и серверную сборку через `export *`. ## Граница с другими слоями | Ответственность | Владелец | |---|---| | Предметные сценарии, контракты, модель состояния и ошибки | `domains/auth/business` | | Технический адаптер одной сборки | Сегмент соответствующего модуля в `presets` | | Повторно используемая интеграция авторизации | Самостоятельный модуль адаптера | | Повторяемая сборка `AuthApi` | Модуль в `presets` | | Провайдер, хук и относящийся к домену интерфейс React | `domains/auth/react` | | Страница, маршрут, перенаправление, экран и конкретный визуальный результат | Модуль `compositions` | | Обёртка над SDK или технический сервис без семантики авторизации | Модуль `infra` | Зависимость от фреймворка сама по себе не делает интерфейс частью домена. Компонент принадлежит `react`, только когда работает с контрактом домена и не определяет страницу, маршрут или продуктовую композицию.