我基於福勒PoEAA這個問題。鑑於您對本文的熟悉,是不是在ASP.NET MVC中使用的ViewModel與DTO相同?爲什麼或者爲什麼不?謝謝。視圖模型和數據傳輸對象之間有什麼區別?
回答
他們服務於類似的目的(爲應用程序的另一層封裝數據),但他們以不同的方式做了不同的原因。
一個DTO的目的是減少的應用層之間的呼叫的數量,尤其是當這些呼叫是昂貴的(例如,分佈式系統)。 DTO幾乎總是可以序列化的,幾乎從不包含任何行爲。
例如,您正在開發電子商務網站。
CreateCustomer
和AddCustomerAddress
是數據庫級別的獨立操作,但是出於性能原因,您可能想要將其數據彙總到NewCustomerWithAddressDto
,以便您的客戶端只需進行一次往返服務器的操作,而無需關心服務器可能會對數據包做很多不同的事情。術語「ViewModel」在不同風格的MV *中意味着稍微不同的事物,但其目的主要是分離關注點。您的模型經常針對演示以外的其他目的進行優化,ViewModel負責將視圖與模型的實現細節分離。此外,大多數MV *模式建議儘可能使視圖爲「啞」,因此ViewModel有時會對呈現邏輯負責。
例如,在同一個電子商務應用程序中,您的
CustomerModel
在您的「新客戶」視圖中顯示時是錯誤的「形狀」。對於初學者,您的視圖有兩個表單字段供您的用戶輸入並確認其密碼,並且您的CustomerModel
根本不包含密碼字段!您的NewCustomerViewModel
將包含這些字段,並可能根據您的MV *風格,負責某些表示邏輯(例如顯示/隱藏部分視圖)和基本驗證(例如確保兩個密碼字段匹配)。
的目的是不同的:
- DTO的用於傳輸數據
- 的ViewModels用於數據顯示給最終用戶。
因此通常ViewModel包含演示數據,巫婆在很多情況下類似於DTO中的內容,但有一些差異。想想枚舉,本地化,貨幣,日期格式的表示形式......。這是因爲在你看來,通常應該沒有邏輯。
的DTO在MVVM和MVP通常是非常愚蠢的對象和基本上只是一堆屬性getter和setter方法的。 ViewModels另一方面可能會有一些行爲。
具有DTOs的實際積極影響允許更容易的序列化。如果你有一個相當複雜的對象,比如C#,你會經常發現自己不得不有選擇性地關閉你不想序列化的東西。這可能會變得相當難看,DTO簡化了這個過程。
+1,關鍵的區別在於DTOs是愚蠢的(因此可以簡單地序列化,這是他們的* job *),而ViewModels可以包含否則會進入你的視圖(這是*他們*作業)的邏輯。 – 2009-09-17 08:22:41
@Igor Zevaka你能解釋一下你的行爲是什麼意思嗎? – 2016-03-11 07:53:29
視圖模型和數據傳輸對象有相似之處和不同之處。
類似的:在一個記錄 傳輸數據(對象實例,或許串行化)到接收器,是否一個視圖或服務
差異: 視圖模型旨在被髮送到一個瀏覽,在那裏它將顯示格式。 視圖模型也將數據發送回控制器。 DTO通常不適用於演示文稿。它旨在發送原始數據。
- 1. 數據模型和對象模型有什麼區別?
- 2. 實體,業務對象,數據傳輸對象和業務模型對象有什麼區別?
- 3. 對象,*和沒有類型之間的區別是什麼?
- 4. 價值對象模式和數據傳輸模式之間的區別
- 5. 領域模型和概念模型之間有什麼區別
- 6. JavaScript自定義數據類型和對象之間有什麼區別?
- 7. _EPROCESS對象和_KPROCESS對象之間有什麼區別
- 8. Singleton對象和sessionfactory單例對象之間有什麼區別
- 9. Ember.js:對象模型和模型有什麼區別?
- 10. 意圖額外和意圖數據之間有什麼區別?
- 11. 在Java中的DTO(數據傳輸對象)和類對象之間的區別?
- 12. 類圖與對象圖之間有什麼區別?
- 13. 抽象數據類型和對象之間的區別
- 14. 在Backbone.js中,通過在選項中傳遞模型來初始化視圖和將模型對象作爲參數傳遞之間有什麼區別?
- 15. 原型對象和構造函數上的成員之間有什麼區別?
- 16. 概念數據模型和ER圖之間的區別是什麼?
- 17. 對象和字符串對象之間的區別是什麼
- 18. cakephp - 模型和行爲之間有什麼區別?
- 19. 數據沿襲和數據來源之間有什麼區別?
- 20. ResultSet和對象之間有什麼區別?
- 21. 實例和對象之間有什麼區別?
- 22. C#中的對象和類之間有什麼區別?
- 23. Ref對象的getPeeledObjectId()和getObjectId()之間有什麼區別?
- 24. JSON和JavaScript對象之間有什麼區別?
- 25. Perl中的對象和類之間有什麼區別?
- 26. 「支持像素數據」和位圖對象有什麼區別?
- 27. 視圖和流之間有什麼區別?
- 28. 方法迭代器和視圖之間有什麼區別?
- 29. 存儲過程和視圖之間有什麼區別?
- 30. 方法「插入子視圖」和「presentModalViewController」之間有什麼區別?
這是一個很好的解釋!到目前爲止,我所見過的唯一視圖模型只有getter和setter,所以我就是這樣:哇,這很像DTO。感謝您爲我清理這個。 – mkelley33 2009-09-16 11:48:55