说明:整体介绍下项目:
项目设计软件工程思想:
说明:
必读: 重新认识面向对象——Java写了五年,你真的弄明白什么是面向对象了吗?不,你一直都是在面向过程编程_秃了也弱了。的技术博客_51CTO博客
什么是贫血模型:
贫血模型是一种领域模型,该模型下的领域对象包含很少或没有业务逻辑(对象只包含基本的属性即属性对应的getter/setter方法)。
比如Pojo类,只包含对象属性和getter/setter方法。。。
是一种面向过程的编程模式,它与面向对象设计的基本思想相悖,将数据和过程结合在一起。
前面我们学的SpringBoot单体项目就是贫血模型进行开发!
基于“贫血模型”传统开发模式: MVC 三层架构中的 M 表示 Model,V 表示 View,C 表示 Controller。它将整个项目分为三层:展示层、逻辑层、数据层。
通常我们Model层只定义了接口的入口,使用@Controller接收参数;数据层一般连接数据库,写一些sql语句;service层才是真正的核心逻辑层。
就像是上面滥用getter、setter的例子,相信各位小伙伴的项目代码中不占少数。
这是一种典型的面向过程开发的模式,也就是“贫血模型”。
像 UserBo 这样,只包含数据,不包含业务逻辑的类,就叫作贫血模型(Anemic Domain Model)。
什么是充血模型:
对于一个实体对象,会有属性和行为,对于行为中,我们可能会封装一些业务逻辑,那么这种业务逻辑恰恰就是这个类的一个行为;
这也更加符合我们对于面向对象编程思想。
我们前面所学的springcloud微服务其实就是充血模型,每个模块不仅有属性,还封装了各自的行为,互不干扰,尽量解耦。
基于“充血模型”的 DDD 开发模式: 领域驱动设计,即 DDD,主要是用来指导如何解耦业务系统,划分业务模块,定义业务领域模型及其交互。领域驱动设计这个概念并不新颖,早在 2004 年就被提出了,到现在已经有十几年的历史了。不过,它被大众熟知,还是基于另一个概念的兴起,那就是微服务。
在贫血模型中,数据和业务逻辑被分割到不同的类中。充血模型(Rich Domain Model)正好相反,数据和对应的业务逻辑被封装到同一个类中。因此,这种充血模型满足面向对象的封装特性,是典型的面向对象编程风格。
在基于贫血模型的传统开发模式中,Service 层包含 Service 类和 BO 类两部分,BO 是贫血模型,只包含数据,不包含具体的业务逻辑。业务逻辑集中在 Service 类中。在基于充血模型的 DDD 开发模式中,Service 层包含 Service 类和 Domain 类两部分。Domain 就相当于贫血模型中的 BO。不过,Domain 与 BO 的区别在于它是基于充血模型开发的,既包含数据,也包含业务逻辑。而 Service 类变得非常单薄。总结一下的话就是,基于贫血模型的传统的开发模式,重 Service 轻 BO;基于充血模型的 DDD 开发模式,轻 Service 重 Domain。
说明: