2012-01-30 26 views
4

我已經使用DDD原則爲新項目創建了基礎結構。我有在該領域飼料工廠/ hydrators的倉庫。應用程序層用作外觀,當請求時將各種視圖/編輯模型的域模型渲染出來。返回域對象列表最佳實踐

編輯模型被映射併合並回領域模型,通過使用流利驗證的serice進行驗證。任何錯誤都會被記錄並通過錯誤服務回報給用戶。

這一切都完美。我現在關心的是如何最好地生成這些域對象的列表。

有幾個選項浮現在腦海中:

1)水合物全域模型,然後壓平這些到列表中。域模型可以緩存爲IEnumerable列表。然後將該集合平鋪並推送到請求視圖。

2)創建一個「投影」對象,該對象是域模型的輕量級表示。這將需要很少的保溼,並且可以通過域級別拉動並映射到viewModel並顯示。

3)「繞過」域,並從生成IEnumerable的應用層調用服務。這將使域清潔。

我擔心爲了顯示域項目列表,解決方案1會很沉重。雖然他們將被封鎖,但由於域名的可搜索性,因此緩存將沒有太大的好處。

任何建議什麼是最好的選擇,將不勝感激。

+2

你的想法是對的錢,但不幸的是沒有明確的答案。如果您的目標是簡單和代碼維護,請選擇一項。如果你的目標是性能,請選擇2.如果真的有必要,我只會選擇選項3,但它可以與選項2結合產生顯着的速度提升。 – 2012-01-30 13:18:25

+0

尤達報價 - 「單獨讀取和寫入是您必須執行的操作!」 – 2012-01-31 19:14:40

+0

我更喜歡#2方法,尤其是像EF或NHibernate這樣的ORM,其中投影實際上可以生成更細的SQL和更少的數據。 – 2012-01-31 21:34:01

回答

0

我更喜歡解決方案2.保持域模型清潔是必要的。通過CQS(命令查詢分離),我們可以實現一個有效的輕量級查詢架構。