簡(jiǎn)介
MVC 全稱是 Model - View - Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫。MVC 是一種框架模式而非設(shè)計(jì)模式,GOF 把 MVC 看作是 3 種設(shè)計(jì)模式:觀察者模式、策略模式與組合模式的合體,而核心是觀察者模式。簡(jiǎn)而言之,框架是大智慧,用來(lái)對(duì)軟件設(shè)計(jì)進(jìn)行分工;設(shè)計(jì)模式是小技巧,對(duì)具體問(wèn)題提出解決方案,以提高代碼復(fù)用率,降低耦合度。
設(shè)計(jì)圖

mvc.png
優(yōu)點(diǎn)
由于 MVC 很好的分離了視圖層和業(yè)務(wù)層,所以它具有以下優(yōu)點(diǎn):
- 耦合性低
- 開發(fā)速度快
- 可維護(hù)性高
- 易于理解
缺點(diǎn)
- 由于 MVC 的設(shè)計(jì)思想是從 Model 出發(fā),而沒(méi)有考慮到 View 端的復(fù)雜性,這樣導(dǎo)致的問(wèn)題是 Model 難以符合復(fù)雜多變的 View 端變化。導(dǎo)致 Model 的作用很小,而很多 View 層的職責(zé)也轉(zhuǎn)移到了 Controller 層。Controller 變得臃腫不堪。
- 測(cè)試?yán)щy
關(guān)系

gx.png.png
- 視圖層(View)
對(duì)應(yīng)于 xml 布局文件和 java 代碼動(dòng)態(tài) view 部分 - 控制層(Controller)
MVC 中 Android 的控制層是由 Activity 來(lái)承擔(dān)的,Activity 本來(lái)主要是作為初始化頁(yè)面,展示數(shù)據(jù)的操作,但是因?yàn)?XML 視圖功能太弱,所以 Activity 既要負(fù)責(zé)視圖的顯示又要加入控制邏輯,承擔(dān)的功能過(guò)多。 - 模型層(Model)
針對(duì)業(yè)務(wù)模型,建立的數(shù)據(jù)結(jié)構(gòu)和相關(guān)的類,它主要負(fù)責(zé)網(wǎng)絡(luò)請(qǐng)求,數(shù)據(jù)庫(kù)處理,I/O 的操作。
小結(jié)
- 具有一定的分層,Model 徹底解耦,Controller 和 View 并沒(méi)有解耦;
- 層與層之間的交互盡量使用回調(diào)或者去使用消息機(jī)制去完成,盡量避免直接持有;
- Controller 和 View 在 Android 中無(wú)法做到徹底分離,但在代碼邏輯層面一定要分清;
業(yè)務(wù)邏輯被放置在 Model 層,能夠更好的復(fù)用和修改增加業(yè)務(wù)。