DAO和服务层设计

Ale*_*lex 1 java java-ee-6

我正在使用Java EE 6开发Web应用程序.为了最大限度地减少对数据库的调用,最好有一个类:

数据访问类(DAO)将只调用基本方法getAllClients, getAllProducts, getAllOrders, delete, update方法--CRUD方法.

服务类将调用CRUD方法,但另外还有过滤方法,例如findClientByName, findProuctByType, findProductByYear, findOrderFullyPaid/NotPaidetc ...将基于基本的DAO方法.

谢谢

npi*_*nti 7

根据我的经验(尽管有限),DAO类往往具有允许应用程序执行的所有可能的数据库操作.所以在你的情况下,它将有诸如getAllClients()getClientByName(String name)等的方法.

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

如果您希望减少数据库被击中的次数,可能会实现一些缓存机制.一个ORM框架如Hibernate的应该能够提供您所需要的如图所示这里.

编辑:

根据您的评论问题,不,您的服务不会变得多余.人们通常使用一个Service层来揭示DAO功能.这基本上不会DAO从应用程序的前端显示出来.它通常还允许额外的方法,例如,public String getUserFormatted(String userName).这将利用getUserByNameDAO它提供的功能,但提供一些额外的功能.

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

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