什么是DDD?
ddd不是一种架构风格,而是一种方法论,什么是方法论,每个人按照自己的想法来设计就是一套方法论;ddd是一种业务比较认可,对于微服务拆分的一种方法论。
为什么在微服务的大环境下DDD才流行?
微服务区别于系统,服务是一组想对较小且独立功能单元,是用户感知最小功能集。DDD计的模型中具有边界的最小原子是聚合,聚合和聚合之间由于只通过聚合根进行关联,所以当需要把一个聚合根从一个限界上下文移动到另外一个限界上下文的时候,非常低的移动成本可以很容易地对微服务进行重构。微服务和ddd的理念不谋而合,在微服务的大环境下ddd的流行是趋势。
为什么很多行业在微服务的架构上还是MVC架构?
- 固化思维,从学校到工作,从学习到开源架构都是采取这种MVC架构;
- 很多行业是基于传统行业进行项目改造,只是中间件用了微服务相关,但是业务没有明显的拆分依据,换汤不换药;
- 资源成本,基于ddd的拆分成本比较高,主要体现在事件风暴、领域划分、实体聚合,上下文边界确定;对于企业来说,一个人能搞定的,不需要花大量的人力,时间去做规划;
- 三层架构属于贫血模型,虽然不符合面向对象编程思想,架构结构比较简单,上手容易。
从技术上来讲DDD和MVC有什么区别?
MVC和DDD主要的区别在Service层,主要区别:
- MVC:Service 实现全量业务逻辑,BO(Business Object)保存业务对象,属于贫血模型;
- DDD:Service 实现少量业务逻辑,DO(Domain Object) 包含聚合跟、聚合、实体、值对象,从技术上来看就是实体,里面有相关领域的行为、动作、属性、依赖关系,属性充血模型。
DDD的基础概念
- * 领域: 领域是DDD中最大的概念,主要确定边界范围,领域又分为核心域(核心业务逻辑)、通用域(公共业务逻辑)、支撑域(基础第三方业务逻辑);
- 界限上下文:在界限上下文中要建立通用语言,望文生义,就是大家都看得到,认可的叫法就是通用语言;界限上下文主要是来确定领域边界;
- 聚合根:聚合根式一个根实体,里面包含了许多聚合,而且该聚合根有唯一标识,可以协调里面的每个聚合,外部访问只能根据聚合根的唯一标识进行访问里面的私有内容;
- 聚合:聚合是一个整体,把所有的实体和值对象组织起来,做到一个聚合的作用,确保领域在执行逻辑的时候,确定数据一致性,从设计上避免数据不一致性;
- 实体:整体概念的多个属性归集到的属性集合,有唯一标识id,实体是实实在在的业务对象,具有业务属性、行为和业务逻辑;
- 值对象:若干个属性的集合,只有数据初始化操作和有限的不涉及修改数据的行为,不包含业务逻辑
DDD建模过程
- 采用风暴事件,根据句业务行为,找过过程中发生行为的实体和值对象;
- 在众多实体中选出合适的作为聚合根,挑选依据主要是否有独立的生命周期和全局唯一的ID,是否可以修改或创建其它对象;
- 根据业务单一职责和高内聚原则,找出于聚合根关联的实体和值对象;
- 在聚合内根据聚合根、实体、值对象,画出对象引用模型和依赖关系模型;
- 多个聚合根据业务语义和上下文划分到一个上下文界面,也就是一个小的微服务。
DDD建模示例
本文章参考:欧创新的DDD专栏
本文由博客一文多发平台 OpenWrite 发布!
来源:CSDN
作者:itrickzhang
链接:https://blog.csdn.net/zhangchangbin123/article/details/103486586