我正在使用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功能,但会提供一些额外的功能。

如果规范发生变化,并且您现在还需要一个Web服务来与您的应用程序交互,则Service层也将变得非常有用。介于两者之间的服务层将允许Web服务通过DAO层查询Service

因此,基本上,DAO层仍会担心数据库内容(CRUD操作),而服务将调整DAO返回的数据而不会暴露DAO。

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

10-13 09:54