對MVP和MVVM的一點看法
轉:http://www.cnblogs.com/bbp/archive/2009/07/21/1516466.html
基於PresentationModel的MVP和基於ViewModel的MVVM形式上一個主要區別在於前者的PresentationModel裡一般要注入一個IView例項,當然目的是解耦,但也給人留下一個餘地,也就是說在沒有更好辦法做binding的時候,可以呼叫IView直接操作介面來做事,當然是比較靈活的,而且基於介面依賴的UI與業務邏輯的分離也是不錯的,但這需要維護View和PresentationModel之間的雙向引用,而且程式碼(尤其是View的程式碼)看起來就不那麼簡潔了,因為即使是依賴於介面,也是依賴,總不如沒有依賴要好;而後者(MVVM)的一個主要特徵是:完全通過binding機制,由ViewModel指示UI如何做變更,同時使用者與ViewModel的互動通過Command來實現,這樣只需要View指導ViewModel即可,而ViewModel完全不必關心View暴露出什麼樣的介面和操作,它只需要提供屬性(要繫結的資料和Command)並實現INotifyPropertyChanged即可,少了一個方向的依賴,程式碼自然更簡潔清晰。
當然,作為一種通用的表示層模式,MVVM適用於各類客戶端,比如Web, WinForm等等,但MVVM只有在WPF或Silverlight這種高階的UI技術支援下才能充分發揮它的優點。
Binding並不是非常符合直覺的一種手段,即使在winform裡,有BindingSource做橋樑,binding顯得很直觀,但也不是誰都用得習慣的,而WPF裡的binding配合DataContext、Converter、DataTemplate,、Style、以及各自對應的trigger,幾乎無所不能,而且十分優雅,只是門檻較高,初學者不易充分理解(一個看法是:WPF這種markup方式的UI技術,很難“完全”照搬其他UI技術的經驗,無論是winform,web,甚至同種型別的flex,想要充分利用WPF的好處,學習和實踐的過程是必不可少的,而且學習曲線比較陡峭。並不是因為它有多難,而是因為有很多觀念和習慣都需要轉變,而且WPF所涉及到的技術方面太多太雜,但學習所花時間是值得的,未來的趨勢在RIA,主流RIA開發技術大同小異,早晚要學,不如早學,學一個WPF還賺一個Silverlight。經常看到有人說WPF很簡單,一學就會,看看程式碼才知道原來就是拿WPF當WinForm用,而且不倫不類,暴殄天物哦!其實會不會用WPF跟你原本是不是高手無關。)。另一方面,Command機制也在某種程度上避免了基於事件機制的限制,尤其是配合DelegateCommand和CompositeCommand(見Prism),可以有效地、優雅地在UI與controller之間解耦。 所以,如果想充分利用MVVM的好處,就要忍住不用IView,嘗試完全用Binding和Command解決問題,這樣憋一段時間,對WPF和Silverlight的理解自然就會上一個臺階, 正如書讀百遍其義自見的道理。看到原本繁複傳統的程式碼變得優雅現代,真讓人心情舒暢。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-630291/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 談談對MVC、MVP和MVVM的理解?MVCMVPMVVM
- MVC和MVVM,MVPMVCMVVMMVP
- android MVC && MVP && MVVM分析和對比AndroidMVCMVPMVVM
- MVC、MVP和MVVM的區別MVCMVPMVVM
- MVC,MVP 和 MVVM 的圖示MVCMVPMVVM
- MVC MVP 和 MVVM 的圖示MVCMVPMVVM
- 對 Guice Interceptor 的一點 自己 的看法GUI
- MVP 與 MVVM 優缺點總結MVPMVVM
- 教你認清MVC,MVP和MVVMMVCMVPMVVM
- MVC,MVP,MVVMMVCMVPMVVM
- MVC——MVP——MVVMMVCMVPMVVM
- MVC、MVP、MVVMMVCMVPMVVM
- MVC,MVP和MVVM之間的區別MVCMVPMVVM
- 對於iOS效能優化的一點看法iOS優化
- MVC,MVP 和 MVVM 模式如何選擇?MVCMVPMVVM模式
- MVC、MVP和MVVM以及MVA比較MVCMVPMVVM
- 淺談框架模式 MVC、MVP 和 MVVM框架模式MVCMVPMVVM
- 我對專案管理的一點看法1(轉)專案管理
- 我對專案管理的一點看法 2(轉)專案管理
- 雜談: MVC/MVP/MVVMMVCMVPMVVM
- 我對大家尋求oracle培訓的一點看法Oracle
- 請各位對domino和websphere整合發表點看法Web
- 對於Lumen和Laravel的看法Laravel
- [譯]iOS架構模式——解密MVC、MVP、MVVM和VIPERiOS架構模式解密MVCMVPMVVM
- 就Tim Bray對JSON和XML的比較的幾點看法JSONXML
- 我對部落格的理解和看法
- MVC、MVP、MVVM,談談我對Android應用架構的理解MVCMVPMVVMAndroid應用架構
- 淺談Android中的mvc,mvp,mvvmAndroidMVCMVPMVVM
- 淺談MVC/MVP/MVVM模式(概述)MVCMVPMVVM模式
- 深入分析MVC、MVP、MVVM、VIPERMVCMVPMVVM
- MVC vs. MVP vs. MVVMMVCMVPMVVM
- 選擇恐懼症的福音!教你認清MVC,MVP和MVVMMVCMVPMVVM
- Android 架構設計:MVC、MVP、MVVM和元件化Android架構MVCMVPMVVM元件化
- 我對軟體架構的一些看法和思考架構
- 關於SAVEPOINT和自定義異常使用的一點看法
- 轉享:表現層架構模式比較:MVP(SC),MVP(PV),PM,MVVM 和 MVC架構模式MVPMVVMMVC
- 架構設計的歷史·MVC·MVP·MVVM架構MVCMVPMVVM
- 不要再問我MVC、MVP、MVVM了MVCMVPMVVM