我的數據庫比較小,有8個表,每個表少於5列。我使用EF。我創建了單個存儲庫類,但現在我認爲它可能不是正確的方式來使用它。我應該爲每個控制器分別存儲庫類嗎?比方說我有產品,用戶,Unicorns是否可以讓單個存儲庫類與所有這些控制器一起操作並在每個控制器中實例化,還是應該爲每個控制器創建單獨的存儲庫類?單個或多個存儲庫類?
12
A
回答
10
DDD的關鍵概念之一是聚合根 - 這是您通過其管理整套相關實體的「頂級」實體。例如,在一個零售場景中,'訂單'將是一個可以訪問訂單本身的集合根,一個OrderItems列表(即產品+金額+修飾符,例如折扣),BillingAddress,ShippingAddress和PaymentMethod 。其中每一個都與訂單本身密切相關,直到他們沒有理由超出訂單範圍。
每個聚合根應該有一個存儲庫,它擁有在根目錄下持久保存對象的整個子圖的責任。所以在上面的例子中,你不需要或需要一個OrderItems的存儲庫,它允許獨立地訪問訂購商品;相反,您應該實施一個OrdersRepository處理Orders及其所有子組件作爲一個單元。
根據您的特定域模型,您可能需要一個或多個存儲庫,但當然不是每個實體類型都有一個。在尋找聚合根時要問的關鍵問題是「這個實體是否有自己的身份和生命週期?」訂單確實,OrderItems沒有。
1
我不認爲每個實體的repoistory是一個好主意,而是每個服務的存儲庫,如果這是有道理的。
例如,如果我的主要應用程序的焦點在用戶上,我不會去製作CategoriesRepository或CarsRepository。
2
想到領域驅動設計,考慮到這一點,您將項目的邏輯結構劃分爲不僅僅是類,而是作爲域,這意味着所有操作都與Product
有關,它們位於ProductsController
之內因此在ProductsRepository
之內,所以我更喜歡很多存儲庫,每個存儲庫都配備了操作來處理項目的某些方面。
並不是所有方面都需要一個存儲庫,但這就是您的決定。
相關問題
- 1. 多個SVN存儲庫或單個公司存儲庫
- 2. 多個存儲庫或具有分支機構的單個存儲庫?
- 3. 單個與多個Linq2sql存儲庫
- 4. 多個用戶的單個存儲庫
- 5. 多個Mercurial存儲庫或單個克隆
- 6. 設置2個或更多存儲庫?
- 7. 多個存儲庫,單一設置
- 8. 團隊之間共享庫的單個或多個Git存儲庫
- 9. 多個孤立分支或單獨的存儲庫 - git
- 10. 如何將單個hg存儲庫轉換爲多個存儲庫
- 11. 從單個轉儲文件加載多個svn存儲庫
- 12. 在單個或多個核心上存儲多組文檔
- 13. Apache2 svn多個存儲庫
- 14. Git和多個存儲庫
- 15. 多個存儲庫和Heroku
- 16. 多個Git存儲庫
- 17. 創建多個存儲庫
- 18. 添加多個遠程倉庫到單個本地存儲庫
- 19. 單個存儲庫內的多個github庫
- 20. Hg:將多個存儲庫合併爲一個存儲庫
- 21. 將一個SVN存儲庫鏈接到多個Trac存儲庫
- 22. 將多個Git存儲庫推送到一個存儲庫
- 23. c#存儲庫模式:每個子類有一個存儲庫?
- 24. 搖籃上傳單個存檔到多個存儲庫
- 25. 將多個派生類類型存儲在單個列表中
- 26. C#存儲一個或多個基元
- 27. 設置版本存儲庫 - 一個或多個小的?
- 28. github上的多個用戶和一個存儲庫或springloops
- 29. 許多SVN存儲庫或許多目錄的存儲庫?
- 30. 將遊戲卡數據存儲在單個或多個XML中?
很好的答案!有用的文章解釋了這個概念http://devlicio.us/blogs/casey/archive/2009/02/16/ddd-aggregates-and-aggregate-roots.aspx – GibboK