mcpField
G
golang-ddd-refactor

golang-ddd-refactor

github.com/joeyave开发444 次安装29 周前更新
代码仓库

关于 golang-ddd-refactor

面向 Go 项目的 DDD 重构技能,适用于业务规则分散在传输层和持久化代码中的情况。它通过分步迁移、领域测试和精简仓储边界来整理代码。

主要功能

  1. 01将业务规则提取为领域行为
  2. 02通过构造函数约束有效状态
  3. 03分离领域与数据库关注点
  4. 04精简仓储接口
  5. 05添加黑盒领域测试

适用场景

  1. 01重构业务规则分散的 Go 处理器
  2. 02从领域包中移除持久化类型
  3. 03用领域不变量替代重复校验

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/joeyave/golang-ddd-skills --skill golang-ddd-refactor

安装后在 Claude Code 中输入/golang-ddd-refactor确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
references/
domain-rules.md
refactor-playbook.md

详细介绍

Golang DDD 重构

当代码已经可以正常运行,但由于业务规则分散在传输层和持久化代码中,变得难以信任、测试或扩展时,请使用此技能。

重构循环

  1. 从系统边界入手,找到用例。
  • 从 HTTP 处理程序、gRPC 方法、命令、仓库回调或事务代码块开始。
  • 在引入任何新类型之前,先用通俗语言写下业务操作。
  1. 提取隐藏在条件语句中的规则。
  • 留意那些决定某件事是否可以发生的“一长串 if”。
  • 将这些规则转化为领域类型上的不变条件和行为方法。
  1. 创建或完善领域类型。
  • 优先使用会拒绝无效状态的构造函数。
  • 如果外部修改会绕过不变条件,则优先使用私有字段。
  • 用业务语言命名的行为方法替代 setter。
  1. 让领域与数据库无关。
  • 从领域包中移除 Firestore、SQL、protobuf 或 HTTP 相关内容。
  • 如果存储形态与领域形态不同,则引入独立的持久化模型。
  1. 重建仓库边界。
  • 将仓库接口放在使用它的代码旁边。
  • 优先使用加载或更新等通用仓库能力,而不是为每项业务操作都设计对应的仓库方法。
  • 如果写入需要以事务方式执行读取、修改和保存,则使用基于闭包的更新方法。
  1. 为领域添加黑盒测试。
  • 测试导出的行为,而非私有字段。
  • 使用能创建有意义领域对象的辅助函数,例如“可用时段”或“已取消的训练”。
  • 不要在领域测试中使用模拟对象。
  1. 精简旧代码路径。
  • 让处理程序、服务和仓库委托给新的领域行为。
  • 在领域能够可靠地执行验证后,删除重复的验证逻辑。

守则

  • 除非实体和值对象能阐明真实的业务行为,否则不要凭空创建它们。
  • 除非纯传输验证属于业务规则,否则不要将其移入领域。
  • 不要将数据库事务类型或客户端泄漏到领域中。
  • 不要仅仅因为旧代码使用了公开的可写字段,就继续保留它们。

使用以下参考资料

交付内容

  • 面向行为的领域方法,
  • 能够确保有效性的构造函数或工厂,
  • 范围更精简的仓库契约,
  • 从处理程序或适配器中移除重复的业务检查,
  • 以业务术语描述行为的针对性领域测试。

评论

支持 Markdown