【问题标题】:How to reduce coupling between Presentation & Business layers (JPA, Netbeans)?如何减少表示层和业务层(JPA、Netbeans)之间的耦合?
【发布时间】:2014-04-06 20:37:26
【问题描述】:

我正在处理 Java 数据库项目,我正在尽我所能将我的 DAL/BL 层与表示层(网络/桌面应用程序)分开。

在“搜索”按钮后面的某个地方,我必须调用一个返回“OpArticle”对象列表的方法。以一种标准的方式,应该注入以下代码:

OpArticleJpaController articleCpontroller = new OpArticleJpaController(_emf);
listArticle = articleCpontroller.findOpArticleEntities();

其中“_emf”是应在应用程序启动时实例化的 EntityManagerFactory 实例。

我在询问一种更高效(更简洁)的设计模式,它让我不必将“EntityManagerFactory (_emf)”的引用传递给表示层中的控制器类。

我正在考虑以下方法:

listArticle = DaoFactory.getArticleController().findOpArticleEntities();

“DaoFactory”管理控制器对象的创建如下:

c1 = DaoFactory.getArticleController();
c2 = DaoFactory.getCustomerController();
etc...

知道每次开发新的控制器或任何服务提供者类并将其添加到 DAL/BL 层时,我必须通过添加新的实例化方法来更新工厂,这是否违反了任何最佳实践。

最好的问候。

【问题讨论】:

  • 实际上实例化 EntityManager Factory 是一个非常昂贵的过程,它应该在整个应用程序生命周期中实例化一次,是的,看看你在做什么,似乎 EMFactory 应该只在 DAO 层、控制器和服务不应该知道它的存在。
  • 是的。当然,EntityManagerFactory (emf) 将在整个应用程序生命周期中创建一次。我问的是避免在表示层(PL)类中传递(emf)引用的能力。因为这增加了 (PL) 和 DAL/BL 的耦合。

标签: java design-patterns jpa controller


【解决方案1】:

如果您这样做,尽管每次添加控制器时都需要修改工厂,但您可以以不违反任何重要 OO 原则的兼容方式对其进行修改。

但是,如果您使用像 GUICE 这样的依赖注入框架并且您只需将 EMF 作为依赖项,您将受益匪浅。

【讨论】:

    猜你喜欢
    • 2014-05-18
    • 2021-11-06
    • 2021-02-11
    • 1970-01-01
    • 2020-03-06
    • 2011-12-27
    • 2012-09-10
    • 2014-04-23
    • 1970-01-01
    相关资源
    最近更新 更多