争论会一直在人群中存在,它消失就代表人类文明也灭亡了...

很久以前,在园子曾经出现过关于ORM的争论.而就是在那段时期,我对OO及ORM的概念在硝烟弥漫的文字里逐步建立起来.最近对于是不是该把持久化放入到book的讨论,我想跟之前的ORM争议颇有相似之处.

说到ORM,大家应该会赞成信息系统的开发,可以分为以数据库为中心、和以OO为中心的两种主要方式吧.

1.以数据库为中心.显而易见,开发的初期会先设计好数据库结构,包括表/字段/关系基于存储过程等等对象.然后再依据数据库来做上层的业务逻辑,以及表现层等等.按照这种方式开发的系统,其实Domain Object已经没有存在的必要了.你完全可以在aspx.cs文件中开一个datareader读出数据库的内容再显示出来.而其实所谓强类型的数据集,其实就是物理数据库在内存中的一个映射.业务实体等这些东西是没有必在的必要性的.

2.以OO为中心来设计系统.首先第一步是设计业务流程和实体类,然后再根据需要来设计数据库结构等,在实体类和数据库中间再用ORM桥接起来.对以OO为中心的设计来说,在设计时间,业务流程/逻辑/实体类这些才是中心要点所在,在初期甚至设计的主要阶段,数据库/持久化这些等等东西都是不会被优先考虑的.在这个立场上来看,持久化是因为内存太小,电脑会掉电才不得不需要的东西.而在后期数据将会被持久化到哪里,还并不是一个十分确定的问题.

另我找到一篇贴子,是讲Martin Fowler的贫血模型和rich domain object(不敢乱翻)的.个人觉得讲得不错.里面的第一种就类似于以数据库为中心的一种方式,贫血模型下的实体除了能提供强类型外,并没有带来多余的价值;第二种也就是Martin Fowler提倡rich domain object.可以看到 Item 实例了一些业务逻辑,然后最后的持久化是由ItemManager来完成的.原文也提出了在Item中不应依赖于ItemDao.

最后该文还有提到第三种方法,这种方式与之前亚历山大同志提出的在book.Save中实现对象的自我持久化很相似.

对于这种方式,我并没有要否定它的意思.可是,这种方式怎么能算是OO呢?如果你是以OO的方式来设计系统的话,在设计实体类的时候怎么会考虑到持久化这个问题呢,是不是在这一点上就已经偏离了OO的理念?

需要厘清的是我本人认为实体类应该实现一定的业务逻辑,类似于亚历山大同志提出来的Man需要Borrow和Lend方法的例子.而非常不赞同的是亚历山大同志提出来的在Book中实现持久化方法Save是一种很OO的设计.

而令我十分困惑,明明Book.Save实现持久化的话,那就意味着Book对象对持久层产生了依赖.怎么还有那么多人说这是解耦!非常地困惑啊!

转载于:https://www.cnblogs.com/Klesh/archive/2007/09/24/martin-fowler-rich-domain-object.html

为什么把持久化放到Domain Object是不OO的.相关推荐

  1. ddd的战术篇: domain object之一

    首先ddd的战术这个讲法是不太好的.ddd书中说的是战术性建模(tactical modeling).其意思是在战术层面的建模,那当然有战略层面的建模啦.以后会专门讲. domain object是d ...

  2. java 分层领域模型_Java领域模型 | 学步园

    为了补大家的遗憾,在此总结下ROBBIN的领域模型的一些观点和大家的补充,在网站和演讲中,robbin将领域模型初步分为4大类: 1,失血模型 2,贫血模型 3,充血模型 4,胀血模型 那么让我们看看 ...

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

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

  4. 【系统架构理论】一篇文章搞掂:领域驱动设计

    一.什么是领域驱动设计 1.1.面向业务的设计 当我们需要构建一个业务复杂的系统,我们不仅要从技术角度去构建一个稳健的系统,还要从业务角度出发,保证系统能满足业务需求. 架构设计的考虑点:不仅面向技术 ...

  5. 各种视角带你做扣库存的逻辑

    一.背景 1.1 背景说明 之前群里有人分享基于贫血模型和充血模型相关的一些代码实战,同时也有一些小伙伴不太理解这些模型之间的真正内容,本文将通过一个扣库存的代码工程实践来阐述不同视角下的扣库存逻辑的 ...

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

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

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

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

  8. 我爱刷题001-2018.02.01

    题目: 领域模型.贫血模型.充血模型的区别! 1. 领域模型 领域模型是对领域内的概念类或现实世界中对象的可视化表示.又称概念模型.领域对象模型.分析对象模型.它专注于分析问题领域本身,发掘重要的业务 ...

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

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

最新文章

  1. HDU2025 查找最大元素
  2. Python装饰器执行顺序详解
  3. JAVA连接MYSQL数据库
  4. 家门口的医疗新体验,网易云信携手嘉虹健康打造互联网医院新场景
  5. SpringCache 集成 Redis,这才是优雅的缓存解决方案!
  6. inodesusedpercent_Linux系统中常用的监控指标整理
  7. mybatis mysql upsert_SpringBoot2.3.4+Mybatis+Phoenix操作HBase2.0.6
  8. 创建第一个ArcGIS API for Silverlight应用
  9. Dev-cpp调试教程
  10. 计算机编程 常用术语英语词汇大全 记忆
  11. Linux Centos 7 下载 Mysql 完整详细步骤
  12. 使用php监控系统运行状态、网站运行状态监控系统
  13. Vue 最黑暗的一天
  14. 手机QQ邮箱可以发html邮件么,如何使用手机qq邮箱发送邮件
  15. 计算机ifand函数补考科目,Excel函数公式:逻辑函数IF、AND、OR、NOT、IFERROR实用技巧解读...
  16. 在Linux上配置DRBD部署
  17. docker仓库Repository和harbor仓库
  18. 爬虫内涵段子贴吧内容
  19. 一文详解什么是可解释AI
  20. C# 使用Vlc播放视频或者监控

热门文章

  1. 基于WebSocketSharp 的IM 简单实现
  2. 【资料整理】Eclipse快捷键
  3. 3.3 rsync同步之ssh隧道方式
  4. Jmeter java协议配置文件导入
  5. PHP框架剥离的判断是否为手机移动终端的函数
  6. HDOJ1102 Constructing Roads【最小生成树】-----武科大ACM暑期集训队选拔赛1题
  7. 脾虚怎么办?7招驯服“脾”气-转
  8. mysql数据库什么是事件_[数据库]Mysql 事件(定时任务)
  9. 中子中子测井发出打入地层_测井曲线解释
  10. 蓝桥杯 ALGO-31算法训练 开心的金明(01背包,动态规划)