對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、MVP和MVVM的區別MVCMVPMVVM
- MVP 與 MVVM 優缺點總結MVPMVVM
- MVC——MVP——MVVMMVCMVPMVVM
- MVC,MVP,MVVMMVCMVPMVVM
- MVC,MVP和MVVM之間的區別MVCMVPMVVM
- 對於iOS效能優化的一點看法iOS優化
- MVC、MVP和MVVM以及MVA比較MVCMVPMVVM
- MVC,MVP 和 MVVM 模式如何選擇?MVCMVPMVVM模式
- 對於Lumen和Laravel的看法Laravel
- MVC、MVP、MVVM,談談我對Android應用架構的理解MVCMVPMVVMAndroid應用架構
- Android 架構設計:MVC、MVP、MVVM和元件化Android架構MVCMVPMVVM元件化
- [譯]iOS架構模式——解密MVC、MVP、MVVM和VIPERiOS架構模式解密MVCMVPMVVM
- 我對部落格的理解和看法
- 淺談MVC/MVP/MVVM模式(概述)MVCMVPMVVM模式
- 理解並運用MVC,MVP,MVVMMVCMVPMVVM
- 關於噪聲標籤的一點看法和見解
- 不要再問我MVC、MVP、MVVM了MVCMVPMVVM
- 益普索:全球對AI的看法和期望AI
- ArrayList的幾點看法
- 對MVP、Flux和RxAndroid框架的理解和選擇MVPUXAndroid框架
- MVC、MVP、MVVM,我到底該怎麼選?MVCMVPMVVM
- 我對技術潮流的一些看法
- 我對自己公司產品的看法與一點微不足道的建議
- iOS MVC、MVVM、MVP架構模式淺淺析iOSMVCMVVMMVP架構模式
- iOS架構淺談從 MVC、MVP 到 MVVMiOS架構MVCMVPMVVM
- 一個Python開發者對鴻蒙的看法Python鴻蒙
- 聊一聊我對測試開發的看法
- 關於Jpa和Mybatis的一些看法MyBatis
- 對於MVVM的理解MVVM
- 從一個罕見案例聊聊我對社群的看法
- 說說對測試培訓的一些看法
- MVC、MVCS、MVVM、MVP、VIPER等這麼多架構模式哪一個好呢?MVCMVVMMVP架構模式
- 我對組隊學習的看法
- 對Rust的不好看法 - chrisdoneRust
- iOS架構設計:揭祕MVC, MVP, MVVM以及VIPERiOS架構MVCMVPMVVM
- 對歸檔模式下CLEAR 未歸檔日誌後恢復資料庫的一點看法模式資料庫
- 你對於留存資料的看法可能該變一變了
- 談談我對996.icu的看法996