浏览 3540 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-01-15
潜水N久了,冒个泡,几年前就在javaeye参与过关于领域模型的讨论,越讨论我就越对这个模型越没有信心。 领域模型是什么? 想到一个笑话: 工作时把我当超人,加薪时把我当隐形人。领域模型就是为实现这么个理想而提 出来的。什么贫血什么充血,其实就是要实现 对象化编程,把数据库当做隐形人。再说白点:就是数据库在与不在一个 样!对象在故我在,所有的方法都自然而然的加注到这么个对象上。 领域模型的理想: 还是银行转账这么个例子: 事务开始: finder.find(帐户A) 帐户A.减(500)。 finder.find(帐户B) 帐户B.加(500)。 流水帐户.记录(XXX) 事务结束。 但是愿望是美好的,现实是残酷的 持久化是一座难以翻越的高山。就我浅薄的知识范围内来说,我没有找到一个很好 的技术解决方案(java) (1)事务范围内所有的对象的状态都要记录。 (2)事务范围内所有的对象的变化都要记录。 (3)事务结束是所有变化了的对象都要回写入数据库。 上面这三件事看似简单,其实也就是所有数据库操作的全部,即使是hibernate也没做到这一点: (1)事务开始时就要建立一个对象图。 (2)访问过的所有对象都要纳入这个事务发起的对象图中 (3)无侵入的记录对象图中所有字段的变化。 (4)回写变化了的字段【有可能是增量的】。 (5)当出现异常时候,需要回滚【对象图是重建还是全部废弃?】 如果持久化框架能做到上面几点,才能谈真正的领域对象。 目前来说hibernate已经做到了一部分对象图的功能,但是仅仅是一小部分。 另外我在论坛上经常看到DAO可以隔离数据的存贮,但我要说的是你如果用上了hibernate的话,想要随时替换成ibats几乎是不可能的,除非hibernate的大部分功能,你不用。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-01-16
但我们最起码可以做到:
把领域模型分离出来,更好的封装领域或业务知识,可以一定程度减少需求变化的影响 提炼领域模式,比如Entity, Value Object这些building block 其实,领域模型对软件开发的方方面面都有影响的吧 |
|
返回顶楼 | |
发表时间:2009-01-16
不明白为什么楼主觉得持久化 那里做不到了?
|
|
返回顶楼 | |
发表时间:2009-01-16
1)领域模型的提出就是为了对象化的操作,也就是的属性和行为应该是封装在一起的。操作应该是细粒度的。而这些有血有肉的对象属性的确是和数据库紧紧相连的。
2)很简单,当你做一连窜操作的时候,以事务的起点为根: 1)取出A对象,操作。 2) 导航到B对象操作。 3) 导航到c对象操作。 4)。。。。H对象操作。 事务结束。 a-h的对象那些需要回写数据库的? 如何回写?这些都需要对整个对象图进行管理。hibernate目前能做到的也就是 具有级联关系的一些对象而已。 现在解决方案要么就是在A-H各个对象中弄个DAO来取数据,要么就是直接写在里面,做的最好的hibernate倒是能够无侵入的自动根据配置好的关系在对象图中遨游,但是遨游过后的再次回填,确实做不到的。不过怎么说也算进了一大步了。 什么时候在对象图遨游般的回填数据库,那么领域模型的春天才算真正到来了。 |
|
返回顶楼 | |
发表时间:2009-01-19
我觉得真正的领域模型应该是充血模型,不过现有条件下实现充血模型有点麻烦,大家不要老争论那些所谓能与不能的问题,而且这么做到底有没有意义,效费比高不高
|
|
返回顶楼 | |
发表时间:2009-01-20
持久化对于domain object本身来说真的很重要吗?
domain object为什么要去关注存储与事务?存储是Repository的事情,而事务,是service的事情。当然,他们也是属于领域模型的一部分。 |
|
返回顶楼 | |
发表时间:2009-01-20
nighthawk 写道 持久化对于domain object本身来说真的很重要吗?
domain object为什么要去关注存储与事务?存储是Repository的事情,而事务,是service的事情。当然,他们也是属于领域模型的一部分。 严重同意 |
|
返回顶楼 | |
发表时间:2009-01-23
guooscar 写道 nighthawk 写道 持久化对于domain object本身来说真的很重要吗?
domain object为什么要去关注存储与事务?存储是Repository的事情,而事务,是service的事情。当然,他们也是属于领域模型的一部分。 严重同意 理论上是这样,新手看了配有简单的例子的书都会这么说,但当稍微复杂的领域对象就会遇到问题,最简单的问题就是对象导航的问题,没有透明的持久化对象的支持,你的领域对象内部就会充满了DAO 和并且被事务对象严重侵入了。 |
|
返回顶楼 | |