mcpField
G
golang-ddd-architecture

golang-ddd-architecture

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

关于 golang-ddd-architecture

用于按领域驱动设计组织 Go 服务的工作流技能,帮助开发者在业务逻辑增长时规划分层、依赖方向、模型边界、装配与测试。

主要功能

  1. 01梳理入口与用例
  2. 02划分 ports、app、domain 和 adapters
  3. 03设定向内的依赖规则
  4. 04在使用方定义窄接口
  5. 05按边界拆分模型
  6. 06规划可测试装配与后续重构

适用场景

  1. 01重构业务逻辑不断增长的处理器
  2. 02打破导入循环与纠缠的依赖
  3. 03分离 API、数据库和领域模型
  4. 04规划领域、应用与适配器测试

安装

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

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

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

包含的文件

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

agents/
openai.yaml
references/
architecture-rules.md
naming-and-models.md

详细介绍

Golang DDD 架构

使用此技能来构建 Go 服务,使其随着业务逻辑增长,仍然易于修改、测试和理解。

从这里开始

  • 判断服务是否足够复杂,值得采用此模式。
  • 对于简单的 CRUD 或身份验证流程,如果读写数据结构大体相同且业务规则较少,就采用更精简的设计。
  • 如果处理器中的 if 分支不断增多、模型在不同边界间复用,或依赖难以模拟或理清,就使用完整工作流。

工作流

  1. 梳理入口点和用例。
  • 从 HTTP 处理器、gRPC 服务、CLI 命令、消息消费者和定时任务入手。
  • 在调整代码之前,先用业务语言重新描述支持的操作。
  1. 绘制边界图。
  • ports 仅负责入站传输和序列化。
  • app 编排用例。
  • domain 负责业务规则和不变量。
  • adapters 与数据库、队列、外部 API、文件及其他基础设施交互。
  1. 强制依赖方向。
  • domain 不依赖自身以外的任何内容。
  • app 可以导入 domain,但不能导入具体的传输层或适配器包。
  • ports 和 adapters 可以导入内层。
  • 通过将接口移入内层或拆分职责来解决导入循环,而不是把所有内容都压平到一个包中。
  1. 将接口放在使用方旁边。
  • 在需要该行为的包中定义接口。
  • 接口应保持精简,并面向用例。
  • 从组合根注入实现。
  1. 分离因不同原因而变化的模型。
  • 除非数据库行、API 响应、Pub/Sub 负载和领域状态的变化节奏确实相同,否则不要用同一个结构体表示它们。
  • 如果数据重复能减少耦合,就接受这种重复。DRY 通常更适用于行为,而非数据。
  1. 让 main 保持简单。
  • 将 main 用作组合根。
  • 在其中装配存储库、客户端、处理器和配置。
  • 不要在其中隐藏业务逻辑、验证或工作流分支。
  1. 让代码库比接手时更易于测试。
  • 领域规则应可在不使用 mock 的情况下进行单元测试。
  • 应用编排应可通过简单的手写 mock 进行测试。
  • 适配器行为应通过集成测试覆盖。

使用这些参考资料

交付内容

  • 清晰的分层图或包规划;
  • 无需通过导入循环变通方案即可编译的依赖方向;
  • 组合根中的构造函数或装配点;
  • 明确的模型边界;
  • 如果系统过于纠缠,无法一次性完成改造,则提供一份简短的后续重构待办清单。

评论

支持 Markdown