为了账号安全,请及时绑定邮箱和手机立即绑定

DAO和存储库模式之间有什么区别?

DAO和存储库模式之间有什么区别?

数据访问对象(DAO)和存储库模式之间有什么区别?我正在使用Enterprise Java Beans(EJB3),Hibernate ORM作为基础结构以及域驱动设计(DDD)和测试驱动开发(TDD)作为设计技术来开发应用程序。
查看完整描述

3 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

好的,我认为我可以更好地解释我在评论中提出的内容:)。因此,尽管DAO比存储库更灵活,但基本上可以将两者视为相同。如果要同时使用两者,则可以在DAO-s中使用存储库。我将在下面解释它们中的每一个:


储存库:

它是特定类型对象的存储库-它允许您搜索特定类型的对象并将其存储。通常,它只会处理一种类型的对象。例如AppleRepository,您可以选择AppleRepository.findAll(criteria)或AppleRepository.save(juicyApple)。请注意,存储库使用的是域模型术语(不是数据库术语-与数据在任何地方的持久性无关)。


存储库很可能会将所有数据存储在同一张表中,而模式则不需要这样做。尽管它仅处理一种类型的数据,但使它在逻辑上连接到一个主表(如果用于数据库持久性)。


DAO-数据访问对象(换句话说-用于访问数据的对象)

DAO是为您定位数据的类(主要是查找程序,但通常也用于存储数据)。该模式不限制您存储相同类型的数据,因此您可以轻松地拥有一个DAO,用于定位/存储相关对象。


例如,您可以轻松地使用UserDao公开诸如


Collection<Permission> findPermissionsForUser(String userId)

User findUser(String userId)

Collection<User> findUsersForPermission(Permission permission)

所有这些都与用户(和安全性)相关,并且可以在同一DAO下指定。对于存储库,情况并非如此。


最后

请注意,这两种模式实际上含义相同(它们存储数据并抽象化对数据的访问,并且都表示为更接近域模型,并且几乎不包含任何数据库引用),但是它们的使用方式可能略有不同,因为DAO稍微灵活/泛型,而存储库则更具体和仅对类型进行限制。


查看完整回答
反对 回复 2019-12-07
  • 3 回答
  • 0 关注
  • 710 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信