一、领域模型

领域模型是领域内的概念类或现实世界中对象的可视化表示,又称为概念模型或分析对象模型,它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系。

领域模型从业务角色内部的观点定义了业务用例。该模型为产生预期效果确定了业务人员以及他们处理和使用的对象(“业务类和对象”)之间应该具有的静态和动态关系。它注重业务中承担的角色及其当前职责。这些模型类的对象组合在一起可以执行所有的业务用例。

二、贫血模型

贫血模型是指使用的领域对象中只有setter和getter方法(POJO),所有的业务逻辑都不包含在领域对象中而是放在业务逻辑层。

贫血模型下组织领域逻辑通常使用事务脚本模式,让每个过程对应用户可能要做的一个动作,每个动作由一个过程来驱动。也就是说在设计业务逻辑接口的时候,每个方法对应着用户的一个操作,这种模式有以下几个优点: 
 (1)它是一个大多数开发者都能够理解的简单过程模型(适合国内的绝大多数开发者)。 
 (2)它能够与一个使用行数据入口或表数据入口的简单数据访问层很好的协作。 
 (3)事务边界的显而易见,一个事务开始于脚本的开始,终止于脚本的结束,很容易通过代理(或切面)实现声明式事务。 
         然而,事务脚本模式的缺点也是很多的,随着领域逻辑复杂性的增加,系统的复杂性将迅速增加,程序结构将变得极度混乱。

贫血模型实施的最大难度在于如何梳理好Business Logic层内部的划分关系,由于该层会比较庞大,边界不易控制,内部的各个模块之间的依赖关系不易管理,可以考虑这样这样的实现思路:

(1)铺设扁平的原子业务逻辑层,即简单的CRUD操作(含批量数据操作);

(2)特定业务清晰的逻辑通过Facade层来组装原子操作实现。

(3)给业务逻辑层实施模块划分,保持模块之间的松耦合的关系。

三、充血模型

充血模型将大多数业务逻辑和持久化放在领域对象中,业务逻辑只是完成对业务逻辑的封装、事务和权限等的处理。

充血模型的优点是面向对象,Business Logic符合单一职责,不像在贫血模型里面那样包含所有的业务逻辑太过沉重。缺点是如何划分业务逻辑,什么样的逻辑应该放在Domain Object中,什么样的业务逻辑应该放在Business Logic中,这是很含糊的。

注:图片来源于网络,仅供参考。

浅析:领域模型、贫血模型和充血模型相关推荐

  1. DDD领域模型、贫血模型、充血模型概念总结

    DDD领域模型 领域模型是对领域内的概念类或现实世界中对象的可视化表示.又称概念模型.领域对象模型.分析对象模型.它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系. 业务 ...

  2. 领域模型、贫血模型、充血模型概念总结

    领域模型 领域模型是对领域内的概念类或现实世界中对象的可视化表示.又称概念模型.领域对象模型.分析对象模型.它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系. 业务对象模 ...

  3. 【架构设计】领域模型(概念模型) 、逻辑模型、物理模型、贫血模型、充血模型概念总结【待读与标记】

    本文选自: http://www.jianshu.com/p/fe45506ea358 http://blog.csdn.net/zsy_gemini/article/details/9060105 ...

  4. DDD领域驱动设计 — 贫血模型与充血模型

    文章转载来源:https://juejin.cn/post/6917125801460629518 | 前言  要想深入掌握和了解 DDD 领域驱动设计的核心,那无论如何也绕不开两大较为抽象的概念-- ...

  5. DDD 领域驱动设计:贫血模型、充血模型的深入解读!

    作者:JavaEdge在掘金 链接:https://juejin.cn/post/6917125801460629518 -     前言     - 要想深入掌握和了解 DDD 领域驱动设计的核心, ...

  6. DDD 领域驱动设计:贫血模型、充血模型的深入解读

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 -     前言 ...

  7. 贫血模型与充血模型再讨论

    贫血模式和充血模式 Martin Fowler很早以前就写过一篇文章,题目叫"贫血模型".文章里面批判贫血的领域模型是不够优雅.不够OO的,提倡使用充血的领域模型.在Java世界里 ...

  8. DDD(领域驱动设计)系列主题:失血模型,贫血模型,充血模型和胀血模型详细解读和代码案例说明!

    目录 失血模型,贫血模型,充血模型和胀血模型定义及优点和缺点 失血模型 贫血模型 充血模型 胀血模型 失血模型,贫血模型,充血和胀血代码样例 失血模型代码样例 贫血模型代码样例 充血模型代码样例 DD ...

  9. 贫血模型,充血模型(领域驱动设计)

    很多业务系统都是基于 MVC 三层架构来开发的.虽然这种开发模式已经成为标准的 Web 项目的开发模式,但它却违反了面向对象编程风格,是一种彻彻底底的面向过程的编程风格. MVC 三层架构中的 M 表 ...

最新文章

  1. 【CF EDU59 E】 Vasya and Binary String (DP)
  2. 快应用quickapp快速入门教程 by五个半柠檬2
  3. java类验证和装载顺序_java类加载机制,你会了吗?
  4. ffbe攻略站_最终幻想勇气启示录ffbe兵员强化攻略
  5. 浅谈长连接的平滑重启
  6. shell记录报警系统执行的危险命令
  7. (转) RabbitMQ学习之helloword(java)
  8. 剑指Offer之从上往下打印二叉树
  9. 无法拯救的 Wear OS!
  10. 修改ASP.NET MVC Ajax分页组件ASP.NET MvcPager一个小Bug并修该样式为自己所用(三)...
  11. 北京大学计算机语言学,北京大学计算语言学教育部重点实验室
  12. Win必备神器Cmder
  13. 一股清流!唯品会:杜绝不必要的加班!
  14. jquery轮播插件
  15. 编译原理——非确定有限自动机(三)
  16. c# 定时windows服务发送邮件
  17. 情人节表白代码 静态网页表白
  18. 3DMAX森林树木植物插Forest Pack Pro 预设库安装教程
  19. Backup Exec 2010安装指南
  20. 高精度之高精度除法(高精除以高精)

热门文章

  1. tfpt32的下载网址
  2. 数据库管理-第七十九期 儿童节惊魂(20230601)
  3. spring如何使用策略模式
  4. linux缓冲区溢出攻击步骤,如何防范Linux操作系统下缓冲区溢出攻击
  5. Lumia920价格
  6. C语言实现将十六进制数转化为十进制数
  7. Ctrl+Shift+C组合键失效,复制文本格式的组合键失效
  8. vector的构造函数
  9. ​50行Python代码爬取黑丝美眉高清图
  10. JS cookie的设置、获取和删除(非常详细)