Derived Modular Arch
Deep Dive

Чего DMA не решает

Честные границы подхода и ограничения инструментов v1.

DMA описывает размещение кода и направление зависимостей, проверяемые по графу импортов. Ниже — то, что остаётся за пределами спецификации или инструментов v1. Знание границ снижает ложные ожидания при внедрении.

Спецификация не решает

Резку домена

Один модуль checkout или два (cart + checkout) — продуктовое моделирование (Conway). DMA может обнаружить плохой cut постфактум (много портов, плотный подграф в doctor), но не даёт рецепт «как нарезать домен».

State management и data flow

Flux, signals, React Query, server cache — DMA говорит где живёт состояние (model/ внутри модуля, services/ при promotion), но не как его обновлять.

Стратегию тестирования

Размещение разместите рядом задано (Тесты). Coverage, пирамида, контрактные тесты — выбор команды.

Runtime-границы

Микрофронтенды, module federation, независимые деплои — вне области применения. Принцип: файлы роутинга фреймворка — тонкая оболочка в корень композиции.

Детали рендеринга фреймворка

SSR, RSC, file-based routing — в гайдах по стекам (Next.js), но DMA не диктует специфичные для фреймворка паттерны помимо корня композиции.

Остаётся на человеке

Граница services / shared

Единственное правило без полной машинной проверки: продуктовый сценарий vs переносимая инфраструктура. Эвристика: «могло бы жить в другом продукте без смены смысла?» — см. Services vs Shared.

Stage 3 — split модуля

Когда public/ раздут (~8+ точка входаs) — делить модуль. Отдельного сигнала в doctor пока нет; решение на ревью.

Имена папок и продуктовая семантика

catalog vs shop — DMA не спорит. Спорит только о предикатах слоя и рёбрах графа.

Инструменты v1 не включает

Нет в v1Что делать вместо
Autofix / codemodsРучной refactor + dma check после каждого шага
Генерация каркаса проектаБыстрый старт, examples
LSP / architecture serverCLI + линтеры в редакторе
Watch modedma check в pre-push или CI
User config для порогов doctorДефолты CLI; изменение — после v1
Cross-package граф в монорепоОтдельные графы на корень (Монорепо)
Полный graph parity в Biome/OxlintВсегда dma check в CI
Runtime loading rules.json в CLIПравила встроены в @derived-modular/cli

Declarations и «манифесты»

DMA не использует декларативные файлы, которые дублируют то, что уже видно из дерева (architecture.yaml со списком слоёв). Допустимы только исполняемые переопределения (временные белый список в инструментах, если появятся) — не документационный театр.

Когда DMA может быть не лучшим выбором

  • Нужна жёсткая семантическая таксономия для онбординга («всё про пользователя — в entities») — см. DMA vs FSD.
  • Продукт организован горизонтальными доменами важнее вертикального ранга — DMA рекомендует split внутри services/, а не новые слои.
  • Команда не готова держать dma check в CI — правила без блокировки снова станут устными.

Что дальше

On this page