7.4 KiB
Граница доменного пакета
Пояснение контейнерной сущности Level 2 и её совместного использования с доменными модулями Level 1.
Связанные правила
SLM-L2-DOMAIN-R002SLM-L2-DOMAIN-A003SLM-L2-GROUP-R004SLM-L2-API-R005SLM-L2-DOMAIN-A026SLM-L2-API-A019SLM-L2-ASSEMBLY-A020SLM-L2-ADAPTER-R021
Предметная граница
Доменный пакет представляет одну связную предметную область и объединяет только принадлежащие ей SLM-модули. Пакет auth может содержать Domain API авторизации, production adapters её providers, assemblies и React bindings, но не страницу профиля, общий database client или multi-domain navigation policy.
Пакет не владеет исполняемой ответственностью. Domain API, adapters, production graph, framework projection и lifecycle принадлежат конкретным модулям внутри него.
Level 2 применяется к пакету, а не ко всему SLM root. Например, auth может быть пакетом Level 2, пока catalog и news остаются доменными модулями Level 1.
Корень пакета
domains/auth/
├── README.md
├── api/
├── adapters/
├── assemblies/
└── react/
В корне разрешены:
- документация;
- ownership metadata;
- декларативный manifest архитектурной проверки;
- объявления environment capability sets;
- обязательный модуль
api; - обязательная непустая Group
assembliesс модулемdefault; - непустая Group
adapters, если хотя бы одна фабрика имеет dependency port; - Framework Groups при наличии соответствующих модулей.
В корне запрещены:
index.tsили другой агрегирующий executable entry point;- runtime-файлы и side effects;
- изменяемое состояние и lifecycle resources;
- реэкспорт API внутренних модулей;
- page-specific компоненты или сборка нескольких доменов.
Metadata содержит только статические данные. Проверяющий инструмент может читать её декларативно, но она не исполняется и не становится скрытым API пакета.
Policy boundary
Доменный пакет не является узлом import-графа. Его техническая граница состоит из объявленного проверке набора дочерних модулей и правил, применяемых ко всем связям через эту границу.
Отсутствие root barrel намеренно:
- client, server, RSC и worker entry points не агрегируются в один импорт;
- каждый модуль сохраняет отдельные ответственность и environment boundary;
- concrete adapters не становятся частью Domain API;
- Groups не превращаются в скрытые modules;
- versioning publishable package остаётся за пределами Level 2.
Модули и Groups
auth/
├── api/ # SLM-модуль
│ ├── index.ts # Consumer-facing types
│ ├── ports.ts # Implementer-facing types
│ ├── factory.ts # Runtime factories
│ └── runtime.ts # Необязательный deterministic runtime
├── adapters/ # Group при наличии ports
│ ├── identity-rest/ # SLM-модуль
│ └── identity-realtime/ # SLM-модуль
├── assemblies/ # Обязательная Group
│ ├── default/ # Обязательный SLM-модуль
│ └── administration/ # Дополнительный SLM-модуль
└── react/ # Framework Group
├── session/ # SLM-модуль
└── queries/ # SLM-модуль
Groups не имеют index.ts. Публичными путями являются auth/api, auth/api/ports, auth/api/factory, опциональный auth/api/runtime, auth/adapters/identity-rest, auth/assemblies/default и auth/react/session, но не auth, auth/adapters, auth/assemblies или auth/react.
Навигационные Groups
Слой domains может содержать Groups с обеими формами домена:
domains/
└── commerce/ # Навигационная Group
├── catalog/ # Доменный модуль Level 1
└── orders/ # Доменный пакет Level 2
Такая Group отличается от Group внутри пакета допустимым составом: она содержит доменные модули, доменные пакеты и другие navigation Groups, а не внутренние модули пакета.
Одна предметная область не представляется одновременно модулем и пакетом. Переход завершается удалением старой границы выбранного домена, но требует обновить все его входящие imports и production composition roots.
Границы соседних слоёв
| Ответственность | Владелец |
|---|---|
| Публичные модели, Domain API, validation и domain errors | api |
| Контракт external capability | api/ports |
| Production-реализация dependency port | Adapter внутри пакета |
| Штатный production-граф | assemblies/default |
| Специальный production-граф | Дополнительная assembly |
| Domain-specific framework state, cache и bindings | Модуль внутри react, vue и аналогичной Group |
| Универсальный технический сервис | infra |
| Страница, маршрут, redirect, продуктовый текст | compositions |
| UI, объединяющий несколько доменов | compositions |
Зависимость от React, WebSocket или SDK сама по себе не определяет владельца. Решающими остаются предметная ответственность, направление dependency inversion и публичная граница.