我们应该重用JPA实体吗?

时间:2013-09-19 21:35:22

标签: java hibernate maven jpa

目前我在一家拥有6-7个Java EE项目的公司工作。它们是多模块maven项目,它们都相当大并且用于不同的目的。因此,他们的模型非常不同,但大多数情况下数据存储在同一个数据库中。

对我来说,问题在于,由于存在一些重叠区域,它们只是在依赖链上一直注入现有的DAO。所以我有

A-parent
 -A-JPA
 -A-DAO

B-Parent
 -B-JPA
 -B-DAO
 -A-JPA
 -B-DAO

等等。他们实际上只使用了其他项目模型的2%和相应的DAO。

我试图通过简单地复制所需的实体(并且仅包括真正需要的事物的字段/映射)来尝试解耦这些依赖关系,以便相同的EJB不会被部署7次(或者在聚集时更多) ,但显然我没有做出令人信服的论证。任何人都可以帮我指点一篇关于这种情况的最佳实践的文章,或者帮助提出要向他解释的要点。

TLDR:我希望每个项目都有自己的实体集,即使存在非常小的重叠以减少项目之间的依赖关系以及实现这一点,所以我们不会部署相同的EJB 7次。我的老板认为这些不必要的耦合没有任何问题。我是否一无所获?谢谢!

1 个答案:

答案 0 :(得分:0)

如果它是为各种应用程序维护的单个数据模型,持久性实体(甚至它们的DAO)可能被视为该数据库的Java API,我将它放在一个中心组件中。有些组织甚至可以从数据库向上驱动设计,并对持久性实体进行反向工程,在这种情况下,对于不同的用户,它们将是相同或相似的。

这样的中心组件是一个库(由其他组件重用)还是它自己的EJB(由其他组件调用)我会依赖于应用程序所需的事务和缓存行为,以及你如何看待责任组织起来。在一个项目中,我们强烈支持这样的规则,即每个数据只能由单个组件(服务或EJB)维护,而其他数据则必须通过该单个组件。

如果它是一个通用的域模型,但是每个EJB都为它实现了自己的数据存储,那么域模型可能会被共享,我不会共享持久性实体。然后,您将讨论在不同组件之间共享域模型。可以从不同的子域内以稍微不同的方式查看世界,我觉得您最终在不同的子系统中设计的域名略有不同,因此我可能会投票反对重用。

每个人的里程可能会有所不同,考虑到特定项目的实际情况,我可能会看到不同的情况。