是读书还是思考DDD知识汇金融基础技术与业务

致想给遗留系统写自动化单元测试的开发团队——事件风暴之父的工作坊

2017-12-23  本文已影响459人  程序员吾真本

一家大型企业的关键业务代码已经年久失修成为了难以维护的遗留代码,有着硅谷高科技企业软件开发管理经验的高管决定在企业内部搞编写单元测试和重构的极限编程实践。这需要为企业遗留系统的代码编写自动化单元测试。那么编写自动化单元测试该从哪里入手呢?

上文所提到的“领域驱动设计中国峰会2017”大会Event Storming 之父 Alberto Brandolini授课一天的“事件风暴工作坊”下午的“软件开发设计”(Software Design)环节,可以让开发团队了解系统应该具备的领域模型及其交互关系,为编写单元测试进而驱动重构提供指导。

“领域驱动设计中国峰会2017”大会“事件风暴工作坊”下午的“软件开发设计”环节

以下是实施步骤:

  1. 完成了“探索业务全景”环节。

  2. 确定要建模的需求
    在上午探索培训机构的业务的基础上,下午的任务是要为“替换Eventbrite在线应用“这个需求进行领域建模。假设你是Eventbrite的开发团队且想了解如果入手编写单元测试,那么可以把Eventbrite视作遗留系统,用以下步骤来为其建模。

  3. 了解领域模型之间的业务逻辑链
    从需求的起源来看,用户的需求来自于真实世界和 Read Model,并根据它们来进行 Decision Command(决策命令)。比如培训课程的听众根据“课程、价格、日期、讲师、城市、是否有空”这些 Read Model 来决定是否去报名参加培训。
    用户做了 Decision Command后,就会通过 Aggregate (像个状态机)或 External System (外部系统)来产生一个 Event(领域事件)。
    这些事件又可能会通过一个 Policy (业务规则)来触发下一个 Decision Command。


    用户做了 Decision Command后,就会通过 Aggregate 或 External System 来产生一个 Event,而这又可能会通过一个 Policy 来触发下一个 Decision Command
    我照着上图又画了一个版本
三种事件风暴领域模型
  1. 用7种报事贴来贴领域模型并梳理业务逻辑链
    • Read model: 浅绿
    • User: 黄色小报事贴
    • Decision Command: 浅蓝
    • Aggregate: 黄色大报事贴
    • Event: 橙色
    • External System: 浅粉
    • Policy: 紫色
      按照从左到右的时间顺序来贴:


      用7种报事贴来贴领域模型并梳理业务逻辑链

下面其中一组同学贴出的培训课程报名订票的业务逻辑链(报名者根据培训日期订票,通过一个未起名的 Aggregate 生成了 Ticket Booked 事件,这个事件又经由 Purchase Policy 触发了 Reserve Payment 的命令):


培训课程报名订票

事件风暴之父的忠告

我的一些理解及 Brandolini 的回复

总结
对于要为企业遗留系统的代码编写自动化单元测试的开发团队,可以在进行了“探索业务全景”环节之后,使用“软件开发技术”环节中的识别7种事件风暴领域模型的技术,来优先梳理那些“千夫所指”的有业务瓶颈的业务的逻辑链,然后可以开始对其中的 Decision Command、Aggregate 和 Policy 编写自动化单元测试。用这些单元测试来驱动遗留系统代码的重构,让遗留系统的代码变得易于维护。

上一篇 下一篇

猜你喜欢

热点阅读