5.5 KiB
Граница домена
Пояснение предметной и структурной границы Level 3.
Связанные правила
Предметная граница
Домен представляет одну связную предметную область: 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 не создаются автоматически. Такой каталог должен быть либо сегментом модуля-владельца, либо самостоятельным модулем с одной из допустимых ролей домена.
Публичная граница
@/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, только когда работает с контрактом домена и не определяет страницу, маршрут или продуктовую композицию.