最近,我正在重構我的DDD項目。當我看着我的存儲庫層。我發現它在我的存儲庫中返回IQueryable < T>。我感到困惑,我應該從我的DDD項目中的存儲庫中返回IQueryable < T> Repository Layer?我通常在我的Repository設計中返回IQueryable類型。但今天我發現了一個與此相反的想法article 我無法弄清楚!我應該從DDD庫中返回IQueryable <T>
2
A
回答
4
如果您返回IQueryable
您允許從域層泄漏到消費者層的域知識。它增加了您的域對象變得貧乏的風險,並且所有行爲都將移動到其他層。
雖然接縫非常方便返回IQueryable
並且您認爲您的代碼變得更簡單,這只是一種幻覺;當項目將增長時,IQueryable
將把你的代碼轉換成一大塊泥土,而域代碼分散在每個地方。您將無法優化您的存儲庫或更改與另一個存儲庫的持久性(即從sql到nosql)。
1
你可能不應該這樣做。
版本庫的工作不僅是抽象掉持久性細節,而且還提供了一個explicit query contract定義那些需要處理您的domain命令。
如果您覺得需要進一步過濾/轉換從存儲庫返回的內容,那麼很可能無法捕獲應該成爲存儲庫合同一部分的顯式查詢。
擁有這樣的合同可以讓查詢客戶表達他們的意圖並允許更輕鬆的優化。
1.現在,應用一些CQRS原理並將貝模模型完全用於查詢是非常常見的。鑑於這種情況,通過存儲庫的唯一查詢就是處理命令所需的查詢。然而,您不會以任何方式強制使用此方法,因此如果您願意,您的存儲庫也可以完成報告查詢。
相關問題
- 1. 如何從IQueryable返回HttpStatusCode <T>?
- 2. 返回的IQueryable <string>
- 3. 如何作爲IQueryable返回IQueryable <Something><ISomething>
- 4. 使用返回類型IQueryable <TABLE_1>
- 5. 如何返回IQueryable <T>
- 6. 我應該從LINQ返回DataGridView的SQL
- 7. 儲存庫應該實現IQueryable <T>?
- 8. 從我的方法中返回IQueryable <T>?這是正確的做法嗎?
- 9. DDD。我應該修改存儲庫中的實體嗎?
- 10. 是否可以將IQueryable <SomeClass>返回給IQueryable <T>方法?
- 11. DDD:倉庫能否返回布爾值?
- 12. 從另一個類實例返回IQueryable <T>
- 13. 返回的IQueryable <T>從泛型方法
- 14. 返回IHttpActionResult與IEnumerable <Item> vs IQueryable <Item>
- 15. 我應該如何啓動DDD?
- 16. DDD做法:我應該爲價值對象創建存儲庫
- 17. 返回的IQueryable從EF代理對象
- 18. 從LINQ IQueryable對象返回字符串[]?
- 19. 在DDD中使用IQueryable與存儲庫模式
- 20. RIA服務:我應該返回IQueryable還是IList?並標記爲INVOKE? (服務和存儲庫模式)
- 21. 我是否需要使用AsQueryable()來返回.NET中的IQueryable <Type> EF
- 22. LINQ查詢返回的IQueryable <IEnumerable的<User>>不是IQueryable的<User>
- 23. 我應該如何從函數中返回一個對象?
- 24. 我應該擔心從Web服務返回的URL中的'&'
- 25. 我應該從CGImageSourceCopyPropertiesAtIndex調用中釋放返回對象嗎?
- 26. 我應該返回gsl :: span <const T>而不是const std :: vector <T>&
- 27. LINQ加入返回的IQueryable
- 28. LINQ查詢返回的IQueryable
- 29. 使用Automapper返回IQueryable
- 30. IQueryable不返回Count屬性
我應該在Repository Layer中返回什麼? – doublnt
'IEnumerable'或'IReadOnlyList'似乎更合適。 – guillaume31