5.8 KiB
Граница доменного пакета
Пояснение новой контейнерной сущности Level 2.
Связанные правила
SLM-L2-DOMAIN-R002SLM-L2-DOMAIN-A003SLM-L2-GROUP-R004SLM-L2-BUSINESS-R005SLM-L2-BUSINESS-A019SLM-L2-PRESET-A020SLM-L2-ADAPTER-R021SLM-L2-BUSINESS-A022
Предметная граница
Доменный пакет представляет одну связную предметную область и объединяет только принадлежащие ей SLM-модули. Пакет auth может содержать business-сценарии авторизации, её browser/server presets и React-модули, но не страницу профиля или общий database client.
Пакет не владеет исполняемой ответственностью. Конкретными API, состоянием, зависимостями и lifecycle владеют модули внутри него.
Корень пакета
domains/auth/
├── README.md
├── business/
├── presets/
├── adapters/
└── react/
В корне разрешены:
- документация;
- ownership metadata;
- декларативный manifest или декларативная конфигурация архитектурной проверки;
- обязательный модуль
business; - обязательная непустая Group
presets; - непустая Group
adapters, если фабрика имеет технические зависимости; - Framework Groups при наличии соответствующих модулей.
В корне запрещены:
index.tsили другой агрегирующий executable entry point;- runtime-файлы и side effects;
- изменяемое состояние и ресурсы lifecycle;
- реэкспорт API внутренних модулей;
- page-specific компоненты или сборка нескольких доменов.
Metadata содержит только статические данные, не исполняется приложением, build tooling или проверяющим инструментом и не становится скрытым API пакета.
Модули и Groups
business размещается непосредственно в пакете и предоставляет три публичных фасета: type-only barrel, factory и error. Presets размещаются в обязательной Group presets. Все production adapters являются самостоятельными модулями Group adapters и не определяются в других частях production-графа. Framework Group называется по фреймворку: react, vue и аналогично.
auth/
├── business/ # SLM-модуль
│ ├── index.ts # Только public types
│ ├── factory.ts # Public factory entry
│ └── error.ts # Public error runtime entry
├── adapters/ # Group при наличии technical dependencies
│ └── phone-http/ # SLM-модуль
├── presets/ # Обязательная Group
│ └── browser/ # SLM-модуль
└── react/ # Framework Group
├── session/ # SLM-модуль
└── login-form/ # SLM-модуль
Groups не имеют index.ts. Поэтому публичными путями являются auth/business, auth/business/factory, auth/business/error, auth/adapters/phone-http, auth/presets/browser и auth/react/session, но не auth, auth/adapters, auth/presets или auth/react.
Навигационные Groups
Слой domains может содержать навигационные Groups с пакетами:
domains/
└── commerce/ # Навигационная Group
├── catalog/ # Доменный пакет
└── orders/ # Доменный пакет
Такая Group отличается от Group внутри пакета только допустимым составом: она содержит доменные пакеты и другие navigation Groups, а не модули.
Границы соседних слоёв
| Ответственность | Владелец |
|---|---|
Предметные сценарии, DomainApi, доменные ошибки |
business |
| Техническая реализация зависимости одного домена | Adapter внутри пакета |
| Универсальный технический сервис | infra |
| Domain-specific framework API | Модуль внутри react, vue и аналогичной Group |
| Страница, маршрут, redirect, продуктовый текст | compositions |
| UI, объединяющий несколько доменов | compositions |
Зависимость от React сама по себе не доказывает принадлежность пакету. Решающим остаётся владелец ответственности.