一、MVC(Model,View,Controller)
MVC模式是最經典開發模式之一,它分為三個部分Model,View,Controller。
模型層(Model):數據模型,是對客觀事物的抽象。
視圖層(View):用戶界面,是model的具體表現形式。
控制器層(Controller):業務邏輯,主要負責與model和view打交道。
適用場景:適用于較小,功能較少,業務邏輯較少的項目。
MVC的優缺點
優點:
1、業務邏輯全部分離到Controller中,模塊化程度高。
2、觀察者模式可以做到多視圖同時更新。
缺點:
1、Model和View之間是直接進行交互,就必然會導致Model和View之間的耦合。
2、所有邏輯都寫在Controller層,導致Controller層特別臃腫。
二、MVP(Model,View,Presenter)
MVC架構方式的變種,使用Presenter來代替Controller,而且改變了數據的流向,View和Model之間不再直接進行交互,而是全部通過Presenter來進行。MVP模式就是把MVC模式中的Controller換成了Presenter。
在MVP當中,Presenter可以同時操作View和Model,View需要提供一組對界面操作的接口給Presenter進行調用;Model仍然通過事件廣播自己的變更,但由Presenter監聽而不是View。View 與 Model 不發生聯系,都通過 Presenter 傳遞。
適用場景:視圖界面不是很多的項目中。
MVP的優缺點
優點:
1、模型與視圖完全分離,我們可以修改視圖而不影響模型。
2、可以更高效地使用模型,因為所有的交互都發生在一個地方——Presenter內部。
3、我們可以將一個Presenter用于多個視圖,而不需要改變Presenter的邏輯。這個特性非常的有用,因為視圖的變化總是比模型的變化頻繁。
4、如果我們把邏輯放在Presenter中,那么我們就可以脫離用戶接口來測試這些邏輯(單元測試)。
缺點:Presenter作為橋梁協調View和Model,就會導致Presenter變得很臃腫,維護比較困難。
三、MVVM(Model,View,ViewModel)
MVVM其實是對MVP的一種改良,他將Presenter替換成了ViewModel,并通過雙向的數據綁定來實現視圖和數據的交互。
適用場景:適用于界面展示的數據較多的項目。
MVVM的優缺點
優點:
1、低耦合。視圖(View)可以獨立于Model變化和修改,一個ViewModel可以綁定到不同的"View"上,當View變化的時候Model可以不變,當Model變化的時候View也可以不變。
2、可重用性。你可以把一些視圖邏輯放在一個ViewModel里面,讓很多view重用這段視圖邏輯。
3、獨立開發。開發人員可以專注于業務邏輯和數據的開發(ViewModel),設計人員可以專注于頁面設計,使用Expression Blend可以很容易設計界面并生成xml代碼。
4、可測試。界面素來是比較難于測試的,而現在測試可以針對ViewModel來寫。
5、提高可維護性。解決了MVP大量的手動View和Model同步的問題,提供雙向綁定機制。提高了代碼的可維護性。
缺點:
1、過于簡單的圖形界面不適用。
2、對于大型的圖形應用程序,視圖狀態較多,ViewModel的構建和維護的成本都會比較高。
3、數據綁定的聲明是指令式地寫在View的模版當中的,這些內容是沒辦法去打斷點debug的。
4、目前這種架構方式的實現方式比較不完善規范,常見的就是DataBinding框架。