持久性逻辑应该只放在域模型bean中还是只放在DAO中?

时间:2010-11-04 22:10:57

标签: java persistence dao

可以请任何人解释一下这是什么利弊?我的意思是,不使用ORM框架/ JPA规范。

它涉及实体之间的多对多和多对一关系。想象一下实体关系

  

老师 - 学生(多对多)

  医生 - 病人(一对多)

我的问题是,我们是否可以在Doctor bean中使用getPatients()方法或在Teacher bean中使用getStudents(),或者是否应该将POJO放在DAO层中。

我经常看到第一种方法是在对象模型bean扩展为其提供服务/持久性Facade访问权限的类或者通过spring注入它们等的情况下使用。它的优点是,可以调用doctor.getPatients();几乎在应用程序的任何地方,而不是从DAO获得结果。

是否存在第一种方法很方便的情况?因为我看到很多情况都是这样的,我想知道它是否有目的,或者是业余主义还是旧风格。

2 个答案:

答案 0 :(得分:4)

你可以做任何你想做的事,但无处不在的模式是DAO模式。 重点是separate your concerns如果您有域对象,那么您可能有一些业务逻辑。您是否真的想在业务逻辑之上放置持久性逻辑?您的应用程序将变得不易维护,更少(轻松)可测试,并且有更多错误。一旦你做出一个可疑的设计决定,更多的肯定会遵循....

答案 1 :(得分:1)

遵循KISS原则。 DAO非常适合从域逻辑中抽象出持久性的机制。域对象只是将状态从一个层传送到另一个层,通常只有很少的业务逻辑。这意味着域对象(也称为DTO)可以包含大量JPA注释以指示某种ORM框架的持久性,还有JAXB注释,以允许将DTO轻松编组为XML以进行传输通过网络服务。

我的总体趋势是让一个业务对象专门用于操作单个DTO,以某种方式改变其状态,这是由业务规则驱动的。服务(JTA事务边界)管理业务对象的集合,并基本上形成应用程序事务。这遵循了许多细粒度物体的一般OOD原理,其目的非常明确。