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稍微靈活/泛型,而存儲庫則更具體和僅對類型進行限制。
添加回答
舉報