作為一個android開發中,必須熟悉常見的架構,并區分MVC,MVP,MVVM。Google在2016年3月份推出了Android MVP架構的各種組合,學習價值極高,建議下載下傳回來撸代碼。官方MVP項目的Github位址是:
https://github.com/googlesamples/android-architecture
另外推薦一篇博文:
教你認清MVC,MVP和MVVM
本文主要介紹下官方的MVP架構Demo項目。
一,Google MVP 項目有哪些?
1,目前已有的開源項目:
todo-mvp(mvp基礎架構示例)
todo-mvp-loaders(基于mvp基礎架構項目,擷取資料部分使用了Loaders架構)
todo-mvp-databinding(基于mvp基礎架構項目,使用了資料綁定元件)
2,仍在完善中的開源項目:
todo-mvp-contentproviders(基于mvp基礎架構項目,使用了Content Providers)
todo-mvp-clean(基于mvp基礎架構項目,使用了clean架構的概念)
todo-mvp-dagger(基于mvp基礎架構項目,使用了dagger2進行依賴注入)
二,官方todo-MVP項目的實作方式
官方示例實作mvp的總體的輪廓,關于項目中業務代碼我們僅列出了任務詳情頁(taskDetail)的相關類,其他業務代碼類似.
mvp實作了三層架構
三,測試相關元件
1,示例項目的測試方面。
對視圖邏輯(view層)和業務邏輯(presenter層)進行了拆分,可以對UI、業務代碼分别進行測試。
P層:不需要任何Android環境,是以使用Junit測試即可
V層:使用Google強大的Espresso進行UI的測試
M層:涉及到資料庫相關操作,是以需要依賴Android環境,使用AndroidJUnitRunner進行測試
2,關于單元測試,需要預先了解以下内容:
junit:對業務層進行單元測試。
Android Studio的test和AndroidTest:官方測試架構
AndroidJUnitRunner:一個相容Junit4的Andriod單元測試架構。
Mockito:生成測試mock對象,單元測試利器。
Espresso:進行UI測試。
dexmaker:支撐mockito。
hamcrest:可讀性更高,更加靈活,測試代碼的比對更接近自然語言。
四,todo項目結構
1,view層:負責UI展示,包含了三個子產品:待辦事項清單子產品,待辦事項詳情子產品,統計子產品。
2,presenter層:調用presenter代碼來處理業務邏輯
3,model層:存取資料。和presenter互動,脫離view
MVP模式下,View層做的事情都能做了,如UI布局,資料渲染,點選按鈕互動等。
activity在項目中是一個全局的控制者,負責建立view以及presenter執行個體,并将二者聯系起來。
需要界面做對應的變化,presenter直接調用view層的方法即可。
執行個體中,資料的擷取、存儲、資料狀态變化都是model層的任務,presenter會根據需要調用該層的資料處理邏輯并在需要時将回調傳入。這樣model、presenter、view都隻處理各自的任務。
五,總結
實際的項目中應用了,有些時候想用MVP的,官方的demo的确提供了一個很好的參考。MVC,MVP和MVVM都需要了解。
UI代碼與業務代碼分離,不再像之前的activity那麼臃腫。如此,UI層和業務層可以分别進行單元測試;雖然代碼量可能增加,但各個類職責都非常明确,各司其職,後期的擴充,維護都會更加容易。
杜乾,Dusan,291902259,歡迎交流。