mirror of
https://github.com/gromlab-ru/slm-design.git
synced 2026-08-22 07:30:16 +03:00
51 lines
4.0 KiB
Markdown
51 lines
4.0 KiB
Markdown
# Зависимости Level 3
|
||
|
||
> Уточнение графа зависимостей Level 2 внутри домена.
|
||
|
||
## Связанные правила
|
||
|
||
- [`SLM-L3-BUSINESS-A004`](../rules/level-3.md#slm-l3-business-a004)
|
||
- [`SLM-L3-DEPENDENCY-R011`](../rules/level-3.md#slm-l3-dependency-r011)
|
||
- [`SLM-L3-ENVIRONMENT-A012`](../rules/level-3.md#slm-l3-environment-a012)
|
||
- [`SLM-L1-DEPENDENCY-A005`](../rules/level-1.md#slm-l1-dependency-a005)
|
||
|
||
## Направление внутри домена
|
||
|
||
| Исходный модуль | Допустимые зависимости |
|
||
|---|---|
|
||
| `business` | Собственные сегменты, нейтральные ресурсы `shared`, в ограниченных случаях — публичные типы другого модуля `business` |
|
||
| Адаптер | Контракты `business`, модули `infra`, конкретная техническая реализация и нейтральные ресурсы `shared` |
|
||
| Модуль группы `presets` | Фабрика и контракты `business`, закрытые или самостоятельные адаптеры |
|
||
| `react` | Контракты `business`, готовый API и React |
|
||
| Модуль-владелец графа | Публичные API модулей `business`, типовых сборок и модулей фреймворков, входящих в граф |
|
||
|
||
Модуль `business` не импортирует адаптеры, сборки, модули фреймворков, `infra`, продуктовые SDK, хранилища, API браузера или Node.js и конфигурацию среды. Адаптер не импортирует сборку или модуль фреймворка. Модуль сборки не импортирует модуль фреймворка.
|
||
|
||
## Междоменные зависимости
|
||
|
||
Модуль `business` одного домена не создаёт фабрику другого домена и не вызывает его исполняемый API напрямую. Если домену `orders` нужны сведения об авторизации, `orders/business` описывает собственный минимальный порт, а владелец графа передаёт его реализацию поверх уже созданного `AuthApi`.
|
||
|
||
```text
|
||
сборка auth
|
||
→ AuthApi
|
||
→ сборка orders
|
||
→ OrdersApi
|
||
```
|
||
|
||
Импорт публичного типа из модуля `business` другого домена допустим только при реальной ацикличной зависимости. Такой импорт не разрешает вызывать API другого домена.
|
||
|
||
Прямой импорт даже чистой функции не служит обходом порта. Независимое общее правило принадлежит `shared`, а предметная возможность другого домена передаётся через порт.
|
||
|
||
## Границы сред выполнения
|
||
|
||
Серверная сборка или адаптер получает отдельную публичную точку входа и предусмотренную фреймворком либо сборщиком метку:
|
||
|
||
```text
|
||
business # подходит клиенту и серверу
|
||
presets/application # подходит клиенту, если совместимы адаптеры
|
||
presets/request # только сервер
|
||
react # клиентский модуль React
|
||
```
|
||
|
||
Серверная точка входа не реэкспортируется через `business`, `react`, клиентскую сборку или корень домена. Путь `server/` или `client/` сам по себе ничего не доказывает: проверяется весь граф импортов, достижимый из точки входа.
|