例子1、银行帐号Account:
一个经常引起争论的问题就是,deposit/draw方法到底应该建模到 Account中还是建模到AccountManager(对一个银行出纳员的建模)中。
我觉的将deposit/draw建模到AccountManger中是反映现实的,因为Account反映到现实世界就是一个没有行为能力的实体,而出纳员才具有行为能力。
例子2:选课的学生Student
对学生建模的时候,enroll(选课行为)毫无疑问应该建模到类Student中。
除此之外,我们假设每个学生有一个考察级点,可以根据这个学生的表现增加或者减少级点,而我们就遇到同例1中提到的deposit/draw一样的问题,就是增加级点的方法addScore/减少级点的方法reduceScore建模到Student中还是StudentManager中,个人认为,同于例1,应该建模到StudentManager中而不是Student中。

总的来说,方法到底建模到那个Class中,就根据这个方法是否是这个Class自发的行为。譬如,Account的deposit/draw就不应该建模到Account中,但是实践中,建模到Account中,往往会带来一些好处,至于什么好处,Martin的《Domain Logic and SQL》非常全面的分析过了。所以,我感觉,Martin举的例子中,贫血的Domain Model是乱扣大帽子。

本来就没什么Transaction Script,没什么贫血的Domain Model,Martin非要将一种正确的模型叫做“贫血的Domain Model",而将没有反映现实世界的、但是有一定实践价值的模型起一个风度翩翩的名字。

为什么有人经常提到贫血的Domain Model?我觉的,可能很多应用是以数据为中心的,所以,建模的时候,习惯性地思维定向到数据上,建模出来的类完全是DB Entity的反映。而正确的思路,应该针对整个系统进行对象建模,不要一开始就考虑持久化的问题。

转载于:https://www.cnblogs.com/wildfish/archive/2005/03/22/123788.html

贫血的Domain Model之说相关推荐

  1. 如何深入理解PhalApi框架三层结构Api+Domain+Model模式

    1. Api+Domain+Model 其实这样的三层结构和java中的web+service+dao比较像,和我们平常所说的MVC开发模式也是非常想象.只是说web和api一个进行页面显示一个不进行 ...

  2. 拨乱反正:DDD 回归具体的业务场景,Domain Model 再再重新设计

    首先,把最真挚的情感送与梅西,加油! 写在前面 阅读目录: 重申业务场景 Domain Model 设计 后记 上一篇<设计窘境:来自 Repository 的一丝线索,Domain Model ...

  3. 若依报错com.alibaba.fastjson2.JSONArray cannot be cast to com.ruoyi.common.core.domain.model.LoginUser

    解决方案:谷歌版本过低,更新版本即可 后端报错信息 ​ 09:45:19.617 [http-nio-8080-exec-47] ERROR c.r.f.w.e.GlobalExceptionHand ...

  4. 基于Castle ActiveRecord开发Domain Model详解(一)对象关系到数据表的映射

    Castle Project非常庞大,ActiveRecord是其中一个非常适合用于Domain Model开发的O/R Mapping框架.它使用.NET的反射特性无需配置文件,集成NHiberna ...

  5. [系分] Domain Model

    一组没有定义操作(方法的特征标记)的类图,也称为概念类图 步骤:(1)寻找概念类 概念类:思想,事物或对象(也就是说找名词) 描述类:描述其他事物的信息,如Flight和Airport之间最好添加一个 ...

  6. 领域模型(domain model)贫血模型(anaemic domain model)充血模型(rich domain model)

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

  7. 【DDD设计】 Domain model VS DAL Entity VS Presentation DTO

    Tier 各层中的实体 实用派还是学术派,在代码设计中经常各层实体关系有字段重叠和业务重叠,这并不冲突,我们需要根据自己项目的特色来决定,好的设计模式需要和具体的业务模式结合才能发挥1+1 >= ...

  8. Domain Model

    VO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来. DTO(Data Transfer Object):数据传输对象,这个概念来源于J2EE的 ...

  9. Domain Model:业务对象的进一步设计

    Author :  Anders小明 同步自: http://www.blogjava.net/AndersLin/archive/2006/10/09/74187.html 在Domain Obje ...

最新文章

  1. rsa php前面,PHP使用非对称加密算法(RSA)
  2. vue-cli3打包注意路径的问题
  3. 有线节点与无线节点的混合仿真模拟实验
  4. linux C bool变量
  5. 一个42KB的文件,解压完其实是个4.5PB的“炸弹”
  6. 【程序设计】流程图的规范和绘制
  7. HBase集群环境部署
  8. SAP License:这种ERP系统核查工作实际是在做无用功
  9. 在centos上完全删除mysql
  10. spring security原理图及其解释
  11. JQuery的一些简单使用
  12. 关于身份证OCR识别,你知道多少?
  13. 刚刚,2020年中国信息通信技术服务大会盛大召开!
  14. java 文字串叠字检查_类似“又双叒叕”的字你认识多少?来看最全的叠字收录...
  15. 论文Re-ranking Person Re-identification with k-reciprocal Encoding(person re-id的re-ranking)
  16. mysql 5.6 msvcr100_mysql 5.6.46 安装到winserver2012(x64) 遇到 MSVCR100.dll is missing
  17. java修图sdk_手把手教你,如何用手机修图软件做出逼格超高的照片!
  18. HCNP——DR和BDR的概念
  19. php 如何查看vc版本信息,PHP版本中的VC6,VC9,VC11,TS,NTS区别
  20. Vue.use 写多个_做好4件事,周记不难写

热门文章

  1. python读取文本文件的三种方法
  2. chdir函数_PHP chdir()函数与示例
  3. kotlin 覆盖属性_Kotlin程序| 方法覆盖的示例
  4. strictmath_Java StrictMath sqrt()方法与示例
  5. python string转int_我用Python搞资源 [ 02 ]
  6. 2013_chengdu_online
  7. 213. 打家劫舍 II golang 动态规划
  8. Redis运维和开发学习笔记(4) Redis参数意义
  9. 网络之DNS协议图解
  10. Linux中netstat工具详解