我一直在研究asp.net MVC項目結構的一個新項目,並有一個問題讓我感到困惑。模型和視圖模型有什麼區別?我在說視圖模型包含表單屬性中的模型時是否正確?模型和視圖模型之間的差異
回答
我有一個博客,我想顯示在一個視圖中的最新的帖子,最新評論,日誌分類名單。我該怎麼做?我可以強烈地將我的觀點輸入到任何一個模型中?有查看模型。
我創建了一個名爲BlogViewModel
的視圖模型,其中包含最新的帖子,最新的評論和其他東西作爲屬性,我綁定我的視圖與這個模型。 posts
,comments
..都是域模型而BlogViewModel
是查看模型我專門爲視圖創建的。
明天我會在移動版本中顯示我的博客,那時我可能會創建一個只包含較少屬性的簡單視圖模型。最後,視圖模型是用於視圖和大部分時間,它們充當真實域模型的包裝器!
ViewModel
是從調整到特定視圖的業務域圖層中的模型的版本。
它只有與視圖相關的屬性,不應該有方法(除了簡單的像ToString()
)。
ViewModel
只是一個「數據容器」。
模型僅僅是應用程序中對象的表示形式。但是,您應該瞭解幾種不同類型的模型。
域模型:如果您使用的是ORM(Linq2SQL,EF),則表示應用程序中的域對象,如SQL表。
查看模型:這表示您希望最終用戶查看/編輯/等的對象。視圖模型可以包含來自多個域模型或不包含域模型的屬性,並且通常會排除最終用戶不應該使用的屬性。視圖模型應只包含爲特定請求顯示適當數據給最終用戶所需的元素。
Here is some Jimmy Bogard爲您查看模型及其使用。
模型通常與數據存儲(數據庫,服務等)的關係更密切,模型與這些模型非常相似。
另一方面,ViewModel與您的數據呈現給用戶的方式密切相關。它通常是您的模型的扁平版本,非規範化等等。它可以是多個模型的聚合。
對於典型的Person
的對象,你的模型可能包含的屬性如下所示:
- 姓
- 名字
- 出生日期
然而,在您的視圖模型,你可以選擇代表它不同,並有更多像:
- 全名
- 年齡
我會補充說一個Model對象應該代表對象的語義/概念結構,它的內在/自然屬性和行爲,而不是它實際存儲的方式。存儲受制於實現細節,這不是實際的對象特性。 – heltonbiker
@heltonbiker,這是一個偉大的觀點。我認爲有許多模型,ViewModel,業務邏輯模型,數據存儲模型等等。我們經常掙扎,因爲我們不接受每個人的差異,而是關注他們的相似之處。我很快就可以寫一篇博客文章;) –
在我看來,模型是最重要的開發活動中最被忽視的部分(至少在我知道的大多數地方......) – heltonbiker
- 1. 視圖模型和模型和視圖之間的關係
- 2. PHP併發模型和Node.js併發模型之間的差異
- 3. WPF中模型視圖和視圖模型之間的關係
- 4. 視圖模型定義的差異
- 5. 視圖和模型之間的關係
- 6. 視圖模型和模型之間的MVVM層?
- 7. 兩個模型視圖的設計和模型之間
- 8. 檢測行差異(視圖或模型)?
- 9. 模型和外部模型的調用值之間的性能差異
- 10. 'typename`參數化模板和積分類型之間的差異
- 11. MVC - 模型,對象和庫之間的差異
- 12. Silverlight - 視圖模型之間的通信
- 13. 視圖模型之間的Silverlight導航
- 14. MVC模式中的模型和視圖之間的鏈接
- 15. 如何在視圖中傳遞差異類型的模型?
- 16. 模擬器和Eclipse SDK視圖佈局之間的Android差異
- 17. WPF MVVM:INPC和調解視圖模型和模型之間的通信
- 18. 在視圖模型之間切換
- 19. Silverlight通信/命令/事件?視圖和視圖模型之間?
- 20. 在視圖和視圖模型之間通信非UI數據
- 21. 在視圖和視圖模型之間跳轉
- 22. 模型和視圖
- 23. AutoMapper:域模型和視圖模型之間的雙向深度映射
- 24. 驗證模型和視圖模型mvc
- 25. 視圖模型和或域模型?
- 26. MVVM視圖模型和模型問題
- 27. 模型差異中間層xpand
- 28. EF4模型和MVC模型和視圖模型...建模或不模型?
- 29. api和模型招搖的差異
- 30. Laravel中的模型和播種差異
你可能已經google了。 SO本身有很多問題註冊。這個主題。 – VJAI
This SO Question- http://stackoverflow.com/questions/4061440/asp-net-mvc-model-vs-viewmodel,完美地回答了這個問題。 – Bibhu