[领域模型] 领域模型--Now mission impossible[Java]
潜水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的大部分功能,你不用。
潜水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的大部分功能,你不用。