SuperAPI AI 工具集

evolutionary-modular-architecture

编程与开发

查看项目

更新于 10-16 01:58

技能介绍

用途

Evolutionary Modular Architecture 用于把平台设计并构建为“演进式模块化单体”:从第一天起就建立强逻辑边界,同时把物理边界(独立部署、独立数据库)保留为后续可选步骤。它强调先简单起步,只有当产品和团队真正需要时才演进粒度,而不是因为微服务流行就反向拆解。

主要能力

  • DDD 战略与战术设计:识别子域并分类为核心、支撑或通用;绘制上下文映射;按子域决定战术强度。
  • 按聚合扁平化组织模块:1 个业务概念 = 1 个文件夹,技术层通过文件后缀表达,而非嵌套的技术层文件夹。
  • 防腐层与通信:每个外部系统都置于端口 + 适配器(ACL)之后;模块间通过事务性发件箱事件通信;需要时用 SSE 做服务端到客户端实时推送。
  • 默认韧性:超时、断路器、带完整抖动的退避重试、重试预算、幂等键、舱壁隔离。
  • 技术栈与演进路径:给出 2026 全栈 TypeScript 栈选择与权衡,并说明何时把模块提升为独立应用或数据库。
  • 架构文档生成:产出单文件、自包含的 HTML 架构文档,含手绘风格 SVG 图表。
  • 自动化校验:提供零依赖 Node ESM 脚本,在 CI 中强制结构与边界规则。

使用方式

按阶段推进,每个阶段有退出标准:

  • 阶段 0 界定范围:确认是新平台、新模块还是评审,确认运行时/栈约束,默认单次部署。
  • 阶段 1 领域发现:读取 references/ddd.md,识别子域并分类,找到通用语言。
  • 阶段 2 边界与上下文映射:绘制上下文映射,决定状态归属(一个模块只写自己的表,跨上下文用 id 引用)。
  • 阶段 3 模块内部:读取 references/flat-by-aggregate.md,按聚合组织,深度 ≤ 2(扁平)或 ≤ 3(按子域)。
  • 阶段 4 通信与防腐层:读取 references/acl-and-communication.md,定义端口与适配器、领域事件、同步与异步决策。
  • 阶段 5 韧性:读取 references/resilience.md,为每个适配器应用韧性策略,为写操作加幂等键。
  • 阶段 6 技术栈与演进:读取 references/stack-2026.md,选择具体栈并说明演进路径。
  • 阶段 7 架构文档:读取 references/architecture-doc.md,从 assets/architecture-template.html 开始,产出单文件 HTML。

校验脚本用法:

node scripts/validate-structure.mjs [root]
node scripts/validate-boundaries.mjs [root]

两者在违规时以非零退出并打印违规路径。

适用场景

  • 从零设计新平台、后端或服务。
  • 为某个领域定义限界上下文与上下文映射。
  • 决定模块的文件夹与文件组织方式。
  • 在单体、模块化单体与微服务之间做选择。
  • 与外部供应商(ERP、工单、存储、支付、AI、身份、持久工作流引擎)集成或解耦。
  • 让外部/模块间调用具备韧性。
  • 增加服务端到客户端实时更新。
  • 选择现代(2026)全栈 TypeScript 栈。

限制

  • 不适用于只有少量端点的简单 CRUD,框架默认即可。
  • 不适用于 NestJS 特定实现细节,应优先使用 nestjs-modular-monolith。
  • 不适用于评审或重构单个贫血领域模型,应优先使用 tactical-ddd。
  • 不要一次性加载所有参考文件,只在当前阶段需要时读取。
  • 硬性规则不可协商:每个模块只写自己的表;禁止跨模块直接导入;每个外部系统都置于端口 + ACL 之后;只重试幂等操作;模块化原则优先于结构原则。
  • 反模式包括:第一天就上微服务或多数据库、模块内使用技术层文件夹、模块读写其他模块的表、供应商 SDK 类型泄漏进领域、重试非幂等写、无退避与抖动的重试、无预算的重试、把内聚的事务性核心拆成事件耦合碎片、对没有不变量的通用子域强行套用丰富战术 DDD。