【问题标题】:Should we be reusing JPA entities我们是否应该重用 JPA 实体
【发布时间】:2013-09-19 21:35:21
【问题描述】:

目前我在一家拥有 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 个数据库,我会想要一个带有 dao/jpa 的 maven 项目,并且只要有任何需要数据库访问的东西都包括该依赖项。关注点和所有的分离。但同样,对于不熟悉您的项目的人来说,这并不是为您解答的最佳答案。

标签: java hibernate maven jpa


【解决方案1】:

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

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

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

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

【讨论】:

  • 嗯。我知道这是非常主观的。基本上,每个模型的“重叠”只是很小的一部分。 3-5% 是重叠的?
  • 如果我们让它成为一个单一的 EJB,因为 6-7 个应用程序被部署在不同的耳朵里,我们不能使用本地 EJB 来共享,显然远程 EJB 不像我想的那样工作他们有吗?
猜你喜欢
  • 1970-01-01
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
  • 2017-08-06
  • 2015-10-22
相关资源
最近更新 更多