Derived Modular Arch
深度解析

DMA 不做什么

方案的诚实边界,以及 v1 工具的限制。

DMA 描述的是代码放置与依赖方向,可从导入图校验。下面是规范或 v1 工具范围之外的内容。了解限制能减少采用时的错误预期。

规范不解决什么

领域切分

一个模块 checkout 还是两个(cart + checkout)——产品建模(Conway)。DMA 可以事后发现切分不好(很多 port、doctor 里密集子图),但不提供「怎么切领域」的配方。

状态管理与数据流

Flux、signals、React Query、服务端缓存——DMA 说的是状态放哪(模块内 model/,提升后进 services/),不是怎么更新。

测试策略

就近放置有定义(测试)。覆盖率、金字塔、契约测试——团队自选。

运行时边界

微前端、module federation、独立部署——不在范围内。原则:框架路由文件是组合根(composition root)里的薄壳。

框架渲染细节

SSR、RSC、基于文件的路由——在栈指南里(Next.js),但 DMA 除组合根外不规定框架特定模式。

仍靠人判断

services / shared 边界

唯一没有完整机器校验的规则:产品场景 vs 可移植基础设施。启发式:「搬到另一个产品含义不变还能用吗?」——见 Services vs Shared

Stage 3 — 模块拆分

public/ 臃肿时(约 8+ 入口)——拆分模块。尚无专用 doctor 信号;在 review 里决定。

文件夹名与产品语义

catalog vs shop——DMA 不争论。它只争论层谓词图的边

v1 工具不包含什么

v1 没有替代做法
自动修复 / codemod手动重构 + 每步后跑 dma check
项目脚手架快速开始、示例
LSP / 架构 serverCLI + 编辑器里的 linter
Watch 模式pre-push 或 CI 里跑 dma check
doctor 阈值的用户配置
Monorepo 跨包图每个 root 单独建图(Monorepo
Biome/Oxlint 全图对等CI 里始终跑 dma check
CLI 运行时加载 rules.json规则内置于 @derived-modular/cli

声明与「清单」

DMA 不用重复目录树已可见信息的声明式文件(带层列表的 architecture.yaml)。只允许可执行的覆盖(工具里的临时 allowlist,若有)——不是文档表演。

DMA 可能不是最佳选择的场景

  • 你需要严格的语义分类帮新人上手(「所有跟用户相关的放 entities」)——见 DMA vs FSD
  • 产品更按横向领域组织,而非纵向层级——DMA 建议在 services/ 内部拆分,而不是加新层。
  • 团队还没准备在 CI 里保持 dma check——没有门槛的规则又会变成口头传统。

接下来

On this page