【发布时间】: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