2011-02-07 119 views
0

我使用MVC2,並有一個結構類似如下建立一個網站:設計問題

廠 - > Domain.objects - > MVC2

一廠包含日誌類型,枚舉裏面詳細介紹了其行動已被應用於一個對象。 該域請求對象並將其提供給MVC2模型,並將其作爲IEnumerable Ilog傳遞給視圖,並且該視圖迭代它。

我的問題是我希望視圖創建一個基於日誌類型的鏈接,所以我在視圖中創建了一個switch語句來創建這個功能。 switch語句正在利用存儲庫中的enum,但是這對我來說似乎有點不對勁:將存儲庫暴露給視圖。

我應該將Log類型封裝在域中對象的新IList中嗎?或者可以在存儲庫中引用此枚舉。

如果這些都不是理想的,那麼最好的解決方案是什麼?

感謝您的幫助,我可能會得到。

回答

0

最好的解決方案是使用視圖模型。視圖模型是專門針對視圖需求量身定製的類。因此,這裏是一個控制器動作典型的工作流程:

  1. 查詢倉庫去取一些域對象
  2. 地圖的域對象到相應的視圖模型(AutoMapper可以幫助你在這裏)
  3. 傳遞視圖模型到視圖

因此,在這種情況下,視圖沒有任何領域模型的知識。這是一般的。

現在針對您根據枚舉值生成不同鏈接的特殊情況,我認爲在視圖中編寫ifs和switch會導致醜陋。你不覺得嗎?所以寫一個自定義的HTML幫助,將基於視圖模型正確的鏈接將是巨大的尤其是當你的看法是這樣的:

<%= Html.MyLink() %> 
+0

謝謝Darin!我想我一直在誤解什麼樣的視圖模型。我會在訪問域的視圖模型中放入一些邏輯。控制器是否應該訪問域並將這些信息傳遞給特定的視圖模型,然後將任何結果推送回域? – 2011-02-07 19:08:58

0

我的想法是,這是一個ViewModel那些偉大的用途之一,在視圖模型中包含該信息。