mirror of
https://github.com/gromlab-ru/slm-design.git
synced 2026-08-22 07:30:16 +03:00
92 lines
4.1 KiB
Markdown
92 lines
4.1 KiB
Markdown
---
|
|
title: Слой Domains
|
|
status: draft
|
|
normative: true
|
|
---
|
|
|
|
# Слой Domains
|
|
|
|
`domains` содержит законченные вертикальные продуктовые модули. Domain объединяет business logic, framework surfaces, concrete adapters и runtime-specific assembly одной предметной ответственности, не смешивая их внутренние направления зависимостей.
|
|
|
|
## Domain и group
|
|
|
|
**SLM-DOM-001 - ОБЯЗАН.** Конечный domain должен располагаться непосредственно в `domains` или внутри одной или нескольких навигационных groups.
|
|
|
|
```text
|
|
domains/{domain}
|
|
domains/{group}/{domain}
|
|
domains/{group}/{nested-group}/{domain}
|
|
```
|
|
|
|
**SLM-DOM-002 - ЗАПРЕЩЕНО.** Domain group не может иметь `index.ts`, public API, state, adapters, assembly или runtime.
|
|
|
|
```text
|
|
domains/
|
|
├── navigation/ # domain
|
|
└── knv/ # group
|
|
├── auth/ # domain
|
|
├── user/ # domain
|
|
└── orders/ # domain
|
|
```
|
|
|
|
**SLM-DOM-003 - ОБЯЗАН.** Первой архитектурной единицей в group tree является конечная папка, владеющая самостоятельной предметной ответственностью.
|
|
|
|
## Внутренние зоны
|
|
|
|
Базовая форма domain:
|
|
|
|
```text
|
|
domains/{group...}/{domain}/
|
|
├── business/
|
|
├── react/
|
|
├── adapters/
|
|
├── client/
|
|
└── server/
|
|
```
|
|
|
|
| Зона | Статус | Ответственность |
|
|
|---|---|---|
|
|
| [`business`](./business.md) | Обязательная | Domain model, factory, ports, scenarios, errors |
|
|
| [`react`](./framework.md) | Опциональная | React runtime access, hooks, Providers, domain UI |
|
|
| [`adapters`](./ports-and-adapters.md) | Опциональная | Concrete реализации business-owned ports |
|
|
| [`client`](./client-and-server.md) | Опциональная | Browser/client assembly одного domain |
|
|
| [`server`](./client-and-server.md) | Опциональная | 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](../../state-and-data.md#domain-gateway).
|
|
|
|
## Cross-domain boundary
|
|
|
|
Domain может принять готовую внешнюю capability через contract, но не импортирует runtime surface другого domain. Точные правила определены в [cross-domain boundary](./cross-domain-boundary.md).
|