DDD初步了解

DDD:Domain Driven Design,领域驱动设计,随着微服务的流行,业务的快速发展(变化+复杂),团队的迅速膨胀,DDD也被越来越多的公司使用。

拆分领域模型,使用充血模式(与贫血模式相反,我们MVC模式中的model/DO/DTO,只包含属性和get、set方法,就是贫血模式);

各领域独立发展,领域间的交互,使用领域服务来实现;

封装变化;

实现功能时,要通过防腐层来封装变化,这样业务功能不变化,该功能就不会变化(变化的是防腐层里的实现);

以下记录了马士兵DDD公开课中,通过一个选课系统,比较领域驱动设计与MVC实现的不同:

  • 业务逻辑清晰度,业务人员也可以阅读;
  • 业务稳定性,业务不变,代码也不动;
  • 防腐层隔离变化;
  • 贫血模型vs充血模型:Student贫血模型,会被各种Service调用,选课、借书、体育......,会分布在不同的业务中,你还敢随便改Student信息吗?除非你读懂每一个Service的调用过程!改成充血模型,加入upgrade()、run()等和自身状态相关的业务逻辑,每个实体操作自己实体的变化,跨实体的变化,通过领域服务搞定,领域服务调用实体方法完成状态改变。
  • 各领域内自治,可以自我发展;
  • 用仓库StudentReponsitory来管理Student的存储;
  • 仓库中集成工厂Factory/Builder应对复杂对象的组装;
  • MVC保证了实现最差也差不到哪里去(但基本总是最差),DDD如果做得差,会比MVC还要差,如果做的好,的确可以应对业务的变化(了解业务,预测业务的变化-这个比较难,所以DDD做好也很难)。

 

posted on 2022-10-23 21:03  阿泰555  阅读(49)  评论(0编辑  收藏  举报

导航