關於一點兒對倉儲(Repository)的理解

倉儲(Repository)

內容來源於dudu的 關於Repository模式一文html

Repository是一個獨立的層,介於領域層與數據映射層(數據訪問層)之間。它的存在讓領域層感受不到數據訪問層的存在,它提供一個相似集合的接口提供給領域層進行領域對象的訪問。Repository是倉庫管理員,領域層須要什麼東西只需告訴倉庫管理員,由倉庫管理員把東西拿給它,並不須要知道東西實際放在哪。數據庫

1. Repository模式是架構模式,在設計架構時,纔有參考價值; 架構

2. Repository模式主要是封裝數據查詢和存儲邏輯; dom

3. Repository模式實際用途:更換、升級ORM引擎,不影響業務邏輯; 單元測試

4. Repository模式能提升測試效率,單元測試時,用Mock對象代替實際的數據庫存取,能夠成倍地提升測試用例運行速度。 測試

評估:應用Repository模式所帶來的好處,遠高於實現這個模式所增長的代碼。只要項目分層,都應當使用這個模式。設計

關於泛型Repository接口(來源):htm

僅使用泛型Repository接口並不太合適,由於Repository接口是提供給Domain層的操做契約,不一樣的entity對於Domain來講可能有不一樣的操做約束。所以Repository接口仍是應該單獨針對每一個Eneity類來定義。 對象

泛型的Repository<T>類仍然用來減小重複代碼,只是不能被UserRepository類直接繼承,由於這樣Delete方法將侵入User類,因此改成在UserRepository中 組合一個Repository<T>,將開放給domain可見且又能使用泛型重用的功能委託給這個Repository<T>blog

Repository與Dal的區別(來源):

Repository是DDD中的概念,強調Repository是受Domain驅動的,Repository中定義的功能要體現Domain的意圖和約束,而Dal更純粹的就是提供數據訪問的功能,並不嚴格受限於Business層。

使用Repository,隱含着一種意圖傾向,就是 Domain須要什麼我才提供什麼,不應提供的功能就不要提供,一切都是以Domain的需求爲核心;而使用Dal,其意圖傾向在於我Dal層能使用的數 據庫訪問操做提供給Business層,你Business要用哪一個本身選。換一個Business也能夠用我這個Dal,一切是以我Dal能提供什麼操 做爲核心。

相關文章
相關標籤/搜索