领域建模试图用纯oo的理念来处理企业应用中的数据存取,并细分出失血、贫血、充血与胀血4种模型,失血与贫血被鄙视,充血被推崇。

我向来不喜欢盲目的跟风与崇拜,软件从业多年,亲眼见过多少时髦的词汇和概念从被炒作,被追捧,到被冷落,被替代的过程。所以对被追捧的,被崇拜的,总会冷冷的问一下:真的吗?是这样的吗?

面向对象的提出是为了改善软件开发模式,是为了解决问题的,而不是用来增加新难题。面向对象是手段,不是目的。不要为了面向对象而面向对象。

就说这个领域建模,真的是从实际项目中总结出来,解决旧难题,不添新麻烦的吗?套用一个词汇,是“最佳实践”吗?

尽管各种ORM技术层出不穷,但是到真正的物理存储总得落实到一行行的脚本。这个让我产生了一个问题,现实的世界真的是适合用领域建模倡导者所描述的那样来建模的吗?

领域建模里,实体对应于表中的记录,但是它可以负责自身的持久化。可是我们看看现实的情况,真的用oo的观点来看,这是对的吗?

实际情况是,如果以oo的视角,几乎大部分的实体是不可负责自身的持久化的。结合现实的情况,真的要建模的话,可以抽象出真正有权处置这些实体持久化的类。这些类绝对不是简单对应于数据库中的一张表,而是以下可能的几种:

1. 某个动作或命令,即action/command
2. 规则
3. 由若干实体和规则组成的复合的类型

(以上并不全面,仅是我写的时候想到的几种)

领域建模认为简单的把实体的持续化封装起来,便可以抛开DAO层,便可使实体变得更“面向对象”。我觉得是对真正的“面向对象”的误读。面向对象=/=实体,Action、Command、Rules都可抽象为对象,真正的现实的世界中,是这些对象在支配实体的存续变更。而实体只是被支配。

若你认同我上面述说的观点,那么,我们真正需要建模的是Action、Command、Rules,以及将它们与实体结合起来组成的复合模型,这才是对客观世界的真实映射。DAO不该被抛弃,而是作为一个负责实际物理存取的工具层。

如果你的项目正在使用所谓的“失血模型”,而且实际用下来感觉很好,那又何必因为被鄙视而被迫转向“充血模型”呢?

如果一种开发模式普通人用不好,只有少数的“深刻领悟OO精髓”的“大师”才能用的好的话,那么这样的开发模式又有什么实际意义呢?我觉得这些“大师”应该称之为“大仙”......

转载于:https://www.cnblogs.com/yyfy/archive/2010/08/09/1795385.html

