2026-07-30 09:19:59 +03:00
# Зависимости Level 1
> Пояснение нормативной модели зависимостей Level 1.
Слои задают допустимое направление связей, а модули образуют граф зависимостей.
## Что считается зависимостью
- Обычный импорт, импорт типа и реэкспорт одинаково создают архитектурную зависимость.
- Импорт между файлами одного модуля не пересекает модульную границу и не создаёт отдельный узел графа.
- Импорт любого внутреннего файла, сегмента или компонента считается зависимостью ближайшего модуля-владельца.
- Вложенный модуль является обычным самостоятельным узлом графа.
- Группы, сегменты и компоненты не являются самостоятельными узлами графа.
Точка входа фреймворка не является модулем. Её импорты участвуют в проверке направления слоёв, но не образуют исходящий узел графа модулей.
Р е с у р с `shared` также не является модулем. Е г о прямой импорт участвует в проверке направления слоёв, но не нарушает требование о публичном API модуля.
## Направление
- Модуль может импортировать модули своего или любого нижнего слоя.
- Модули одного слоя могут импортировать друг друга.
- Промежуточный слой не является обязательным посредником.
2026-07-30 18:45:54 +03:00
Доменный модуль Level 1 может импортировать публичный API другого доменного модуля. Runtime- и type-only импорты одинаково создают р е б р о графа, поэтому общий граф обязан оставаться ацикличным.
```ts
// domains/orders
import type { Product } from '@/domains/catalog '
```
Level 1 не требует отдельного механизма междоменной инъекции. Более строгая модель cross-domain зависимостей задаётся Level 2.
2026-07-30 09:19:59 +03:00
Направление слоёв определено в [Слоях ](./layers.md ).
## Связанные правила
- [`SLM-L1-LAYER-A002` ](../rules/level-1.md#slm-l1-layer-a002 )
- [`SLM-L1-MODULE-A004` ](../rules/level-1.md#slm-l1-module-a004 )
- [`SLM-L1-DEPENDENCY-A005` ](../rules/level-1.md#slm-l1-dependency-a005 )
- [`SLM-L1-NESTED_MODULE-A010` ](../rules/level-1.md#slm-l1-nested_module-a010 )
## Публичный API
```ts
// Допустимо
import { Button } from '@/ui/button '
// Недопустимо
import { Button } from '@/ui/button/button '
```
## Циклы
```text
ui/modal → ui/button → ui/icon
ui/icon -/→ ui/modal
```