1喂柒、什么是 MVP模式?
? ? 同 MVC一樣,是一種編程模式和思想灾杰,是一種架構(gòu)蚊丐。
2、MVP和MVC艳吠。
? ? M:Model吠撮,代表業(yè)務(wù)數(shù)據(jù)。
? ? V:View讲竿,代表視圖
? ? C:Controller泥兰,代表控制器
用戶通過界面操作 View,相應(yīng)的動(dòng)作傳遞給 Controller層题禀,而 C層根據(jù)業(yè)務(wù)邏輯操作 Model層鞋诗,而最終 M層變化同步更新到視圖層。
3迈嘹、Android中的 MVC
? ? Activity對(duì)應(yīng)的視圖界面就是 View層削彬;
? ? 數(shù)據(jù)庫文件,Sharedprefrence秀仲,內(nèi)存緩沖融痛,磁盤緩沖等數(shù)據(jù)內(nèi)容對(duì)應(yīng) Model層。
? ? C層基本由 Activity層面進(jìn)行神僵。
4雁刷、Android中 mvc基本動(dòng)作流程
1,layout制定相應(yīng)的布局文件保礼,然后顯示在 Activity上沛励,用于顯示天氣信息。對(duì)應(yīng)于 View層炮障,這里的 View并不是 Android開發(fā)中組件的 view而是對(duì)視圖的統(tǒng)稱目派。
2、Activity在 onCreate()或者 onResume()去服務(wù)器獲取數(shù)據(jù)胁赢,或者通過界面上的某按鈕去啟動(dòng)獲取數(shù)據(jù)的任務(wù)企蹭,這里就對(duì)應(yīng)到 View->Controller,只不過 View和 Controller是由 Activity完成智末。
3谅摄、C層獲得數(shù)據(jù)后,分別存在內(nèi)存吹害、磁盤和數(shù)據(jù)庫中螟凭,并且數(shù)據(jù)獲取成功或者失敗后,Activity界面需要同步更新狀態(tài)它呀。
4螺男、MVP的出現(xiàn)
? ? 因?yàn)?Activity對(duì)應(yīng)了 MVC模式中的 V和C棒厘,代碼臃腫,所以出現(xiàn)了 MVP模式下隧。
Model:M層負(fù)責(zé)數(shù)據(jù)奢人。
View:V層負(fù)責(zé) Activity上的布局。
Presenter:P層負(fù)責(zé)中間紐帶淆院。
MVP開發(fā)在 Android中的基本流程:
? ? 1何乎、View層定義 View.interface,用來定義 View的行為土辩。一般由 Activity或者 Fragment來實(shí)現(xiàn)這個(gè)接口支救,定義了 View視圖的各種變化,如設(shè)置Textview,加載對(duì)話框拷淘,更新進(jìn)度條等各墨。
? ? 2、Model層定義 Model.interface启涯,用來定義數(shù)據(jù)層發(fā)生變化時(shí)的通知接口贬堵,因?yàn)?M不能與C直接交互,所以它與 Presenter交互结洼,然后通過 Presenter間接達(dá)到與 View交互黎做。
? ? 3、Presenter負(fù)責(zé)具體 業(yè)務(wù)邏輯松忍,請(qǐng)求數(shù)據(jù)蒸殿,把數(shù)據(jù)送到 Model,或者監(jiān)聽 Model的數(shù)據(jù)變化挽铁,接受 View層的動(dòng)作伟桅,負(fù)責(zé)通知 View層的視圖變化。
5叽掘、MVP與MVC的重要區(qū)別:
? ? MVC中 Model、VIew玖雁、Controller之間互相通信更扁。
? ? MVP:Model與Presenter通信,View與Presenter通信赫冬,而Model與View之間沒有通信浓镜。
????MVC開發(fā)模式中,分工每個(gè)人負(fù)責(zé)相應(yīng)的 Activity劲厌,再后來某 Activity變得越來越重要膛薛,代碼越來越多,會(huì)造成某個(gè)人的開發(fā)任務(wù)中間补鼻,并且其他人幫不上忙哄啄。
? ? MVP則可以將 Activity細(xì)分雅任,分為 View和 Presenter兩部分,讓一人開發(fā) View咨跌,另一人負(fù)責(zé) Presenter部分沪么。并且 V的變動(dòng)對(duì)P影響不大,越復(fù)雜優(yōu)勢(shì)越大锌半。