关于 golang-ddd-refactor
面向 Go 项目的 DDD 重构技能,适用于业务规则分散在传输层和持久化代码中的情况。它通过分步迁移、领域测试和精简仓储边界来整理代码。
主要功能
- 01将业务规则提取为领域行为
- 02通过构造函数约束有效状态
- 03分离领域与数据库关注点
- 04精简仓储接口
- 05添加黑盒领域测试
适用场景
- 01重构业务规则分散的 Go 处理器
- 02从领域包中移除持久化类型
- 03用领域不变量替代重复校验
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ joeyave/ golang-ddd-skills --skill golang-ddd-refactor安装后在 Claude Code 中输入/golang-ddd-refactor确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlreferences/domain-rules.mdrefactor-playbook.md详细介绍
Golang DDD 重构
当代码已经可以正常运行,但由于业务规则分散在传输层和持久化代码中,变得难以信任、测试或扩展时,请使用此技能。
重构循环
- 从系统边界入手,找到用例。
- 从 HTTP 处理程序、gRPC 方法、命令、仓库回调或事务代码块开始。
- 在引入任何新类型之前,先用通俗语言写下业务操作。
- 提取隐藏在条件语句中的规则。
- 留意那些决定某件事是否可以发生的“一长串
if”。 - 将这些规则转化为领域类型上的不变条件和行为方法。
- 创建或完善领域类型。
- 优先使用会拒绝无效状态的构造函数。
- 如果外部修改会绕过不变条件,则优先使用私有字段。
- 用业务语言命名的行为方法替代 setter。
- 让领域与数据库无关。
- 从领域包中移除 Firestore、SQL、protobuf 或 HTTP 相关内容。
- 如果存储形态与领域形态不同,则引入独立的持久化模型。
- 重建仓库边界。
- 将仓库接口放在使用它的代码旁边。
- 优先使用加载或更新等通用仓库能力,而不是为每项业务操作都设计对应的仓库方法。
- 如果写入需要以事务方式执行读取、修改和保存,则使用基于闭包的更新方法。
- 为领域添加黑盒测试。
- 测试导出的行为,而非私有字段。
- 使用能创建有意义领域对象的辅助函数,例如“可用时段”或“已取消的训练”。
- 不要在领域测试中使用模拟对象。
- 精简旧代码路径。
- 让处理程序、服务和仓库委托给新的领域行为。
- 在领域能够可靠地执行验证后,删除重复的验证逻辑。
守则
- 除非实体和值对象能阐明真实的业务行为,否则不要凭空创建它们。
- 除非纯传输验证属于业务规则,否则不要将其移入领域。
- 不要将数据库事务类型或客户端泄漏到领域中。
- 不要仅仅因为旧代码使用了公开的可写字段,就继续保留它们。
使用以下参考资料
- 阅读 references/domain-rules.md,了解为此技能包调整的核心规则。
- 阅读 references/refactor-playbook.md,了解分步迁移路径和反模式检查清单。
交付内容
- 面向行为的领域方法,
- 能够确保有效性的构造函数或工厂,
- 范围更精简的仓库契约,
- 从处理程序或适配器中移除重复的业务检查,
- 以业务术语描述行为的针对性领域测试。
评论
支持 Markdown