新聞中心
MVC全稱(chēng)是Model-View-Controller 也就是模型–視圖–控制器,是在1970年的時(shí)候提出由TrygveReenskaug在Smalltalk-80系統(tǒng)上***提出的。

成都創(chuàng)新互聯(lián)公司制作網(wǎng)站網(wǎng)頁(yè)找三站合一網(wǎng)站制作公司,專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì),成都做網(wǎng)站、網(wǎng)站制作,網(wǎng)站設(shè)計(jì),企業(yè)網(wǎng)站搭建,網(wǎng)站開(kāi)發(fā),建網(wǎng)站業(yè)務(wù),680元做網(wǎng)站,已為上千家服務(wù),成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)將一如既往的為我們的客戶提供最優(yōu)質(zhì)的網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣服務(wù)!
SmallTalk在百度百科的解釋是這樣:
Smalltalk被公認(rèn)為歷史上第二個(gè)面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言和***個(gè)真正的集成開(kāi)發(fā)環(huán)境 (IDE)。
來(lái)張圖說(shuō)明一下MVC的工作模式吧!
圖中紅色小框框就是MVC的工作模式
- 從圖中可以看出用戶向View發(fā)送指令,再有View直接要求Modle改變狀態(tài)。
- 用戶也可以直接向Controller發(fā)送指令,再由Controller發(fā)送給Model,在通過(guò)Model去改變View的狀態(tài)。
- 所以MVC框架模式View和Model之間的聯(lián)系還是相當(dāng)緊密的,耦合度還是很高,后期維護(hù)改動(dòng)View需要將Model中的內(nèi)容也要改動(dòng)。
MVC是一種框架模式而非設(shè)計(jì)模式
其優(yōu)點(diǎn)是:
- 理解起來(lái)比較容易,技術(shù)含量并不高,對(duì)開(kāi)發(fā)和維護(hù)來(lái)說(shuō)易于維護(hù)和修改
- 耦合度不高,表現(xiàn)層與業(yè)務(wù)層分離,各司其職。
其缺點(diǎn)是:
- 它定義不是很明確,完全理解MVC模式并不容易。
- 使用MVC需要精心策劃,因?yàn)槟闼膬?nèi)部原理比較復(fù)雜
- 一些小的項(xiàng)目采用MVC框架反而會(huì)更加復(fù)雜
MVC的Android偽代碼實(shí)現(xiàn)
以下圖片中代碼與數(shù)據(jù)不匹配,只是為了方便理解MVC在代碼中如何寫(xiě),需要看實(shí)例的可以去網(wǎng)上了解,我在這里就偷懶了:)
- 首先你需要一個(gè)View視圖,也就是XML布局。
- 然后你還需要一個(gè)Model
也就是數(shù)據(jù),可以是數(shù)據(jù)庫(kù)中的內(nèi)容,也可以是在代碼中寫(xiě)的List集合。
- ***需要一個(gè)Controller,也就是Activity或者Fragment
通過(guò)在Controller中對(duì)用戶在View中傳遞過(guò)來(lái)的操作,進(jìn)行訪問(wèn)model中的數(shù)據(jù),然后改變View中的狀態(tài)。
MVP是MVC的一個(gè)演化版本,全稱(chēng)是Model-View-Presenter。
MVP的出現(xiàn)主要就是解決MVC中的View和Model的耦合性高的的問(wèn)題,同時(shí)又帶來(lái)了很好的擴(kuò)展性。
MVP模式的三個(gè)角色的作用:
- Presenter-中介
主演溝通View和Model的橋梁,他從Model獲取數(shù)據(jù)后返回給View層,是的View層和Model層之間沒(méi)有耦合,從而獎(jiǎng)業(yè)務(wù)邏輯從View層抽離。
- Model-房主
Model主要提供數(shù)據(jù)的存取功能,Presenter需要通過(guò)Model層存儲(chǔ)、獲取數(shù)據(jù),Model層就像是一個(gè)倉(cāng)庫(kù)。
- View-用戶
View通常是指Activity、Fragment或者某個(gè)View控件。它含有一個(gè)Presenter成員變量,同時(shí)它需要實(shí)現(xiàn)一個(gè)邏輯接口,獎(jiǎng)View上的操作轉(zhuǎn)交割Presenter進(jìn)行實(shí)現(xiàn),***Presenter調(diào)用View邏輯接口將結(jié)果返回給View元素。
來(lái)張圖說(shuō)明一下MVP的工作模式吧
從圖中我們可以看出MVP和MVC之間的額***區(qū)別:
- VIew和Model之間徹底的解耦
- MVP是面向接口編程,也就是說(shuō)用戶不必知道我是具體如何實(shí)現(xiàn)額,用戶只要知道有這個(gè)功能,直接調(diào)用即可。
MVP的Android偽代碼實(shí)現(xiàn)
以下圖片中代碼與數(shù)據(jù)不匹配,只是為了方便理解MVC在代碼中如何寫(xiě),需要看實(shí)例的可以去網(wǎng)上了解,我在這里就偷懶了:)
- 首先需要一個(gè)Presenter,作為View和Model的中間人
- 然后你還需要一個(gè)View以及ViewImpl接口
- ***你還需要Model一個(gè)ModelImpl接口
為什么說(shuō)不必糾結(jié)是MVC還是MVP呢?
MVC和MVP的最終目的就是要數(shù)據(jù)和UI分離,互相不影響。那么如何能不必糾結(jié)而做到呢??你聽(tīng)說(shuō)過(guò)面向?qū)ο髥?聽(tīng)過(guò)再聽(tīng)聽(tīng)我的理解~
- 面向?qū)ο?/li>
封裝、多態(tài),繼承。老師好像也都是這么教的,那么到底說(shuō)明是多態(tài)封裝繼承呢?
- 封裝
封裝就是將用戶不想看到的東西封裝起來(lái),可以用到面向?qū)ο笾械?Private。
屬性,將用戶不想看到的內(nèi)容寫(xiě)在這里面。比如收音機(jī)上的播放功能,用戶不用知道收音機(jī)如何播放,它只需要知道摁下這個(gè)鍵能播放即可。
- 多態(tài)
多態(tài)就是一個(gè)對(duì)象的多種表現(xiàn)形態(tài),主要表現(xiàn)為:行為多態(tài)和狀態(tài)多態(tài)。
行為多態(tài)就好比一個(gè)父親有多個(gè)孩子,每個(gè)孩子都不一樣,但是都是同一個(gè)父親;狀態(tài)多態(tài)就好比每個(gè)孩子在一天中有好多個(gè)狀態(tài)變現(xiàn),有吃飯,學(xué)習(xí),睡覺(jué)。
- 繼承?不!我想說(shuō)的是對(duì)象!
我的一個(gè)朋友告訴我繼承其實(shí)是對(duì)面向?qū)ο蟮?**誤解。繼承我們可以理解成一個(gè)對(duì)象他有多個(gè)小對(duì)象組成;比如人這個(gè)對(duì)象是由手腳,腦袋…等其它小對(duì)象組成。因此繼承我們可以不去記住,我們只要對(duì)每個(gè)對(duì)象有深刻的認(rèn)識(shí)即可把對(duì)象描述清楚!
那么MVC、MVP與面向?qū)ο笥惺裁搓P(guān)系呢??
首先MVC和MVP都是要求數(shù)據(jù)和UI之間互不影響,那么面向?qū)ο蟛痪褪菃??
- 面向?qū)ο骎iew?
對(duì)象也就是我們說(shuō)的用戶也就是MC或者M(jìn)VP中View,用戶需要什么我們就展示給其什么,不需要的我們將其封裝起來(lái)提供一個(gè)方法給你調(diào)用即可,這是不是和MVC或者M(jìn)VP中很像!
- 面向?qū)ο驧odel?
同時(shí)面向?qū)ο笠彩切枰獙?duì)象的行為細(xì)分,比如人可以跑,可以游泳…這是不是和MVC中的Model一樣,需要處理用戶不同的操作。
- 面向?qū)ο驝ontroller?
***面向?qū)ο笠彩切枰粋€(gè)狀態(tài)去控制的,比如人的大腦。通過(guò)大腦去協(xié)調(diào)手和腳的平衡。
新聞標(biāo)題:不必糾結(jié)MVC還是MVP了,聽(tīng)我說(shuō)兩句~
網(wǎng)站地址:http://fisionsoft.com.cn/article/ccoisci.html


咨詢(xún)
建站咨詢(xún)
