关于 tactical-ddd
tactical-ddd 是用于审查和重构代码、构建丰富领域模型的编码技能。它检测贫血模型迹象并建议 DDD 构件,按步骤指导重构;代码审查会先报告发现并征求同意,再进行修改。
主要功能
- 01检测贫血模型迹象
- 02评估 DDD 构件
- 03按顺序指导重构
- 04区分审查与代码修改
- 05提供审查报告格式
适用场景
- 01检查类中的贫血模型模式
- 02选择实体、值对象或聚合
- 03将服务逻辑重构到领域模型
- 04根据设计问题规划领域建模
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ marcioaltoe/ skills --skill tactical-ddd安装后在 Claude Code 中输入/tactical-ddd确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
detection.mdrefactoring.mdreference.md详细介绍
战术 DDD — 丰富领域建模
工作流
先确定用户的意图:
| 意图 | 要执行的阶段 |
|---|---|
| “验证 / 审查 / 检查 / 这样正确吗?” | 仅执行阶段 1 + 2 → 报告发现的问题,并在重构前征求确认 |
| “修复 / 重构 / 改进 / 清理” | 执行阶段 1 + 2 + 3 |
| “应该如何设计 / 建模?” | 直接加载 reference.md |
阶段 1 — 检测
加载 detection.md,扫描目标代码中的贫血信号。给出严重程度评分,并列出受影响的类。
阶段 2 — 评估
针对每个受影响的类,确定正确的构件:
| 是否具有随时间追踪的唯一标识? | 是否具有约束多个对象的不变条件? | → 构件 |
|---|---|---|
| 是 | — | 实体 |
| 否 | — | 值对象 |
| 是(根)+ 具有共享不变条件的子对象 | 是 | 聚合 |
| 操作跨越多个聚合 / 不属于任何聚合 | — | 领域服务 |
优先使用值对象而非实体。优先使用小型聚合而非大型聚合。
如果用户意图是验证 / 审查:到此为止。使用下方的输出格式报告发现的问题。继续之前询问:“要我应用这些修复吗?”
阶段 3 — 重构
加载 refactoring.md,了解分步调整方法。按以下顺序执行:
- 将连续的 setter 调用替换为单个表达力强的方法
- 将服务逻辑移入拥有该逻辑的聚合
- 在每个方法开头添加业务守卫
- 每次状态成功变更后发布领域事件
- 将原始类型替换为值对象
对于深入的模式问题(边界设计、事件建模、服务与实体的取舍),加载 reference.md。
快速贫血信号(先扫描)
public setX() / public setY() → behaviour should be encapsulated
service.doX(entity, ...) → logic likely belongs in entity
entity.setA(); entity.setB(); ... → setter chain = missing intent method
no domain methods beyond getters → pure data bag
黄金规则
- 行为与数据并存 — 对象同时拥有状态和改变状态的操作
- 统一语言 — 方法名源自领域,而非 CRUD(使用
commitTo,而非setStatus) - 小型聚合 — 默认采用根 + 值对象;只有存在真正的不变条件时才添加子实体
- 一次事务 = 一个聚合 — 跨聚合规则通过领域事件实现最终一致性
- 通过 ID 引用 — 绝不持有对其他聚合的对象引用
- 优先使用值对象 — 只有在个体标识至关重要时才使用实体
- 谨慎使用领域服务 — 服务过多 → 模型贫血
- 保护不变条件 — 聚合是最后一道防线;绝不信任调用方
输出格式
审查代码时,报告:
## Anemia Diagnosis: <ClassName>
Severity: [None | Mild | Moderate | Severe]
Issues:
- <description of problem>
Recommended refactoring:
- <specific move from refactoring.md>
重构时,为每个改动的类展示重构前后的差异。
评论
支持 Markdown