一  mvc架构

先看看MVC三层架构和鲁棒图3元素对应关系。

应用逻辑:如数据有效性验证、授权检查、开始结束事务等。业务逻辑:领域模型

  • 服务层需要包含应用逻辑、用户会话的管理,但不能包含领域逻辑、业务逻辑和数据访问逻辑;
  • 领域层(领域对象)应该包含业务逻辑,可以处理与业务相关的会话状态.但作为商业应用的核心,应该具有良好的可移植性,不能对特定框架(如Struts、Hibernate、EJB等)产生依赖

二  领域模型

领域模型分为4大类:失血模型、贫血模型、充血模型、胀血模型。想要理解这几个分类,先要知道“血”指的是domain object的model层内容。

1、失血模型

action

service  肿胀的服务逻辑

model:只包含get set方法

dao :数据持久化

业务逻辑和应用逻辑都放到服务层中。这种类在java中叫POJO,在.NET中叫POCO

2、贫血模型

action

service :组合服务 也叫事务服务

model:除包含get set方法,还包含 单服务 又叫原子服务

dao:数据持久化

贫血模型中包含了一些业务逻辑,但不包含依赖持久层的业务逻辑。这部分依赖于持久层的业务逻辑将会放到服务层中。可以看出,贫血模型中的领域对象是不依赖于持久层的

3、充血模型

action

service :组合服务 也叫事务服务

model:get set方法, 单服务 又叫原子服务,含数据持久化的逻辑

充血模型中包含了所有的业务逻辑,包括依赖于持久层的业务逻辑。所以,使用充血模型的领域层是依赖于持久层,简单表示就是UI层->服务层->领域层<->持久层

4、胀血模型

action

model:get set方法, 单服务又叫原子服务 ,数据持久化的逻辑 还包含组合服务,又叫事务服务

胀血模型就是把和业务逻辑不想关的其他应用逻辑(如授权、事务等)都放到领域模型中。我感觉胀血模型反而是另外一种的失血模型,因为服务层消失了,领域层干了服务层的事,到头来还是什么都没变。

一般来说失血模型和胀血模型不常见,贫血模型和充血模型的差别在于,领域模型是否要依赖持久层,贫血模型是不依赖的,而充血模型是依赖的。至于是采用贫血模型还是充血模型,双方争论的焦点是领域模型是否要依赖持久层,因为依赖持久层就意味着单元测试的展开要更加困难(无法脱离框架进行测试,原文的讨论中这里专指Hibernate),领域层就更难独立,将来也更难从应用程序中剥离出来,当然好处是业务逻辑不必混放在不同的层中,使得单一职责性体现的更好。而支持者(充血模型)认为,只要将持久层抽象出来,即可减少测试的困难性,同时适用充血模型毕竟带来了不少开发上的便利性,除了依赖持久层这一点,拥有更多好处的充血模型仍然值得选择。最后,谁也没能说服谁,关于贫血模型和充血模型的选择,更多的要靠具体的业务场景来决定,并不能说哪一种更比哪一种好。设计模式这种东西不是向来都没有什么定论么。

我个人则倾向使用充血模型,因为充血模型更加像一个设计完善的系统架构,好在计算机世界里有很多的IOC和DI框架,唯一的缺陷依赖持久层可以通过各种变通的方法绕过,随着技术的进步,一些缺陷也会被慢慢解决。我的思路是这样的:先将持久层抽象为接口,然后通过服务层将持久层注入到领域模型中,这样领域模型仅仅会依赖于持久层的接口。而这个接口,可以利用现有框架的技术进行抽象。

领域模型(失血,贫血,充血,胀血)相关推荐

  1. 领域模型的概念:失血 贫血 充血 胀血

    转自:http://blog.csdn.net/seakingwy/article/details/4556755,仅供学习 领域模型概念的最合拍的解释: 由此我们终于看出来概念是怎样被偷换的了,一个 ...

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

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

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

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

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

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

  5. java充血模型orm框架,关于领域驱动设计和贫血、失血、充血模型

    大部分应用Spring框架的Java Web应用都相当关注单一职责原则和关注分离原则,但是在此之上却诞生了一些不太好的反模式和设计原则,比如: 领域模型对象只是用来存储应用的数据.(领域模型使用了贫血 ...

  6. 浅析:领域模型、贫血模型和充血模型

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

  7. AI检测贫血不看血,竟是看眼睛

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 丰色 发自 凹非寺 量子位 报道 | 公众号 QbitAI 不用扎针 ...

  8. 复合充血模式和领域服务调度-阿里互联网法院项目

    在阿里也待啦一段时间,阿里成立啦新的子公司-共道网络科技,公司寄语:公道人,让天下没有难打的官司: 最近在做互联网法院项目:作为一个技术人员我觉得对于公司的技术有必要阐述一下 ,不断的学习和提高自己: ...

  9. 微服务架构设计基础之领域驱动设计

    背景 微服务现在可以说是软件研发领域无人不提的话题,然而业界流行的对比多数都是所谓的Monolithic(单体应用),而大量的系统在十几年前都已经是以SOA(面向服务架构)为基础的分布式系统了,那么微 ...

最新文章

  1. confluence未授权模板注入/代码执行 cve-2019-3396
  2. 用一个二维码做下载地址,自动区分是 ios 还是 android
  3. 数据中心胶体电池的使用寿命
  4. CSS深入理解学习笔记之z-index
  5. 【转】strcpy溢出的攻击示例
  6. 使用Spring Boot进行面向方面的编程
  7. C++和C语言函数相互调用
  8. 学习vue.js的自我梳理笔记
  9. 遇到这个工具前我都是建议文章写好就先投Cell?
  10. 有关send()和recv()函数的理解
  11. 计算机对身体有哪些危害,经常玩电脑的危害 经常玩电脑对身体有哪些伤害
  12. sdut3138: N!(计算n!中结尾零的个数)
  13. DjVu、PDF中的隐藏文本
  14. Swift 在UILabel前面或者后面插入图标
  15. python加载模型包_R中的错误:需要h5py Python包来保存和加载模型
  16. 高数笔记(十九):对面积的曲面积分,对坐标的曲面积分,高斯公式,斯托克斯公式
  17. 男人40岁后的健康生活方式
  18. 期待已久的Apple Tablet PC - iPad 发布了
  19. VR眼镜连接android设备,如何将VR眼镜的屏幕投影到计算机或电视上?
  20. 【编译原理】判断文法是几型文法

热门文章

  1. LEGO® Education BricQ 乐高教育发布BricQ趣动系列套装
  2. 2022年全球与中国医疗保健用肌肽行业市场深度调研及投资预测报告
  3. 2020年最流行10大网络安全工具!
  4. MATLAB实时脚本
  5. 电视军刀测试软件,擦亮你的“军刀”—— Xabre600驱动评测
  6. 统计基础:3.2_假设检验的两类错误
  7. Cross Apply的用法
  8. VS2008 安装失败,.net framework卸载不了的问题
  9. ShellExecuteEx函数的作用
  10. Python threading中event的使用