2011-01-17 30 views
6

我剛剛考慮過在asp.net MVC中創建的視圖模型對象的概念。我們的目的是實例化它並從控制器傳遞它來查看和查看讀取並顯示數據。Asp .Net MVC Viewmodel應該是類還是結構?

那些視圖模型通常通過構造函數實例化。我們不需要初始化成員,我們可能不需要重新定義/覆蓋無參數的構造函數,並且我們不需要那裏的繼承特性。

那麼,爲什麼我們不使用結構類型爲我們的視圖模型而不是類。它會提高性能。

回答

13

你把「它會提高性能」作爲一個給定的,但你真的確定嗎?結構比非常具體的的情況下表現更好。爲簡單起見,我正在推廣,但情景主要是:

  • 它們是不可變的。
  • 它們很小,例如通常不超過3-4個領域。
  • 您在極短時間內產生了(通常爲數百萬或更多)。
  • 你正在與他們在緊密的循環。
  • 它們遍歷的代碼路徑針對這些特定結構進行了優化,並且不執行裝箱/拆箱操作。

還有其他的,但那只是我的頭頂。即使如此,我們也在談論性能收益微乎其微。如在微秒微不足道。

即使您可以保證您的視圖模型是不可變的和微小的,但其他條件不成立。假設每個請求使用一個視圖模型,您的Web服務器不會每秒處理數百萬個請求。此外,MVC框架在緊密循環中無法使用這些框架,並且不包含爲此特定結構優化的代碼路徑。 MVC框架將最終對您的值類型執行大量的裝箱/拆箱操作。

底線 - 不要微觀優化或過度設計您的解決方案。類很好。而在進行優化時,總是衡量,以確保您將時間投入到有價值的事業中。當有更大的魚要炒時不要瑣碎。

+0

謝謝你的時間和徹底的解釋,列維。你的想法使我的一天。 –

+2

此外,一個結構通過堆棧傳遞(更多信息傳遞),並通過一個指針通過堆傳遞類(更少的信息傳遞)。我知道這是一個古老的問題,但認爲新訪客應該知道更多。 –

0

使用一個類。一些視圖模型需要構造函數,轉換器和更多的功能,爲什麼要限制結構? (比如如果你有EF4物體,你需要使POCO離開它們......)