999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

MVP設(shè)計(jì)模式研究及在Android中的設(shè)計(jì)

2017-04-20 22:44:48楊靖洪蕾
科技創(chuàng)新導(dǎo)報(bào) 2016年34期
關(guān)鍵詞:模型

楊靖++洪蕾

摘 要:MVP即Model-View-Presenter,是一種界面設(shè)計(jì)模式。使用MVP設(shè)計(jì)模式可以幫助我們分離業(yè)務(wù)邏輯,顯示邏輯和用戶界面,讓我們的程序具有良好的可擴(kuò)展性、可測(cè)試性,保證了系統(tǒng)的整潔性、靈活性。

關(guān)鍵詞:MVP Android 設(shè)計(jì)模式 UI 控制器 模型 視圖

中圖分類(lèi)號(hào):F270.7 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1674-098X(2016)12(a)-0097-02

在Android上,業(yè)務(wù)邏輯和數(shù)據(jù)存取是緊耦合的,很多缺乏經(jīng)驗(yàn)的工程師可能會(huì)將各種各樣的業(yè)務(wù)邏輯塞進(jìn)某些組件或者自定義View中,使得這些組件的單個(gè)類(lèi)臃腫不堪,這對(duì)程序的更新迭代造成很大的影響,而好的設(shè)計(jì)模式可以使得各個(gè)模塊之間相互分離,解決系統(tǒng)的耦合度,提高程序的擴(kuò)展性。

1 MVP概述

MVP是根據(jù)MVC延伸出來(lái)的一種使用者界面設(shè)計(jì)模式,是20世紀(jì)90年代,IBM旗下的子公司Taligent在用C/C++開(kāi)發(fā)一個(gè)叫CommonPoint的圖形界面應(yīng)用系統(tǒng)的時(shí)候提出來(lái)的。MVP能夠有效降低View的復(fù)雜性,避免業(yè)務(wù)邏輯被塞進(jìn)View中。MVP模式比之MVC模式而言解除了View與Model之間的耦合,同時(shí)又帶來(lái)了良好的可擴(kuò)展性、可測(cè)試性。

MVP模式可以分離顯示層和邏輯層,它們之間通過(guò)接口進(jìn)行通信,降低耦合。理想化的MVP模式可以實(shí)現(xiàn)同一份邏輯代碼搭配不同的顯示界面,其中的面向接口編程使得程序更加具有開(kāi)放性以及適用性,保證了靈活性。

2 MVP模式剖析

2.1 MVP模式結(jié)構(gòu)

MVP模式中,用戶與View交互,View與Presenter通過(guò)接口進(jìn)行通信,Presenter與Model通過(guò)接口進(jìn)行交互,Model功能不光提供數(shù)據(jù)模型,還有數(shù)據(jù)的存儲(chǔ)與獲取業(yè)務(wù)包含在內(nèi),整體設(shè)計(jì)而言解除了View與Model之間的耦合。

MVP模式可以讓UI界面和數(shù)據(jù)分離,我們的應(yīng)用至少可以分為3層,這樣可以使得我們對(duì)這3層進(jìn)行獨(dú)立的單元測(cè)試。

MVP并不是一個(gè)標(biāo)準(zhǔn)化的模式,用戶可以根據(jù)自己的需求和理解去實(shí)現(xiàn)自己的MVP模式設(shè)計(jì)。

2.2 View模塊分析

視圖(View)用于顯示UI界面及與用戶交互使用,通常使用Android中的Activity、Fragment或者自定義View作為View層。

在此建議使用Fragment作為View層,因?yàn)镕ragment自身的特殊性,F(xiàn)ragment自身可作為View來(lái)使用,使得程序有更好的擴(kuò)展性和靈活性。

因?yàn)镸VP自身的獨(dú)特性,View和Presenter之間直接存在著關(guān)聯(lián),所以可以使用接口來(lái)規(guī)定二者的通信。

而View自身需要和Presenter進(jìn)行通信,所以一般View持有一個(gè)Presenter成員變量。通常View需要實(shí)現(xiàn)一個(gè)邏輯接口,將View上的操作通過(guò)回轉(zhuǎn)交給Presenter實(shí)現(xiàn),最后Presenter調(diào)用View邏輯接口將返回結(jié)果給View元素。

