自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android MVP框架學習實踐

移動開發(fā) Android
想著互聯(lián)網公司都基本都有現(xiàn)成的項目,實習的話最多也就是對原有的代碼修改,增加功能。所以最后進了一家不大不小的外包公司,想體驗一下一個商業(yè)項目從落地到成型的過程。進入公司以后,被分配到一個給國外發(fā)包方做的項目(我只是個實習生萌新啊,第一個項目就給外國人做,這樣好嗎喂)。

前言

想著互聯(lián)網公司都基本都有現(xiàn)成的項目,實習的話最多也就是對原有的代碼修改,增加功能。所以***進了一家不大不小的外包公司,想體驗一下一個商業(yè)項目從落地到成型的過程。進入公司以后,被分配到一個給國外發(fā)包方做的項目(我只是個實習生萌新啊,***個項目就給外國人做,這樣好嗎喂)。

Android MVP框架學習實踐

作為一個有過Android開發(fā)經驗的菜鳥,也算在各個服務外包比賽中拿過些獎的人(雖然大學的這種比賽很水,但是也是有些開發(fā)的工作量的,哈哈),我對一個項目的構成,如何開發(fā)等等,都有些了解。由于之前的比賽項目經驗,都是我一個人獨立開發(fā)Android端,所以對項目的架構、框架等都是怎么方便怎么來,不怎么考慮代碼的可讀性,可復用性之類的東西(進入公司實習之后才發(fā)現(xiàn),這些東西相當重要啊),之前為了方便,把業(yè)務邏輯,視圖綁定啥的都一股腦的放入activity類中,導致activity類過于臃腫,給代碼的閱讀和修改都帶了極大的不便,但是由于自己的項目經驗缺乏,從一開始就給自己挖下的坑,之后不但很難填,而且還越挖越深(單手捂眼笑哭.jpg),幸好只是我一個人自己開發(fā),不然要是協(xié)作開發(fā)的話,估計會被小伙伴怒錘。

進入公司以后,從Android帶隊開發(fā)大佬那邊拿到了項目的基礎開發(fā)框架

Android MVP框架學習實踐

品了一下,從我裸考過六級的水平來看,嗯,這個presenter應該是之前在書上看到過的MVP中的P沒差了。從網上找找資料學習學習。

進入正題。

MVP是Model、View、Presenter的縮寫。Model表示模型,主要負責數據的加載;VIew表示視圖主要負責視圖綁定,界面的展示,界面邏輯跳轉等;Presenter是表示器,主要作為View和Model的中間人,完成他們之間的交互,從而實現(xiàn)高內聚低耦合的思想。畫了一幅它們之間的關系圖。

Android MVP框架學習實踐

可能這樣有點抽象,talk is cheap, show you the code.

先來看看我們項目組Android大佬的MVP框架實現(xiàn),

MainActivity.java:

Android MVP框架學習實踐

MainContract.java:

Android MVP框架學習實踐

MainPresenter.java:

Android MVP框架學習實踐

大佬果然是大佬,已經對各種基類進行了封裝,來方便我們這些萌新的開發(fā)。(上面的代碼還用到了RxJava,emmmm其實這個對于我這個萌新來說也是還沒有接觸過的技術,之后也會更新RxJava相關的學習博客,要努力變強~)。

我們會發(fā)現(xiàn),其實上面這三個.java已經可以實現(xiàn)一個界面的完整邏輯,但是View有了,Presenter也有了,Model去哪了???還有Contract又是什么鬼???這還是MVP的設計模式嗎???

一開始,我也是懵的,又去大佬那邊學習了一波。了解到,目前Android的MVP設計模式其實還沒有一個統(tǒng)一的標準,基于MVP這個思想可以有很多的實現(xiàn)方式,上面展示的這個方式是Google官方提出的一種MVP實現(xiàn)方式。

谷歌官方的MVP實現(xiàn)方式中,弱化了Model的作用,將Model融入到了Presenter中,我們可以看到MainPresenter中的getBook方法,其實就是Model的實現(xiàn)。而Contract類,中文翻譯就是契約類,契約這個詞很形象,它作為view和presenter之間的接口,定義了view和presenter上所要實現(xiàn)的方法,然后view和presenter再各自實現(xiàn)其方法,讓整個界面的邏輯變得相當清晰。

由于大佬的代碼經過了封裝,有些細節(jié)被隱藏了,所以我們來做個小demo,用谷歌官方的MVP實現(xiàn)方式來實現(xiàn)一個 --模擬從服務器拉取信息展示到界面-- 的程序,更直觀的了解MVP。

我的表演

先看一下***呈獻的界面吧

 

Android MVP框架學習實踐

界面展示

 

界面布局很簡單,就一個TextView和一個Button,布局文件xml就不貼出來了。主要的功能是點一下獲取數據的按鈕,模擬從服務器獲取數據,然后在textview上顯示出來。

下面的代碼結構,由Activity(也就是View)、Presenter、Contract組成:

 

Android MVP框架學習實踐

