Files
slm-design/DRAFT/level-1/dependencies.md

3.4 KiB
Raw Blame History

Зависимости Level 1

Пояснение нормативной модели зависимостей Level 1.

Матрица слоёв задаёт допустимые связи, а модули образуют граф зависимостей.

Что считается зависимостью

  • Обычный импорт, импорт типа и реэкспорт одинаково создают архитектурную зависимость.
  • Импорт между файлами одного модуля не пересекает модульную границу и не создаёт отдельный узел графа.
  • Импорт любого внутреннего файла, сегмента или компонента считается зависимостью ближайшего модуля-владельца.
  • Вложенный модуль является обычным самостоятельным узлом графа.
  • Группы, сегменты и компоненты не являются самостоятельными узлами графа.

Точка входа фреймворка не является модулем. Её импорты участвуют в проверке направления слоёв, но не образуют исходящий узел графа модулей.

Ресурс shared также не является модулем. Его прямой импорт участвует в проверке направления слоёв, но не нарушает требование о публичном API модуля.

Допустимые связи

  • Модуль может импортировать модули своего слоя и слоёв, разрешённых нормативной матрицей.
  • Модули одного слоя могут импортировать друг друга.
  • Промежуточный слой не является обязательным посредником.
  • infra и ui не импортируют друг друга; их связывает владелец из domains, compositions или app.

Доменный модуль Level 1 может импортировать публичный API другого доменного модуля. Runtime- и type-only импорты одинаково создают ребро графа, поэтому общий граф обязан оставаться ацикличным.

// domains/orders
import type { Product } from '@/domains/catalog'

Level 1 не требует отдельного механизма междоменной инъекции. Более строгая модель cross-domain зависимостей задаётся Level 2.

Матрица слоёв определена в Слоях.

Связанные правила

Публичный API

// Допустимо
import { Button } from '@/ui/button'

// Недопустимо
import { Button } from '@/ui/button/button'

Циклы

ui/modal → ui/button → ui/icon
ui/icon -/→ ui/modal