理想狀態(tài)下,可以在同一套業(yè)務(wù)邏輯中完全替換新的View,因?yàn)镻resenter和View之間都是使用各自的接口對(duì)象進(jìn)行通信。

2.3 Presenter模塊分析

控制器(Presenter)也稱為交互中間人,作為溝通View和Model之間的橋梁,它從Model層檢索數(shù)據(jù)后,返回給View層,使得View和Model之間沒(méi)有耦合,也將業(yè)務(wù)邏輯從View角色上抽離出來(lái)。

所以一般情況下,Presenter具體實(shí)現(xiàn)類(lèi)中需要持有View和Model接口對(duì)象來(lái)進(jìn)行交互。

2.4 Model模塊分析

模型(Model)負(fù)責(zé)數(shù)據(jù)的獲取和存儲(chǔ),主要角色是提供數(shù)據(jù)的存取功能。Presenter需要通過(guò)Model層存儲(chǔ)、獲取數(shù)據(jù)、請(qǐng)求遠(yuǎn)程數(shù)據(jù)等,Model層是一個(gè)封裝了數(shù)據(jù)庫(kù)DAO層及網(wǎng)絡(luò)獲取數(shù)據(jù)的數(shù)據(jù)倉(cāng)庫(kù)。

因?yàn)镸odel層自身的特殊性,負(fù)責(zé)數(shù)據(jù)的獲取,而有些特殊應(yīng)用需要緩存數(shù)據(jù)到本地?cái)?shù)據(jù)庫(kù),所以從遠(yuǎn)程服務(wù)器和本地存儲(chǔ)(如:數(shù)據(jù)庫(kù)或文件)都可能會(huì)存取到,可以在Presenter層中控制數(shù)據(jù)的來(lái)源。

3 MVP模式應(yīng)用在Android中的實(shí)現(xiàn)

3.1 View與Presenter之間的關(guān)聯(lián)及實(shí)現(xiàn)

在MVP模式中,View和Presenter之間相互通信,因此可以定義出View和Presenter中的所有通信動(dòng)作,可以使用接口來(lái)限定V和P層的動(dòng)作,并且V層應(yīng)該持有P層的對(duì)象,可以使用如下代碼:

public interface BaseView{

void setPresenter(T presenter);

void showLoading(String value);

void dismissLoading();

boolean isActive();

}

public interface BasePresenter{

void start();

void initData();

void bindDataToView();

}

public interface LoginContract{

interface Viewextends BaseView{

void setUsername(String userName);

void setPassword(String passWord);

}

interface Presenter extends BasePresenter{

void login(String userName,String pass Word);

}

}

可定義View和Presenter的基類(lèi)中定義基礎(chǔ)的動(dòng)作,并且規(guī)定View中必須實(shí)現(xiàn)邏輯接口,將View上的操作通過(guò)回轉(zhuǎn)交給Presenter實(shí)現(xiàn),最后Presenter調(diào)用View邏輯接口將返回結(jié)果給View元素,Presenter層中可在具體類(lèi)的構(gòu)造方法中加入View參數(shù),從而實(shí)現(xiàn)View和Presenter互相通信的目的。

在初始化Presenter后,Presenter類(lèi)中必須調(diào)用View中實(shí)現(xiàn)的邏輯接口,將自身傳遞進(jìn)去。

3.2 Android中Model層的設(shè)計(jì)

因?yàn)镸odel層的特殊性,Model可定義為數(shù)據(jù)倉(cāng)庫(kù),Model可以從遠(yuǎn)程服務(wù)器或者本地保存的數(shù)據(jù)中讀取數(shù)據(jù),可以把請(qǐng)求網(wǎng)絡(luò)接口的操作放在Model中,或者負(fù)責(zé)第三方SDK交互操作,這一層包含實(shí)際的Model類(lèi),用于定義當(dāng)前數(shù)據(jù)結(jié)構(gòu)。

Presenter層可以通過(guò)回調(diào)獲取Model層的數(shù)據(jù),完成Presenter層和Model層間的通信。

4 結(jié)語(yǔ)

該文對(duì)MVP設(shè)計(jì)模式的概念及其在Android中的設(shè)計(jì)使用進(jìn)行了介紹。可以看出,MVP模式非常容易使用,但需要指出的是,MVP并非一套固定的準(zhǔn)則,用戶可以根據(jù)自己的需求和理解去撰寫(xiě)自己的MVP模式。

