DDD战略设计落地

摘自
https://www.jianshu.com/p/96801c93a47d
https://segmentfault.com/a/1190000021159678
https://cloud.tencent.com/developer/article/1485817
https://cloud.tencent.com/developer/article/1121133

核心概念的落地

通过事件风暴划分限界上下文、识别实体

事件风暴

  • 参与的人员: 业务专家(业务人员或产品)、开发人员、测试人员、DDD专家等项目团队成员。
  • 目标:迅速高效分解业务领域,完成建模。
  • 产出:
    统一通用语言
    识别实体
    定义聚合
    划分限界上下文
  • 步骤
  1. 识别领域事件
  2. 识别命令
  3. 寻找聚合
  4. 边界划分
识别领域事件

领域事件特征:

  • 具有业务意义
  • 过去时,e.g: "XX已XX"
  • 时序性
事件

挑选任意一个与用户有关的事件,反向驱动出决策命令,该用户就是发出决策命令的人(角色)。从事件驱动出决策命令非常容易,就是将事件的过去时态转换为动宾形式的决策命令即可。

识别命令

命令:不同角色用户在界面上面的操作
命令产生的事件,用箭头联系起来;将角色通过不同的颜色标示出来


命令

根据决策命令与事件之间的因果关系,推导出要发布该事件必须的前置信息,即决策所需的读模型。读模型通常由用户通过查询操作获得,可以理解为是决策命令行为的输入参数。

寻找聚合

通过对命令和事件的划分找到聚合边界,识别出分布在时间轴上面不同位置的相关命令和事件

聚合

根据事件状态变更的目标,决定决策命令与事件之间的聚合对象。若无法确定,则保留一个空的黄色即时贴,待以后确定。

边界划分

界限上下文举例
比如一个电商平台,可以分为买家、卖家、商品、订单、退货等几个界限上下文。比如一个OA系统,可以分为部门与员工基础资料、费用管理、内部考试、学习中心、员工考勤、钉钉通知(各种业务事件发生时调用钉钉框架发送消息)等。
界限上下文类型:

  • 核心域:系统最核心并有复杂业务逻辑的业务界限上下文,比如电商平台的订单上下文,OA系统的费用管理上下文。
  • 支撑域:系统支撑其他界限上下文的基础,比如电商平台的商品,OA系统的员工基础资料。
  • 通用域:需要使用的基础框架或第三方成熟解决方案,比如OA系统中封装的钉钉框架上下文、学习中心。

一个聚合可能是最小颗粒度的界限上下文,同时,我们常合并业务相关性很高的聚合


界限

选择当前事件的后置事件。若后置事件仍然与用户有关,则重复第一步;若后置事件与外部系统有关,可以跳过该事件的建模,继续选择下一个后置事件。若事件与策略有关,在进一步细化策略对象之后,驱动出决策命令,重复第三步。

战略设计归纳

image.png

你可能感兴趣的:(DDD战略设计落地)