Чего 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 server | CLI + линтеры в редакторе |
| Watch mode | dma 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 — правила без блокировки снова станут устными.