java - DAO和Service层设计

标签 java java-ee-6

我正在使用 Java EE 6 开发 Web 应用程序。为了尽量减少对数据库的调用,使用类是个好主意:

数据访问类 (DAO) 将仅调用基本方法 getAllClients、getAllProducts、getAllOrders、delete、update 方法 - CRUD 方法。

将调用 CRUD 方法的服务类,此外还有过滤器方法,例如findClientByName、findProuctByType、findProductByYear、findOrderFullyPaid/NotPaid 等...将基于基本的 DAO 方法。

谢谢

最佳答案

根据我的经验(虽然有限)DAO类往往具有允许应用程序执行的所有可能的数据库操作。因此,在您的情况下,它将具有诸如 getAllClients() 之类的方法。和 getClientByName(String name)

获取 DAO 中的所有用户并遍历所有用户直到找到所需的用户,这会导致不必要的计算时间浪费和内存消耗。

如果您想减少数据库被访问的次数,您可以实现一些缓存机制。一个ORM框架如 Hibernate应该能够提供您所需要的,如图所示here .

编辑:

根据您的评论问题,不,您的服务不会变得多余。一个人所做的是通常使用 Service层暴露DAO功能。这基本上不会生成 DAO。从应用程序的前端可见。它通常还允许额外的方法,例如 public String getUserFormatted(String userName) .这将使用 getUserByName DAO 提供的功能但提供一些额外的功能。

Service如果规范发生变化,您现在还需要一个 Web 服务来与您的应用程序交互。中间有一个服务层将允许 Web 服务查询 DAO通过 Service层。

所以基本上,DAO层仍将担心数据库内容(CRUD 操作),而服务将调整 DAO 返回的数据。在不暴露 DAO 的情况下。

关于java - DAO和Service层设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11649786/

相关文章:

Java 快速正弦波音

jboss - 混合使用 Spring MVC 和 CDI/JEE6 的最佳方式是什么?

java - 在 bean 存档 (jar) 中定义和使用时,CDI 拦截器不起作用

java - 在 XHTML 中包含外部内容

Java EE 6 和替代品

java - 在无状态 EJB 计时器中正确使用实例变量

java - 在 Spring Web 服务框架中流式传输 MTOM Web 服务

java - 是否可以使用 Spring Boot 进行微服务

java - 当您在长生命周期对象上持有对无状态 EJB 的引用时会发生什么?

java - 如何使用 close() 或 reset() 从头开始​​读取扫描仪