2009-07-15 72 views
4

大多數開發人員在處理大型應用程序時如何處理ASP.NET MVC中的類型化視圖?我們正在考慮在模型文件夾中放置視圖特定的模型,然後將所有域對象放入單獨的項目中。這樣,我們的控制器就可以輕鬆地將域對象添加到類型視圖中,而域對象不需要知道視圖佈局本身。在ASP.NET MVC中使用視圖模型+數據模型來支持類型化視圖?

例如,如果我們有一個Employee對象:

  • 編號
  • 狀態

那麼,我們的員工查看可能使用ViewEmployeeModel對象:

  • Employee對象
  • 列表填充狀態下拉

這是一個明智的做法?有更好的方法來完成同樣的事情嗎?這似乎有點奇怪,因爲我基本上有兩個模型(一個用於視圖,一個用於業務對象),但是不比使用非類型化視圖更好?

回答

9

我這樣做幾乎一樣的規則,這是因爲:

  1. 它可以讓你設計應用視圖一,而不是DB-第一,客戶代表的工作時,這是很好的。
  2. 視圖通常比實體框架模型具有更「平坦」的對象圖。 LINQ可以很容易地映射這些。
  3. 視圖和數據模型可以更獨立地發展。
  4. 與FK ID相比,將模型綁定到平面視圖模型通常比預期完全物化相關對象的實體模型更容易。
  5. 您不必擔心意外暴露「祕密」屬性或更新的白名單屬性。
+0

偉大的方式來思考它,謝謝! – 2009-07-15 19:10:55

1

我認爲這是一個非常明智的做法。有一件事可能會幫助你的是AutoMapper

1

看起來很好,您有這樣的優勢,即模型只包含視圖所需的信息,而不包含許多討厭的業務邏輯函數/值。

3

沒有評論的聲望,但克雷格是對的。它是Model-View-ViewModel模式的變體。有一篇很好的文章可以在Los Techies上找到。

該文章還使用了mgroves指出的AutoMapper代碼,所以你應該能夠用一塊石頭殺死兩隻鳥。