Go with the Domain:用 Go 构建现代商业软件
Go with the Domain:用 Go 构建现代商业软件
简介:
引言
《Go with the Domain: Building Modern Business Software in Go》一书(作者:Robert Laszczak、Miłosz Smółka,2021 年出版,共 298 页)并非又一本关于 Go 语法的教程。它是一本在 Go 生态系统中应用领域驱动设计(DDD)和整洁架构原则的实用指南。在出版之时,该书成为首批将领域驱动设计哲学与惯用 Go 语言系统性地结合起来,同时避免过度抽象和“过度工程”的著作之一。它面向那些已经使用 Go 编写代码,并希望从“仅仅能运行的代码”过渡到可维护、可测试且可扩展的商业应用程序的开发人员。
本书内容
本书围绕一个真实示例——订单管理系统展开。作者循序渐进地引导读者经历所有阶段:从识别限界上下文和建模领域事件,到实现仓储、服务和传输层(HTTP、gRPC、消息队列)。特别关注代码的惯用性:作者展示了如何使用 Go 接口定义端口和适配器,如何避免“贫血模型”,以及如何正确组织包结构以不破坏领域边界。每章都包含实际示例、图表以及“糟糕”与“优秀”代码的对比。
适合读者
- Go 开发者:具有 1 年以上经验,希望深入架构层面。
- 软件架构师:寻找在 Go 中实现 DDD 的具体模式。
- 技术主管和团队领导:负责微服务设计。
- 从其他语言(Java、C#)转向 Go,并希望在没有“重型框架”的情况下应用 DDD 的开发者。
读者将学到什么
- DDD 基础在 Go 中的应用:实体、值对象、聚合、领域事件、仓储、工厂。
- Go 中的整洁架构(六边形架构):如何分离领域、应用和基础设施。
- 领域逻辑的测试:无需模拟,使用表格驱动测试和接口。
- DDD 上下文中的事务处理和并发(工作单元模式)。
- 通过端口-适配器(HTTP、gRPC、Kafka)与外部系统集成。
- 在单体仓库和 Go 模块中的代码组织。
- 领域中的错误处理:创建自定义错误类型、上下文相关错误。
- 事件溯源和 CQRS——基础介绍及实现示例。
优势
- 实用导向:书中的代码可直接适配到自己的项目中。
- 惯用性:作者不强加 Java 风格,而是展示 DDD 在 Go 中“应有的样子”(小接口、组合、显式依赖)。
- 结构清晰:每章末尾都有总结和“要点回顾”列表。
- 强调测试:专门有一章讲解领域和基础设施的测试。
- 与时俱进:本书使用了 Go modules、context.Context、middleware、泛型(尽管在 Go 1.18 发布之前出版,但作者给出了适配建议)。
推荐人群
本书是所有使用 Go 构建复杂商业系统(ERP、CRM、金融科技、物流、电商平台)的开发者的必读之作。无论您是刚开始引入 DDD,还是希望看到纯粹 DDD 与 Go 实用主义之间“黄金平衡点”的经验丰富的实践者,本书都将大有裨益。如果您厌倦了“上帝服务”,并希望编写易于根据新业务需求进行修改的代码,那么这本书就是为您准备的。