DDD领域驱动设计-充血模型、贫血领域模型(下)

简介: DDD领域驱动设计-充血模型、贫血领域模型(下)

优点

简单

  • 对于只有少量业务逻辑的应用来说,使用起来非常自然
  • 开发迅速,易于理解
  • 注意:也不能完全排斥这种方式

缺点

无法良好的应对复杂逻辑

  • 比如收入确认规则发生变化,例如在4月1号之前签订的合同要使用某规则…
  • 和欧洲签订的合同使用另外一个规则…

充血模型

面向对象设计的本质:“一个对象是拥有状态和行为的”,比如一个人:

  • 他眼睛什么样鼻子什么样这就是状态
  • 人可以去打游戏或是写程序,这就是行为
  • 为什么要有一个“人Manager”这样的东西存在去帮人“打游戏”呢?

举个简单的J2EE案例,设计一个与用户(User)相关功能。

传统的设计一般是:


类:User+UserManager

保存用户调用:userManager.save(User user)

充血的设计则可能会是:

类:User

保存用户调用:user.save()

User有一个行为是:保存它自己

其实它们没有什么特别适用的方向,个人更倾向于总是使用充血模型,因为OOP总是比面向过程编程要有更丰富的语义、更合理的组织、更强的可维护性—当然也更难掌握。因此实际工程场景中,是否使用,如何使用还依赖于设计者以及团队充血模型设计的理解和把握,因为现在绝大多数J2EE开发者都受贫血模型影响非常深。另外,实际工程场景中使用充血模型还会碰到很多很多细节问题,其中最大的难关就是“如何设计充血模型”或者说“如何从复杂的业务中分离出恰到好处且包含语义的逻辑放到VO的行为中”。


如果一个对象包含其他对象,那就将职责继续委托下去,由具体的 POJO 执行业务逻辑,将策略模式更加细粒度,而不是写 ifelse。


参考

《领域驱动设计》

https://www.zhihu.com/question/20360521/answer/14891150

https://www.martinfowler.com/bliki/AnemicDomainModel.html


目录
相关文章
|
SQL 设计模式 数据库
领域模型:贫血模型与充血模型的深度解析
领域模型:贫血模型与充血模型的深度解析
|
存储 自然语言处理 前端开发
领域驱动设计(DDD)-基础思想
一、序言     领域驱动设计是一种解决业务复杂性的设计思想,不是一种标准规则的解决方法。在领域驱动设计理念上,各路大侠的观点也是各有不同,能力有限、欢迎留言讨论。 二、领域驱动设计 DDD是什么 wiki释义:     领域驱动设计(英语:Domain-driven design,缩写 DDD)是一种通过将实现连接到持续进化的模型[1]来满足复杂
7554 0
|
5月前
|
存储
领域模型问题之领域模型的作用是什么
领域模型问题之领域模型的作用是什么
|
存储 人机交互
领域驱动设计总结——如何构造领域模型
本文为领域驱动设计系列总结的第三篇,主要对领域驱动设计概念做个介绍,本系列领域驱动设计总结主要是在Eric Evans 所编写的《领域驱动设计》 一书的基础上进行归纳和总结。本文主要介绍在领域驱动设计中如何构造领域模型。
177 0
|
存储 数据可视化 测试技术
你真的正确实现了领域模型吗?
你真的正确实现了领域模型吗?
你真的正确实现了领域模型吗?
|
设计模式 数据建模 程序员
我对领域模型的理解
我对领域模型的理解
我对领域模型的理解
|
人机交互
领域驱动设计总结——如何运用模型
本文为领域驱动设计系列总结的第二篇,主要对领域驱动设计概念做个介绍,本系列领域驱动设计总结主要是在Eric Evans 所编写的《领域驱动设计》 一书的基础上进行归纳和总结。本文主要介绍在领域驱动设计中如何运用模型
130 0
|
领域建模 Scala
函数范式与领域模型
函数范式与领域模型
|
存储 开发框架 Java
深度解读DDD核心模型,贫血模型和充血模型
深度解读DDD核心模型,贫血模型和充血模型
1342 0
深度解读DDD核心模型,贫血模型和充血模型
|
前端开发 Java 数据库连接
DDD领域驱动设计实战(03)-深入理解实体
DDD领域驱动设计实战(03)-深入理解实体
414 0
DDD领域驱动设计实战(03)-深入理解实体