java mvc mvp_MVC和MVP设计模式
參考博客
http://www.cnblogs.com/end/archive/2011/06/02/2068512.html
####MVC模式
M:model 模型
V:view視圖
C:controller控制器
>我們知道,所有的軟件的構(gòu)成主要有兩部分,分別是用戶交互入口(USER INTERFACE)和數(shù)據(jù)(DATA)。那么為什么UI(USER INTERFACE)稱為用戶交互入口呢?因?yàn)槲覀兊挠脩?#xff0c;在使用我們的軟件的時(shí)候,他們關(guān)心的并不是使用了什么技術(shù)實(shí)現(xiàn)的,考慮更多的是這個(gè)功能好不好用,這個(gè)交互舒服不舒服。那么用戶在通過(guò)視覺(jué)和通過(guò)操作使用我們軟件的時(shí)候,接觸用戶的就是我們的界面,承載交互的就是我們界面上的控件。所以,UI稱之為用戶交互入口,因?yàn)橛辛艘曈X(jué)體驗(yàn)有了感知,才會(huì)有行為,有了行為才能稱之為交互。用戶的行為,也就是交互,我們就是C(CONTROLLER)在處理,那么呈現(xiàn)在UI(USER INTERFACE)上面的內(nèi)容,就是我們的數(shù)據(jù),所以我們的M(MODEL)就是MVC中的數(shù)據(jù)模型。
在我們的android開(kāi)發(fā)過(guò)程中,本質(zhì)上并沒(méi)有完全遵循MVC架構(gòu)模式。以Activity為例:
它可以是V也可以使C。因?yàn)锳ctivity能兼容了View和Controller的基本特征。那么,在Android中,MVC在哪些場(chǎng)景下體現(xiàn)的比較準(zhǔn)確呢?以列表級(jí)控件的使用為例(ListView,GridView):我們需要聲明ListView這個(gè)外層容器,然后定義Item的UI樣式,然后通過(guò)適配器將UI和數(shù)據(jù)進(jìn)行匹配,最后將適配器和控件進(jìn)行綁定。那么這個(gè)就是我們MVC軟件架構(gòu)模型的一個(gè)很清晰的體現(xiàn),在列表級(jí)控件中,我們使用了Adapter,在設(shè)計(jì)模式中,稱之為適配器模式。所以在這個(gè)小例子中,就要體會(huì)一下軟件架構(gòu)模型和設(shè)計(jì)模式的區(qū)別。

####MVP模式
M:model 模型
V:view 視圖
P:presenter 中間人
>MVP作為MVC的演化進(jìn)階模型。它的靈活性以及優(yōu)勢(shì)主要體現(xiàn)在復(fù)雜的業(yè)務(wù)場(chǎng)景下。首先MVP中的M(MODEL)可以承載交互扮演MVC中C(CONTROLLER)的角色,也可以扮演MVC中M(MODEL)的角色,可以進(jìn)行數(shù)據(jù)建模也可以進(jìn)行視圖建模。MVP中V(VIEW)屬于單純意義上的視圖層。P(PRESENTER)則作為中間人亦或者橋梁,將M和V進(jìn)行關(guān)聯(lián)。同時(shí)MVP中的P(PRESENTER)也可以作為業(yè)務(wù)實(shí)現(xiàn)層體現(xiàn)在項(xiàng)目中。

>所以,綜上,MVP相比較MVC我們發(fā)現(xiàn),它的靈活性更高了,并且,拆解效率非常明顯。總結(jié)一句話就是,MVP在復(fù)雜業(yè)務(wù)背景下,解耦和擴(kuò)展效果突出。
MVP 的缺點(diǎn):model 層與 Presenter 層,presenter層與 view 層之間通過(guò)接口建立聯(lián)系,這樣會(huì)導(dǎo)致當(dāng)頁(yè)面邏輯很復(fù)雜的時(shí)候,View 層實(shí)現(xiàn)的接口會(huì)很多,如果你的App中有很多復(fù)雜的頁(yè)面,維護(hù)接口的成本會(huì)變的很大。
#### MVVM 模式
MVVM 模式將 Presenter 改名為 ViewModel,基本與MVP模式一致
區(qū)別在于 View 層與 ViewModel 層通過(guò) DataBinding相互綁定。View層的變動(dòng),自動(dòng)反應(yīng)在 ViewModel 層,反之亦然
### Dagger2在MVP中所發(fā)揮的作用
Dagger2是為Android和Java平臺(tái)提供的編譯時(shí)進(jìn)行依賴注入的框架,編譯時(shí)生成代碼,完成所需對(duì)象的注入,解決了基于反射帶來(lái)的開(kāi)發(fā)和性能上的問(wèn)題。主要是用于界面和業(yè)務(wù)之間的隔離
使用步驟:
>0.添加依賴
>0.借助工具生成編譯注解器(在gradle中進(jìn)行配置),在編譯時(shí)起作用
>1.指定要注入的目標(biāo)(@inject)
>2.創(chuàng)建dagger文件,創(chuàng)建module類(@module,@presenter)
>3.通過(guò)接口建立Activity和Module之間的關(guān)系(@component)
>4.rebuild 編譯生成代碼
>5.使用那個(gè)類


>“可參考的博客:http://blog.csdn.net/tiankong1206/article/details/46486401”
### Retrofit
利用注解和okHttp實(shí)現(xiàn)和服務(wù)器的數(shù)據(jù)交互
用法
0.添加依賴并進(jìn)行配置
1.創(chuàng)建model數(shù)據(jù)模型
2.定義REST API接口
3.創(chuàng)建Retrofit對(duì)象并發(fā)起請(qǐng)求
### RxJava
本質(zhì)是一個(gè)在java VM 上使用可觀測(cè)序列的基于事件程序的異步操作庫(kù),使用簡(jiǎn)潔的邏輯處理復(fù)雜的任務(wù)的一個(gè)異步操作庫(kù)。
可以輕松處理不同環(huán)境下的后臺(tái)線程和UI線程庫(kù)
關(guān)鍵字:簡(jiǎn)潔,異步,隊(duì)列化

總結(jié)
以上是生活随笔為你收集整理的java mvc mvp_MVC和MVP设计模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux promisc 作用,lin
- 下一篇: c++思维导图_必看|用好思维导图,别神