3 回答

TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊
好的,我認(rèn)為我可以更好地解釋我在評論中提出的內(nèi)容:)。因此,盡管DAO比存儲庫更靈活,但基本上可以將兩者視為相同。如果要同時(shí)使用兩者,則可以在DAO-s中使用存儲庫。我將在下面解釋它們中的每一個(gè):
儲存庫:
它是特定類型對象的存儲庫-它允許您搜索特定類型的對象并將其存儲。通常,它只會處理一種類型的對象。例如AppleRepository,您可以選擇AppleRepository.findAll(criteria)或AppleRepository.save(juicyApple)。請注意,存儲庫使用的是域模型術(shù)語(不是數(shù)據(jù)庫術(shù)語-與數(shù)據(jù)在任何地方的持久性無關(guān))。
存儲庫很可能會將所有數(shù)據(jù)存儲在同一張表中,而模式則不需要這樣做。盡管它僅處理一種類型的數(shù)據(jù),但使它在邏輯上連接到一個(gè)主表(如果用于數(shù)據(jù)庫持久性)。
DAO-數(shù)據(jù)訪問對象(換句話說-用于訪問數(shù)據(jù)的對象)
DAO是為您定位數(shù)據(jù)的類(主要是查找程序,但通常也用于存儲數(shù)據(jù))。該模式不限制您存儲相同類型的數(shù)據(jù),因此您可以輕松地?fù)碛幸粋€(gè)DAO,用于定位/存儲相關(guān)對象。
例如,您可以輕松地使用UserDao公開諸如
Collection<Permission> findPermissionsForUser(String userId)
User findUser(String userId)
Collection<User> findUsersForPermission(Permission permission)
所有這些都與用戶(和安全性)相關(guān),并且可以在同一DAO下指定。對于存儲庫,情況并非如此。
最后
請注意,這兩種模式實(shí)際上含義相同(它們存儲數(shù)據(jù)并抽象化對數(shù)據(jù)的訪問,并且都表示為更接近域模型,并且?guī)缀醪话魏螖?shù)據(jù)庫引用),但是它們的使用方式可能略有不同,因?yàn)镈AO稍微靈活/泛型,而存儲庫則更具體和僅對類型進(jìn)行限制。
添加回答
舉報(bào)