代碼結構

 

為了講解方便,我們先來看一下MainContract里的內容:

 

Android MVP框架學習實踐

MainContract代碼

 

相當簡單,因為Contract是一個契約類,里面并沒有實現(xiàn)任何功能,只是寫明了Presenter和View分別要實現(xiàn)的接口,我在Presenter接口中定義了LoadData的方法,MainPresenter需要實現(xiàn)Presenter接口中的LoadData方法,來完成對數據從服務器的拉取;在接口View中定義了onDataLoaded的方法,同樣,因為MainActivity應用了接口View,因此需要對onDataLoaded方法進行實現(xiàn)。

MainActivity:

 

Android MVP框架學習實踐

MainActivity代碼

 

MainActivity主要是界面組件的綁定,以及一些成員變量的初始化,可以看到我這里初始化了textview、button還有一個presenter,之后界面關于數據的操作就通過presenter來實現(xiàn)。

我們可以看到,這里重寫了onDataLoaded的方法,因為MainActivity implements了契約類中的View接口,因此需要將接口中的onDataLoaded方法實現(xiàn),該方法的主要功能就是將presenter中獲取到的數據呈現(xiàn)在界面上,我們這邊是將數據顯示在界面的textview上。

MainPresenter:

 

Android MVP框架學習實踐

MainPresenter代碼

 

MainPresenter是界面數據操作實現(xiàn)的地方,他implements了契約類的Presenter接口,因此需要實現(xiàn)Presenter接口中定義的LoadData方法,該方法的功能是從服務器獲取數據然后回調給Activity(也就是View),我這邊偷懶了,沒有服務器獲取數據,直接hard code出數據(嘻嘻),嗯,假裝獲取到了服務器端的數據,然后調用View的onDataLoaded方法,將所獲取到的數據傳遞到activity中。這樣activity中就可以更新數據了。

奧,對了,Presenter中必須有一個View的成員變量MainContract.View mView; 不然就不能調用view上面的方法了,mView的初始化,在Presenter變量創(chuàng)建的時候復制,可以在MainActivity中看到

Android MVP框架學習實踐

看一下運行的結果

 

Android MVP框架學習實踐

按鈕點擊后結果

 

由此,我們已經實現(xiàn)了一個相當相當簡單的基于MVP框架的app。

如果之后需要加功能,只要在Contract中添加所需要功能的接口,然后再在Presenter和Activity中分別實現(xiàn)就行。

比如說我要新增一functionA,執(zhí)行完后需要在View上做出相應的界面改變。我們只需要這樣做:

1、在Contract中定義Presenter中functionA方法,以及View中的onFunctionAFinished方法

Android MVP框架學習實踐

2、在Presenter實現(xiàn)類中實現(xiàn)functionA具體方法,并調用更新界面的onFunctionAFinished

Android MVP框架學習實踐

3、在Activity中實現(xiàn)onFunctionAFinished方法

Android MVP框架學習實踐

這樣,又一個功能被添加了,是不是很方便,邏輯也很清晰。Activity只需負責界面更新的部分,而數據的獲取,全都交由Presenter來實現(xiàn),高內聚低耦合,對于界面的維護和開發(fā)相當有幫助。

當然,以上只是MVP一個最簡單不過的實現(xiàn)了,為了易于理解,我對很多基類的定義和封裝都去掉了,在實際的開發(fā)中是不可能那么簡單的,但是,如果對于MVP的思想理解了,實現(xiàn)起來還是思路很清晰的。

再貼上上面代碼的github地址吧,雖然沒幾行代碼,但是不貼顯得不專業(yè),公司的開發(fā)框架代碼我是不會貼的,貼的是我的簡單代碼。

https://github.com/reggie1996/mvp_demo

責任編輯:未麗燕 來源: 安卓巴士Android開發(fā)者門戶
相關推薦

2016-12-23 09:09:54

TensorFlowKubernetes框架

2016-12-08 10:03:38

AndroidMVP架構

2014-04-18 10:58:44

AndroidAPI實踐

2017-02-17 10:07:02

AndroidMVP模式實例

2016-12-28 13:55:16

Android框架MVP

2024-05-20 07:28:27

機器學習模型訓練框架PCG

2012-11-05 14:57:50

MVP

2011-04-13 11:38:09

Mockito

2022-08-15 08:01:35

微服務框架RPC

2012-05-14 09:24:19

Android

2010-03-03 18:13:23

Android組成框架

2018-06-08 14:06:02

MVP架構Android

2010-01-27 08:44:56

ASP.NET MVC

2017-03-31 09:45:34

TensorFlow深度學習

2013-04-01 13:55:35

Android開發(fā)Android資源管理

2023-10-23 20:26:09

治理Android

2013-03-27 09:17:17

Android開發(fā)AndroidList

2017-03-02 15:09:29

AndroidAPK瘦身實踐

2023-09-28 08:45:56

開源責任鏈模式

2021-01-25 14:47:51

DevOps數字化運維
點贊
收藏

51CTO技術棧公眾號