本文主要是介绍【DDD】贫血模型和充血模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
基于业务开发的项目大多是MVC架构的。成为Web项目的标准开发模式,但它却是违反面向对象编程风格的,是面向过程的。之后基于领域驱动设计开发模式被人提倡。
DDD(Domain-driven design)领域驱动设计是一种通过将实现连接到持续进化的模型来满足复杂需求的软件开发方法。领域模型是对业务模型的抽象,DDD是把业务模型翻译成系统架构设计的一种方式。
贫血模型和充血模型
贫血模式与充血模式初探 - 简书
将数据与操作分离,只包含数据,不包含业务逻辑的类,就叫作贫血模型(Anemic Domain Model)。它破坏了面向对象的封装特性,是一种典型的面向过程的编程风格。
在贫血模型中,数据和业务逻辑被分割到不同的类中。充血模型(Rich Domain Model)正好相反,数据和对应的业务逻辑被封装到同一个类中。因此,这种充血模型满足面向对象的封装特性,是典型的面向对象编程风格。
区别 | 充血模型(DDD开发方式下) | 贫血模型(传统OOP开发方式下) |
编码方式 | 以领域对象为主的行为状态转换 | 事务脚本(CRUD、判断、循环、检查等逻辑只是简单的方法级别拆分) |
Service | 跨领域逻辑的组合 | 事务脚本的对外包装 |
Domain | 一个领域的entity集合包 | VO/DTO |
Entity | 包含了一个领域里的状态、以及对状态的直接操作单元,具有自闭环的对象。 | VO/DTO |
ValueObject | 简单的基本值对象,如电话号码、地址等,组成entity的基本单元 | 语言基本类型 |
Aggregation | (有点类似数学中集合的定义)将实体和值对象划分为聚合并围绕着聚合定义边界。 | 多个VO/DTO |
Aggregation Root | 唯一可以给外界作为某个Aggregation引用的entity。 | 单个VO/DTO |
这篇关于【DDD】贫血模型和充血模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!