免费DDD书籍:《先了解你的领域》


《先了解你的领域 浅谈事件风暴和领域驱动设计》:这本书讲的是如何用"事件风暴"和"领域驱动设计"来理解业务

作者的故事
作者MJ大叔是个波兰程序员,在瑞士工作13年了。他刚开始学"领域驱动设计"时,前辈让他看一本超难懂的"蓝皮书",结果他花了10年才真正搞明白!这期间踩了无数坑,所以现在写了这本书,就是不想让大家再走他的弯路。
为什么业务这么重要?

书里打了个比方:做软件就像盖房子。如果你连房子要用来住人还是开店都没搞清楚,就开始砌墙,最后肯定盖得乱七八糟!很多程序员只关心技术,结果做出来的东西根本不符合业务需求。

健身房案例
书里用健身房管理系统当例子。老板一开始说:"我们要做个健身房SaaS系统,包含从会员注册到饮食计划的所有功能!"

但MJ大叔说不能一上来就开发所有功能,要先搞清楚核心业务流程:

  1. 制作优惠方案
  2. 推广优惠
  3. 准备合同
  4. 签订合同
  5. 发放会员卡

事件风暴工作坊
这就像玩"贴纸游戏"!找一面大白墙,不同颜色的便利贴代表不同东西:

  • 橙色:已经发生的事(比如"合同已签署")
  • 红色:存疑的问题(比如"合同什么时候算正式生效?")
  • 粉色:外部系统(比如支付平台)
  • 黄色:补充说明
大家把业务流程像拼图一样贴出来,最后就能看到完整的业务流程图。

划分子领域
就像把大象分块吃一样,要把大业务拆成小块:

  1. 优惠管理(制作和发布优惠)
  2. 合同管理(准备和签订合同)
  3. 会员卡管理(发卡和到期处理)
每块都有自己专用的术语和规则。比如"合同"在合同管理里指法律文件,在会员卡管理里可能就变成"准入资格"了。

划清边界
书里用体育比赛做比喻:足球、篮球、排球虽然都有"教练"和"球员",但规则完全不同。如果硬要写成一个系统,代码会乱得像意大利面!

所以要给每个子领域划清边界,就像给不同比赛制定不同规则手册。

画关系地图
最后要把各个模块的关系画出来,就像画国家之间的贸易路线图:

  • 优惠模块要给合同模块提供优惠信息
  • 合同模块要调用外部支付系统
  • 合同生效后要通知会员卡模块发卡

作者的建议
MJ大叔最后说:业务理解只是软件架构的第一步!后面还要考虑:

  • 系统怎么拆分(大单体还是微服务?)
  • 怎么安全上线(蓝绿部署、金丝雀发布)
  • 怎么防止黑客攻击
  • 团队怎么协作开发

这些在他400页的《掌握软件架构》书里都有,评分4.7/5呢!

总之记住:技术是为业务服务的,不要本末倒置!就像MJ大叔常说的:"业务才是最重要的!"