我正在使用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/