一、说明

本来这个总结应该是最后一篇的,但基于以下两个公司的实际情况,打算先进行一下总结,并且开启asp.net core实战课程:

  1. DDD说到底还是一个设计方法体系,目前大部分人在实际工作是使用不到的,所以先在这里总结的时候,把整个过程和相关术语整理出来,让大家有一个基本的概念即可,以后在实际工作中需要时再来补充培训
  2. 现在新项目是使用asp.net core进行开发的,并且目前还有部分同事是从pb转到.net开发的,所以打算先进行asp.net core的实战课程培训。
  3. 由于目前大部分项目还是.net framework的asp.net mvc实现的,所以在实战的时候,同时也会讲在asp.net mvc的实现与.net core中的区别

    二、问题空间

    1、领域/子领域

    前面讲过DDD是用来解决复杂业务问题的,所以首先需要对业务问题有一个清晰的认识,一般业务领域的需求称为问题空间,下面以捷信达的旅游健康管理系统进行分析。
    DDD总结 - 图1

    三、解空间

    1、限界上下文

    为了实现业务流程,需要由各个具有业务价值的场景配合,而具有业务价值的场景则称为限界上下文。
    DDD总结 - 图2

    2、限界上下文映射

    DDD总结 - 图3

    3、聚合根/聚合/值对象

  • 聚合根
    • 也是一种聚合
    • 要维护其聚合下的所有其他聚合和值对象的业务完整性
    • 比如客账主单是聚合的同时,也是聚合根
    • 客账主单需要保障客账明细的完整性
    • 外界只能通过客账主单才能访问到客账明细
  • 聚合
    • 根据id来判断两个对象是否相同,即使值相同,但id不同也会认为是不同的聚合
    • 要跟踪聚合的生命期
    • 比如客账明细,即使两条客账明细的发生时间,消费项目,数量,金额等相同,但这两条客账明细仍然是不同的明细
  • 值对象
    • 根据值来判断两个对象是否相同
    • 比如城市,深圳,无论在哪个聚合下面,只要城市=深圳则认为是同一个深圳

image.png

四、实现

1、限界上下文实现架构

image.png

2、repository仓储

仓储注意事项:

  1. 只有聚合根才有对应的仓储对象
  2. 每个聚合根都有对应的单独的仓储对象
  3. 仓储接口放在领域层
  4. 仓储实现放在基础设施层,由项目启动时设置到注入框架中

    3、REST services

    用来映射各业务端调用的接口协议,解耦应用层和协议层

    4、Application

    应用接口层,可以理解为领域层业务逻辑的外观层,其本身只是组装参数和调用领域层逻辑,并且将结果转换为结果对象进行输出,以避免直接将领域层对象输出

    5、领域层

    由聚合根,聚合,值对象,仓储接口等组成,负责实现核心业务