关于Domain Model的对谈录之三: 充血模型与Domain Object的持久化

A:
充血模型中,Domain Object的持久化远远不如贫血模型来得清爽

B:你这里的“清爽”是上海话吧? 详细说说,为什么不够清爽?你不是说充血模型“老清爽”吗?

A:从业务逻辑的OO化来说,充血模型的确更清楚简洁;但在持久化问题上,可以说“很别扭”。第一个问题是循环调用问题:Domain Object要调用持久化的DAO接口,来把自己持久化;而DAO接口又要把Domain Object作为参数来做CRUD操作。

B:嗯, Stutent.save()中要执行studentDAO.save(this),而StudentDAO.save(Student)的参数就是调用它的Student.
这里存在Domain Object与其DAO之间的调用环路了,的确让人很不舒服。其实,
充血模型的这类问题不仅存在于持久化的场景中,任何一个以JAVABEAN为参数的接口都可能会与Domain Object循环调用

A:这还只是第一个问题。还有第二个问题。
“事务”不方便再以AOP方式来控制了。在贫血模型中,所有业务逻辑都集中在Transaction Script中,我们一般会用XxxService来命名这些事务,然后以AOP的方式在所有名为XxxService.doSth()的操作中强行织入事务。

B:嗯。
Domain Object的名字一般不会遵循某种命名规范,很难确定合适的AOP织入点

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.