3 回答
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稍微灵活/泛型,而存储库则更具体和仅对类型进行限制。
添加回答
举报