一、MVC(Model栽连,View侨舆,Controller)
MVC模式是最經(jīng)典開發(fā)模式之一秒紧,它分為三個部分Model,View熔恢,Controller臭笆。
模型層(Model):數(shù)據(jù)模型秤掌,是對客觀事物的抽象鹰霍。
視圖層(View):用戶界面,是model的具體表現(xiàn)形式孟岛。
控制器層(Controller):業(yè)務邏輯督勺,主要負責與model和view打交道。
適用場景:適用于較小次询,功能較少瓷叫,業(yè)務邏輯較少的項目。
MVC的優(yōu)缺點
優(yōu)點:
1摹菠、業(yè)務邏輯全部分離到Controller中,模塊化程度高世落。
2糟需、觀察者模式可以做到多視圖同時更新。
缺點:
1洲押、Model和View之間是直接進行交互,就必然會導致Model和View之間的耦合体箕。
2挑童、所有邏輯都寫在Controller層,導致Controller層特別臃腫站叼。
二、MVP(Model投储,View,Presenter)
MVC架構方式的變種玛荞,使用Presenter來代替Controller勋眯,而且改變了數(shù)據(jù)的流向,View和Model之間不再直接進行交互凡恍,而是全部通過Presenter來進行怔球。MVP模式就是把MVC模式中的Controller換成了Presenter。
在MVP當中闽巩,Presenter可以同時操作View和Model担汤,View需要提供一組對界面操作的接口給Presenter進行調用;Model仍然通過事件廣播自己的變更隅很,但由Presenter監(jiān)聽而不是View率碾。View 與 Model 不發(fā)生聯(lián)系,都通過 Presenter 傳遞所宰。
適用場景:視圖界面不是很多的項目中。
MVP的優(yōu)缺點
優(yōu)點:
1婴谱、模型與視圖完全分離躯泰,我們可以修改視圖而不影響模型。
2麦向、可以更高效地使用模型,因為所有的交互都發(fā)生在一個地方——Presenter內部景描。
3、我們可以將一個Presenter用于多個視圖向族,而不需要改變Presenter的邏輯棠绘。這個特性非常的有用,因為視圖的變化總是比模型的變化頻繁氧苍。
4、如果我們把邏輯放在Presenter中紊撕,那么我們就可以脫離用戶接口來測試這些邏輯(單元測試)赡突。
缺點:Presenter作為橋梁協(xié)調View和Model,就會導致Presenter變得很臃腫惭缰,維護比較困難。
三络凿、MVVM(Model昂羡,View,ViewModel)
MVVM其實是對MVP的一種改良到千,他將Presenter替換成了ViewModel赴穗,并通過雙向的數(shù)據(jù)綁定來實現(xiàn)視圖和數(shù)據(jù)的交互。
適用場景:適用于界面展示的數(shù)據(jù)較多的項目了赵。
MVVM的優(yōu)缺點
優(yōu)點:
1甸赃、低耦合。視圖(View)可以獨立于Model變化和修改,一個ViewModel可以綁定到不同的"View"上裁替,當View變化的時候Model可以不變貌笨,當Model變化的時候View也可以不變。
2昌腰、可重用性膀跌。你可以把一些視圖邏輯放在一個ViewModel里面,讓很多view重用這段視圖邏輯捅伤。
3、獨立開發(fā)困介。開發(fā)人員可以專注于業(yè)務邏輯和數(shù)據(jù)的開發(fā)(ViewModel)蘸际,設計人員可以專注于頁面設計徒扶,使用Expression Blend可以很容易設計界面并生成xml代碼。
4姜骡、可測試圈澈。界面素來是比較難于測試的,而現(xiàn)在測試可以針對ViewModel來寫康栈。
5、提高可維護性登舞。解決了MVP大量的手動View和Model同步的問題悬荣,提供雙向綁定機制。提高了代碼的可維護性氯迂。
缺點:
1言缤、過于簡單的圖形界面不適用酵熙。
2、對于大型的圖形應用程序哮独,視圖狀態(tài)較多察藐,ViewModel的構建和維護的成本都會比較高。
3悴务、數(shù)據(jù)綁定的聲明是指令式地寫在View的模版當中的譬猫,這些內容是沒辦法去打斷點debug的。
4染服、目前這種架構方式的實現(xiàn)方式比較不完善規(guī)范,常見的就是DataBinding框架挖垛。