我有參與這個問題以下層:查詢Repository層中的多個實體時返回什麼類型?
- 服務層(使用的IoC調用庫)
- 域模型(POCO /域實體,定義儲存庫接口)
- 庫層(EF。 EDMX並實施庫)
很多時候,它真的直截了當:庫層通過實體框架查詢數據庫,並返回IList<SomeDomainEntity>
對來電者說這是服務層。返回的類型是在域模型中定義的類型。
我遇到的問題是當我需要跨POCOs A,B和C進行查詢並獲取所有要返回的數據時。由於我不處理存儲庫中的任何邏輯,因此我需要將此數據返回到要處理的服務層(直接或通過調用域模型上的某些邏輯來更可能)。但是,我沒有單一類型從存儲庫查詢的結果中返回給調用者。
在我看到的例子中,一個匿名類型的課程處理了這個問題,但由於我沒有直接在存儲庫中處理返回數據的邏輯,而需要返回它,所以我需要返回一個物理類型。這裏有一些解決方案,我想到了,但不知道我喜歡的:
- 創建域模型一個新的域實體,基本上是所有我查詢的數據的組合,所以這個新的單一類型都可以返回。這似乎是錯誤的創建abritrary類型來滿足查詢需求。
- 使服務層分別調用A,B,C實體上的各個存儲庫,然後處理來自每個返回對象的數據。這看起來像是很多額外的工作。
- 創建一個ViewModel返回。這對我來說似乎也不合適。我在我的服務層和UI層之間大量利用ViewModel類,但從未看到它們用於從存儲庫返回。
我不能是唯一一個跨多個實體查詢以獲得需要添加到類型並返回給調用者的數據集合的人。什麼是解決我的問題的常見做法或標準方法?
謝謝!
我會選擇1.根據您的查詢創建視圖並將視圖映射到您的新域模型。 – Romoku 2013-02-20 17:28:56