摘要:模式的核心是為了將模型從視圖控制器中分離出來,從而使得模型獨(dú)立于它們,因此模型不包含對(duì)視圖和控制的引用。
寫在最前面的那些話
相信對(duì)于大多數(shù)小白來說,關(guān)于MVP、MVC設(shè)計(jì)模式肯定是聽過也看到過很多次了,也許也有過一些簡(jiǎn)單了解,但關(guān)于TA的具體概念,如何使用以及具體應(yīng)用等都毫無所知,所以本著許多小伙伴一看到mvp、mvc就一臉懵逼的表情(當(dāng)然也包括本人了⊙▽⊙)#),最近上手一個(gè)基于mvp框架的mosby框架的練手項(xiàng)目,所以決定
去好好研究一番mvp設(shè)計(jì)模式以及mosby的原理以及使用,所以在此寫下這篇博文,希望能夠幫助到正在學(xué)習(xí)或者準(zhǔn)備學(xué)習(xí)mvp設(shè)計(jì)模式的那些小伙伴了.
相信很多小伙伴應(yīng)該都有這樣一個(gè)共同的認(rèn)知,關(guān)于技術(shù),網(wǎng)上一搜一大堆,但是質(zhì)量自然是參差不齊,身處互聯(lián)網(wǎng)時(shí)代最好的一點(diǎn)就是資源共享,本著為更多的小伙伴節(jié)省搜尋資源的時(shí)間以及篩選優(yōu)質(zhì)資源的時(shí)間成本,決定以小白的身份來寫寫mvp那些事,旨在共享資源,共同進(jìn)步,不喜勿噴!
快加入學(xué)習(xí)的隊(duì)伍來吧,歡迎各路大神留下寶貴意見.
什么是MVC(Model View Controller)模式?
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設(shè)計(jì)典范,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個(gè)部件里面,在改進(jìn)和個(gè)性化定制界面及用戶交互的同時(shí),不需要重新編寫業(yè)務(wù)邏輯。其中M層處理數(shù)據(jù),業(yè)務(wù)邏輯等(適合做一些業(yè)務(wù)邏輯處理,比如數(shù)據(jù)庫存取操作,網(wǎng)絡(luò)操作,復(fù)雜的算法,耗時(shí)的任務(wù)等都在model層處理);V層處理界面的顯示結(jié)果(XML布局可以視為V層,顯示Model層的數(shù)據(jù)結(jié)果);C層起到橋梁的作用,來控制V層和M層通信以此來達(dá)到分離視圖顯示和業(yè)務(wù)邏輯層(在Android中,Activity處理用戶交互問題,因此可以認(rèn)為Activity是控制器,Activity讀取V視圖層的數(shù)據(jù),控制用戶輸入,并向Model發(fā)送數(shù)據(jù)請(qǐng)求)。
Model: 數(shù)據(jù)層. 負(fù)責(zé)與網(wǎng)絡(luò)層和數(shù)據(jù)庫層的邏輯交互.
View: UI層. 顯示數(shù)據(jù), 并向Controller報(bào)告用戶行為.
Controller:負(fù)責(zé)從視圖中取得數(shù)據(jù)然后發(fā)送給模型,根據(jù)用戶在視圖中的行為去更新模型的邏輯.
一般業(yè)務(wù)邏輯如下:
1、為了使得視圖接口可以與模型和控制器進(jìn)行交互,控制器執(zhí)行一些初始化事件
2、用戶通過視圖(用戶接口)執(zhí)行一些操作
3、控制器處理用戶行為(可以用觀察著模式實(shí)現(xiàn))并通知模型進(jìn)行更新
4、模型引發(fā)一些事件,以便將改變發(fā)告知視圖
5、視圖處理模型變更的事件,然后顯示新的模型數(shù)據(jù)
6、用戶接口等待用戶的進(jìn)一步操作
什么是MVP(Model-View-Presenter)模式?
MVP 是從經(jīng)典的模式MVC演變而來,它們的基本思想有相通的地方:Controller/Presenter負(fù)責(zé)邏輯的處理,Model提供數(shù)據(jù),View負(fù)責(zé)顯示。作為一種新的模式,MVP與MVC有著一個(gè)重大的區(qū)別:在MVP中View并不直接使用Model,它們之間的通信是通過Presenter (MVC中的Controller)來進(jìn)行的,所有的交互都發(fā)生在Presenter內(nèi)部,而在MVC中View會(huì)從直接Model中讀取數(shù)據(jù)而不是通過 Controller。
Model: 數(shù)據(jù)層. 負(fù)責(zé)與網(wǎng)絡(luò)層和數(shù)據(jù)庫層的邏輯交互.
View: UI層. 顯示數(shù)據(jù), 并向Presenter報(bào)告用戶行為.
Presenter: 從Model拿數(shù)據(jù), 應(yīng)用到UI層, 管理UI的狀態(tài), 決定要顯示什么, 響應(yīng)用戶的行為.
MVP模式的最主要優(yōu)勢(shì)就是耦合降低, Presenter變?yōu)榧僇ava的代碼邏輯, 不再與Android Framework中的類如Activity, Fragment等關(guān)聯(lián), 便于寫單元測(cè)試.
因?yàn)樵趍vc模式中view層與Controller層并沒有完全分離開,所以當(dāng)模塊功能越來越大,擴(kuò)展越來越多時(shí),代碼依然會(huì)顯得臃腫,所以在Android開發(fā)中mvc幾乎被mvp所取代了,所以開發(fā)中首選自然是mvp設(shè)計(jì)模式了.
MVP與MVC有著一個(gè)重大的區(qū)別:在MVP中View并不直接使用Model,它們之間的通信是通過Presenter (MVC中的Controller)來進(jìn)行的,所有的交互都發(fā)生在Presenter內(nèi)部,而在MVC中View會(huì)從直接Model中讀取數(shù)據(jù)而不是通過 Controller。
MVC/P模式的核心是為了將模型從視圖/控制器中分離出來,從而使得模型獨(dú)立于它們,因此模型不包含對(duì)視圖和控制的引用。
好了,關(guān)于mvc/mvp設(shè)計(jì)模式最簡(jiǎn)單概念部分已經(jīng)介紹完了,相信大家對(duì)TA不在是一臉懵逼了吧,當(dāng)然這里值得一提的是,這兩種設(shè)計(jì)模式一般是不用在小項(xiàng)目中的,那樣反而會(huì)顯得代碼過度臃腫,一般在大型項(xiàng)目中,且業(yè)務(wù)邏輯相對(duì)復(fù)雜,頁面切換顯示比較多需要進(jìn)行模塊化設(shè)計(jì)時(shí)就需要使用MVP設(shè)計(jì)模式了,這時(shí)你就能體會(huì)到TA的優(yōu)勢(shì)了.后記總結(jié):
相信看完上面的簡(jiǎn)單介紹(是不是想說一句,尼瑪怎么這么少還沒看過癮呢、哈哈),你應(yīng)該對(duì)mvp、mvc設(shè)計(jì)模式有了一些基本的了解,但肯定對(duì)TA還是有很多不清楚,不明白的地方,所以這里才是真正分享資源的開始,也是你開始學(xué)習(xí)mvp設(shè)計(jì)模式的開始之地.
本著不重復(fù)造輪子和胡亂復(fù)制、粘貼忽悠人的原則,就直接拿過來分享給你們了:
MVC和MVP的詳細(xì)比較以及簡(jiǎn)單代碼展示
請(qǐng)賞個(gè)小紅心!因?yàn)槟愕墓膭?lì)是我寫作的最大動(dòng)力!更多精彩文章請(qǐng)關(guān)注
個(gè)人博客:darryrzhong
掘金
簡(jiǎn)書
SegmentFault
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/69109.html
摘要:寫在前面開發(fā)中的圖像壓縮是一個(gè)很重要的部分。而這篇文章會(huì)讓我們從另外一個(gè)角度來認(rèn)識(shí)平臺(tái)下的圖像壓縮和優(yōu)化。所以,它是你圖像壓縮和優(yōu)化的首選,盡可能的去使用吧。 寫在前面 Android開發(fā)中的圖像壓縮是一個(gè)很重要的部分。而這篇文章會(huì)讓我們從另外一個(gè)角度來認(rèn)識(shí)Android平臺(tái)下的圖像壓縮和優(yōu)化。 這篇文章更適合和設(shè)計(jì)師一起來看,所以,如果你和你的設(shè)計(jì)師是好基友的話,不妨叫上他,倒兩杯咖...
摘要:探索專為而設(shè)計(jì)的將探討進(jìn)行了何種改進(jìn),以及這些改進(jìn)背后的原因。關(guān)于最友好的文章進(jìn)階前言之前就寫過一篇關(guān)于最友好的文章反響很不錯(cuò),由于那篇文章的定位就是簡(jiǎn)單友好,因此盡可能的摒棄復(fù)雜的概念,只抓住關(guān)鍵的東西來講,以保證大家都能看懂。 周月切換日歷 一個(gè)可以進(jìn)行周月切換的日歷,左右滑動(dòng)的切換月份,上下滑動(dòng)可以進(jìn)行周,月不同的視圖切換,可以進(jìn)行事件的標(biāo)記,以及節(jié)假日的顯示,功能豐富 Andr...
閱讀 2804·2023-04-25 18:46
閱讀 695·2021-11-19 09:40
閱讀 2062·2021-09-28 09:36
閱讀 3374·2021-09-10 11:11
閱讀 3453·2019-08-30 15:55
閱讀 1790·2019-08-30 15:54
閱讀 2588·2019-08-29 16:16
閱讀 3535·2019-08-29 15:08