领域模型?充血模型?是头脑充血后的模型吧相关推荐

  1. R语言Box-Cox变换实战(Box-Cox Transformation):将非正态分布数据转换为正态分布数据、计算最佳λ、变换后构建模型

    R语言Box-Cox变换实战(Box-Cox Transformation):将非正态分布数据转换为正态分布数据.计算最佳λ.变换后构建模型 目录

  2. visio保存后公式变形_涨姿势了!仿真变形后的模型还能保存下来

    "3D数据协同挖掘" 基础的静力学仿真,我们的目标一般会放在研究零部件的刚度和强度方面,因为我们是为了验证我们设计的零部件是否满足设计要求.我们有一个客户却提出了特殊的需求,他们做 ...

  3. maya绑定后的模型修改编辑技巧

    灯光渲染是三维制作流程的最后环节,也是所有问题的汇总,由于大家任务量都很大,所以,能够我们改的就不反给前面流程了.当然虽然这样并不是好事,毕竟哪个环节的问题应该让他们知道,防微杜渐. 动画的穿帮问题是 ...

  4. BIM模型到3Dtiles转换后精确定位工作流及存在的问题

    BIM模型制作一般都是根据CAD数据来的,所以,是没有坐标的,只有毫米为单位的图纸,建好BIM模型以后,需要将此模型放到实际地图上,这个坐标要求是经纬度的(cesium中加载经纬度坐标点),这就涉及到 ...

  5. 【机器学习】树模型预剪枝和后剪枝

    在树模型建模的过程中的树模型的超参数会影响模型的精度,那么如何调整超参数呢?可以提前限制模型的超参数,也可以在训练模型之后再调整.本文将介绍树模型的预剪枝和后剪枝的实践过程. 原始模型 使用基础数据集 ...

  6. 贷后评分模型的三种细分应用

    A.B.C.F卡想必各位读者朋友们都或多或少有所了解,相对于A.B.F卡,C卡可能因为它处于风险管理的末尾-贷后流程中,使其在一些小规模的金融机构中不被开发和应用. C卡其实是催收评分卡模型的简称(亦 ...

  7. hypermesh导出cdb模型导入workbench ACP后set丢失

    本人常用的软件环境为hypermesh + ANSYS 经典界面,几乎不怎么用workbench,感觉workbench成也集成化,败也集成化,模块之间的数据交换并不完美,常常因为一些莫名其妙的bug ...

  8. 双馈风机虚拟惯性控制+下垂控制参与系统一次调频的Matlab/Simulink模型,调频结束后转速回复,造成频率二次跌落

    双馈风机虚拟惯性控制+下垂控制参与系统一次调频的Matlab/Simulink模型,调频结束后转速回复,造成频率二次跌落 系统为三机九节点模型,所有参数已调好且可调,可直接运行,风电渗透率19.4% ...

  9. 频率二次跌落,双馈风机虚拟惯性控制+下垂控制参与系统一次调频的Matlab/Simulink模型,调频结束后转速回复,造成频率二次跌落

    Matlab/simulink 频率二次跌落,双馈风机虚拟惯性控制+下垂控制参与系统一次调频的Matlab/Simulink模型,调频结束后转速回复,造成频率二次跌落 系统为三机九节点模型,所有参数已 ...

  10. ubuntu中解决ROS--Gazebo添加模型库,解决打开后无模型的问题

    ubuntu中解决Gazebo添加模型库,解决打开后无模型的问题 1.在主目录中ctrl+h ​​​​ 下载https://bitbucket.org/osrf/gazebo_models/downl ...

最新文章

  1. fir.im Weekly - iOS 保持界面流畅的技巧
  2. 从谷歌AutoML到百度EasyDL,AI大生产时代,调参师不再是刚需
  3. 独家 | 手把手教你学习R语言(附资源链接)
  4. 四. RxJava之基本原理
  5. Python中的异常(Exception)处理
  6. 程序员妈妈的“work-life balance”,直面想象中的困难
  7. RabbitMQ入门学习系列(四) 发布订阅模式
  8. 以命令行的方式运行activity
  9. [postgresql]postgresql的递归查询sql实例
  10. 阶段3 3.SpringMVC·_07.SSM整合案例_03ssm整合之编写Spring框架
  11. extmail 发送邮件附件大小限制修改
  12. 2020-11-12
  13. 【论文笔记_对比学习_2021】CONTRASTIVE LEARNING WITH HARD NEGATIVE SAMPLES
  14. 2019正睿Day1题解
  15. 微积分——求导数的链式法则
  16. ORB-SLAM2系列第三章—— 地图初始化
  17. 输入框上的Magnifier
  18. 八种酒吧里最时尚的喝酒法
  19. pytest05、fixture
  20. 新手买房必读的25个购房小知识

热门文章

  1. :-1: error: cannot open C:\Users\???\AppData\Local\Temp\main.obj.5136.0.jom for write
  2. 天津理工大学计算机科学与工程学院院长,国家杰青徐常胜任计算机科学与工程学院院长...
  3. 手把手教你单片机——1602显示
  4. Python:简单的人机对话程序
  5. Win10修改hosts文件,解决无法保存问题(避坑)
  6. VB封装Excel_VBA代码为Dll
  7. TuGraph开源JAVA客户端工具TuGraph-OGM,无缝对接JAVA开发生态
  8. 完全卸载SQL2000
  9. 安卓移动软件开发:手机防火墙的实现
  10. 在你的DLL中,如何导入(导出)一个类,使得其他项目可以调用该类?