MVP縱然有代碼耦合度降低、層級(jí)清晰等一系列優(yōu)點(diǎn),但是大量的View-Model,Model-View的手動(dòng)同步會(huì)造成Presenter比較笨重,維護(hù)起來(lái)會(huì)比較困難,而且View和Presenter之間太過(guò)緊密,如果View變更,Presenter也需要變更,增加了代碼的復(fù)雜度。

最后,我們應(yīng)該明白,所有的設(shè)計(jì)模式都只是對(duì)程序開(kāi)發(fā)的指導(dǎo),并不是準(zhǔn)則,我們應(yīng)該根據(jù)自己實(shí)際開(kāi)發(fā)中的項(xiàng)目經(jīng)驗(yàn)和實(shí)際情況來(lái)選擇是否使用以及如何使用設(shè)計(jì)模式,從而編寫(xiě)出更加優(yōu)良的代碼。

參考文獻(xiàn)

[1] CameloeAnthony.安卓架構(gòu)文章合集[EB/OL].http//www.jianshu.com.

[2] 何紅輝,關(guān)愛(ài)名.Android源碼設(shè)計(jì)模式解析與實(shí)戰(zhàn)[M].中國(guó)郵電出版社,2015.

猜你喜歡
模型
一半模型
一種去中心化的域名服務(wù)本地化模型
適用于BDS-3 PPP的隨機(jī)模型
提煉模型 突破難點(diǎn)
函數(shù)模型及應(yīng)用
p150Glued在帕金森病模型中的表達(dá)及分布
函數(shù)模型及應(yīng)用
重要模型『一線三等角』
重尾非線性自回歸模型自加權(quán)M-估計(jì)的漸近分布
3D打印中的模型分割與打包
主站蜘蛛池模板: 久久久精品无码一区二区三区| 国产国模一区二区三区四区| 婷婷色一区二区三区| 欧美专区在线观看| 久久大香香蕉国产免费网站| 中文字幕亚洲无线码一区女同| 国产免费黄| 亚洲AⅤ永久无码精品毛片| 日韩免费毛片| 久久香蕉国产线看观看精品蕉| 国产丝袜啪啪| 伊人久久福利中文字幕| 99热这里只有精品免费| 玖玖免费视频在线观看| 欧美影院久久| 国产人成网线在线播放va| 大乳丰满人妻中文字幕日本| 国产天天色| 国产黄色爱视频| 十八禁美女裸体网站| 久久这里只有精品66| 91免费国产在线观看尤物| 国产成人1024精品| 97国产在线视频| 欧美综合区自拍亚洲综合天堂| 波多野结衣在线一区二区| 欧美日韩va| 久久久国产精品无码专区| 日本免费一级视频| 亚洲成人动漫在线观看| 婷五月综合| 国产www网站| 青青青国产视频手机| 自拍偷拍欧美日韩| 91av国产在线| 国产爽爽视频| 好吊日免费视频| 亚洲欧美另类日本| 国产在线精品99一区不卡| 永久免费av网站可以直接看的| AV老司机AV天堂| 国产极品嫩模在线观看91| 中文一区二区视频| 特级毛片8级毛片免费观看| 77777亚洲午夜久久多人| 免费aa毛片| 日韩精品免费一线在线观看| 国产综合精品一区二区| 亚洲男人在线天堂| 国产精品久久久久久久伊一| 成人欧美日韩| 亚洲精品无码日韩国产不卡| 免费看一级毛片波多结衣| 亚洲精品视频免费观看| 亚洲精品成人片在线播放| 狠狠色综合网| 人妻一区二区三区无码精品一区| 欧美一级在线播放| 国产乱人激情H在线观看| 亚洲精品制服丝袜二区| 国产原创第一页在线观看| 毛片视频网址| 91色综合综合热五月激情| 99精品一区二区免费视频| 色AV色 综合网站| 国产福利影院在线观看| a毛片免费在线观看| 国产福利免费在线观看| 亚洲午夜福利精品无码| 欧美成人一级| 久久这里只有精品国产99| 91网红精品在线观看| 国产免费羞羞视频| 国产丝袜第一页| 亚洲第一在线播放| 国产97视频在线观看| 亚洲黄色片免费看| 爱色欧美亚洲综合图区| 久久精品国产精品青草app| 成人年鲁鲁在线观看视频| 在线高清亚洲精品二区| 国产成人亚洲无码淙合青草|