示例:您的數據庫具有名爲「CustomerOrdersOnHold」的SQL視圖。該視圖返回特定客戶和訂單數據字段的過濾組合。您需要在應用程序中從此視圖獲取數據。如何訪問這種視圖適合存儲庫模式?你會創建一個「CustomerOrdersOnHoldRepository」嗎?像這樣的只讀視圖被視爲聚合根?只讀數據庫視圖如何適應存儲庫模式?
回答
我寧願分開讀庫,優選地甚至更名爲Finder或閱讀器,資料庫是指對於不用於查詢只讀數據的域用法,您可以參考this article和this,它解釋了Finder分離表單存儲庫的用法。
這種架構可以讓你即使在數據存儲和使用事件採購方面,從寫模型讀取模型分開。
因爲你可以利用一些CQRS概念,而不由剛剛從發現者分開儲存庫分離數據庫的複雜中間的解決方案,對於這種類型的解決方案的樣品閱讀本post
(使用同一個數據庫,但分離發現者表格存儲庫)檢查this sample
我認爲可以擁有一個像「CustomerOrdersOnHoldRepository」這樣的獨立存儲庫。存儲庫的接口將反映對象是隻讀的(通過不定義Save/Add/MakePersistent方法)。
...但還有另一種策略,我很喜歡:多 庫。在我們的訂購示例中,我們沒有理由可以擁有兩個存儲庫:AllOrders和SurchargedOrders。 AllOrders代表 包含系統中每一單的訂單,SurchargedOrders 代表它的一個子集。
我不會調用返回的對象一個Aggrgate根。聚合是爲了一致性,數據交換和生命週期。你的物體沒有任何這些。看起來它們也不能被歸類爲值對象('特徵或屬性')。他們只是獨立的課程。
我傾向於給視圖自己的存儲庫,但是,這是我的理解是,存儲庫僅在聚合根上運行(http://thinkddd.com/glossary/aggregate-root/)。 –
該規則是關於避免直接訪問聚合的內部部分。你沒有這些內部部件,就像你沒有任何不變式和生命週期一樣。可以從存儲庫返回這些對象。如果你喜歡,稱它們爲聚合根,但這可能有點誤導。 – Dmitry
您的只讀數據將被視爲DDD世界中的值對象。
我通常會將值對象的訪問方法放在現有存儲庫中,直到創建單獨的存儲庫時纔有意義。它類似於可能返回狀態的靜態列表是一個地址表上所使用的方法:
IAddressRepository
{
Address GetAddress(string addressID);
List<string> GetStates(string country);
}
那麼在你的場景中,如果我有一個CustomerRepository或一個OrderRepository,我會添加一個方法到這些倉庫之一?即'ICustomerRepository.GetCustomerOrdersOnHold(args)'或'IOrderRepository.GetCustomerOrdersOnHold(args)'? –
- 1. 如何使git存儲庫只讀?
- 2. 如何實現多個數據庫的存儲庫模式
- 3. SVN只讀存儲庫
- 4. 存儲視圖算到數據庫
- 5. MVC存儲庫模式綁定數據
- 6. 存儲庫模式和數據訪問
- 7. 哪個數據庫最適合單用戶模式和只讀模式
- 8. Symfony2在數據庫表中存儲數據庫模式信息
- 9. 存儲庫模式
- 10. 同步框架,如何從只讀數據庫視圖下載?
- 11. 如何檢查數據庫是否以只讀模式運行?
- 12. 如何查詢存儲在數據庫數據庫中的整個模式?
- 13. 如何在Android應用程序中存儲簡單的只讀數據庫?
- 14. 多個Git存儲庫的單一隻讀視圖
- 15. 數據視圖概念/庫/模式?
- 16. 存儲庫模式 - 緩存
- 17. ViewState的 - 適當的方式存儲在數據庫數據
- 18. 如何在圖庫中存儲SQLite數據庫中的圖像
- 19. 的Node.js和渲染視圖和模板存儲在數據庫
- 20. Rails4:如何在數據庫中只存儲嵌套模型的縮略圖?
- 21. 如何在圖庫視圖模式下顯示數據
- 22. 如何使用存儲庫模式
- 23. 如何DDD和存儲庫模式
- 24. 如何獲取存儲過程的數據庫模式
- 25. 如何在存儲庫模式中加載相關數據
- 26. 如何在Java中存儲數據庫表模式(> 50列)
- 27. 存儲庫模式:僅用於數據庫源?
- 28. 數據庫和聚合根的存儲庫模式
- 29. LINQ,存儲庫模式和數據庫抽象
- 30. 存儲庫模式 - 切換數據庫並切換XML文件
我認爲這是最好的答案。這種類型的數據/對象與域無關,正如穆罕默德指出的那樣,術語庫與聚合/域/交易相關聯,所以使用這個術語可能會產生誤導。 CQRS旨在解決這個確切的問題。我回過頭問了一個類似的問題:http://stackoverflow.com/questions/2098112/ddd-how-to-implement-performant-repositories-for-searching –
偉大的答案,由於偉大的聯繫。這幫助我從另一個更清晰的角度看待我的代碼。 –
如果您有Finder,您如何命名「Saver」?庫?但是,然後存儲庫應該能夠訪問數據AKA「查詢」...如何解決這個問題? – JorgeeFG