4.1 KiB
title, status, normative
| title | status | normative |
|---|---|---|
| Слой Domains | draft | true |
Слой Domains
domains содержит законченные вертикальные продуктовые модули. Domain объединяет business logic, framework surfaces, concrete adapters и runtime-specific assembly одной предметной ответственности, не смешивая их внутренние направления зависимостей.
Domain и group
SLM-DOM-001 - ОБЯЗАН. Конечный domain должен располагаться непосредственно в domains или внутри одной или нескольких навигационных groups.
domains/{domain}
domains/{group}/{domain}
domains/{group}/{nested-group}/{domain}
SLM-DOM-002 - ЗАПРЕЩЕНО. Domain group не может иметь index.ts, public API, state, adapters, assembly или runtime.
domains/
├── navigation/ # domain
└── knv/ # group
├── auth/ # domain
├── user/ # domain
└── orders/ # domain
SLM-DOM-003 - ОБЯЗАН. Первой архитектурной единицей в group tree является конечная папка, владеющая самостоятельной предметной ответственностью.
Внутренние зоны
Базовая форма domain:
domains/{group...}/{domain}/
├── business/
├── react/
├── adapters/
├── client/
└── server/
| Зона | Статус | Ответственность |
|---|---|---|
business |
Обязательная | Domain model, factory, ports, scenarios, errors |
react |
Опциональная | React runtime access, hooks, Providers, domain UI |
adapters |
Опциональная | Concrete реализации business-owned ports |
client |
Опциональная | Browser/client assembly одного domain |
server |
Опциональная | Server/request assembly одного domain |
SLM-DOM-004 - ОБЯЗАН. Каждый domain должен содержать business как единственный владелец product model и business semantics.
SLM-DOM-005 - СЛЕДУЕТ. Опциональную зону следует добавлять только при наличии реального runtime consumer и самостоятельной ответственности.
SLM-DOM-006 - ЗАПРЕЩЕНО. Нельзя создавать пустые симметричные react, adapters, client или server на будущее.
SLM-DOM-007 - ОБЯЗАН. Domain zones должны соблюдать внутреннюю dependency direction, даже если физически находятся под одним владельцем.
Domain ownership
Domain может владеть:
- model и value objects;
- product scenarios;
- domain state и transitions;
- ports;
- normalization и domain errors;
- framework hooks и UI одного domain;
- concrete integrations собственных ports;
- client/server runtime assembly собственного business.
Domain не владеет:
- page/route/layout composition;
- UI, объединяющим несколько domains;
- cross-domain graph;
- framework route entry;
- универсальным technical service;
- product-agnostic UI primitive.
Product gateway
Framework surface и runtime assembly сохраняют business runtime единственным product gateway согласно SLM-DATA-001 - SLM-DATA-003.
Cross-domain boundary
Domain может принять готовую внешнюю capability через contract, но не импортирует runtime surface другого domain. Точные правила определены в cross-domain boundary.