對MVP和MVVM的一點看法

iDotNetSpace發表於2010-03-24
轉: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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章