最近因爲換工作的原因沒有寫博客,現在慢慢穩定了,我準備寫一些關於Android 進階的文章,也是爲了督促自己學習,大家一起進步!
今天詳細的分析一下Android APP架構之一:MVC
MVC簡介
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件裏面,在改進和個性化定製界面及用戶交互的同時,不需要重新編寫業務邏輯。MVC被獨特的發展起來用於映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中。
大家有對MVC不瞭解的直接去百度百科,這裏就不做過多的講解了。
Android中的MVC
-
M層:適合做一些業務邏輯處理,比如數據庫存取操作,網絡操作,複雜的算法,耗時的任務等都在model層處理。
-
V層:應用層中處理數據顯示的部分,XML佈局可以視爲V層(雖然很牽強)
-
C層:在Android中,Activity處理用戶交互問題,因此可以認爲Activity是控制器,Activity讀取V視圖層的數據
MVC每層都有了解後,再對它構建一個導向圖
我們爲什麼要用MVC?
我們在寫項目的時候activity太臃腫,需要把View與Model進行分離,這樣的好處:
1.耦合性低,利用MVC框架使得View(視圖)層和Model(模型)層可以很好的分離
2.方便維護
3.不用重複的寫相同的業務邏輯,實現Model與Model之間的調用,Controller也可以直接調用Model 來實現代碼複用
從實例中強化了解MVC
以之前做過的一個需求舉例吧,“獲取我的評論列表” 目的就是獲取評論的數據,並顯示出來
步驟:
(1)
XML視圖佈局我這裏就不再寫了,無非就是按鈕、列表控件以及需要更新的item佈局控件
(2)
爲了實現View模塊與Model的交互 (也就是Model執行完業務邏輯之後,需要通知給View去展示數據) 我們需要定義一個MyCommentListener
public interface MyCommentListener {
/**
* 加載我的評論列表成功的回調
*/
void onMyCommentSuccess(MyCommentBean s);
/**
* 加載我的評論列表失敗的回調
*/
void onMyCommentFailure();
}
(3)
Controller與Model交互,也就是C層告訴M層獲取評論的請求, 它們之間的聯繫通過MyCommentModel
public interface MyCommentModel {
/**
* 獲取我的評論列表信息
*/
void getMyCommentInfo(List<MyCommentBean.ResultBean> list, String page, MyCommentListener myCommentListener);
}
(4)
實現獲取評論列表的邏輯,這很顯然是M層
public class MyCommentModelImpl implements MyCommentModel {
/**
* 獲取我的評論列表
* @param list
* @param myCommentListener
*/
@Override
public void getMyCommentInfo(final List<MyCommentBean.ResultBean> list, final String page, final MyCommentListener myCommentListener) {
//加載數據
NetService.getInstance().rxJavaGetMyComment(Constans.USER_ID,page,"10")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new BaseSubscriber<MyCommentBean>() {
@Override
public void handlerSuccess(MyCommentBean s) {
myCommentListener.onMyCommentSuccess(s);
}
@Override
public void onFailure() {
myCommentListener.onMyCommentFailure();
}
});
}
}
(5)
Activity或者Fragment實現MyCommentListener接口,看一下具體的回調:
/**
* 加載數據成功的回調
*/
@Override
public void onMyCommentSuccess(MyCommentBean s) {
//View做一些更新或者顯示的操作
}
/**
* 加載數據失敗的回調
*
* @param type
*/
@Override
public void onMyCommentFailure() {
//View做一些更新或者顯示的操作
}
總結
1.mvc提高了代碼的重用性
1.Model與Model之間可以調用,Controller也可以無障礙直接調用Model
2.Activity或者Fragment中 包含了C層和V層,界面分割的不是很清晰,過於緊密了…
3.View對Model過於依賴
大家可以關注我的微信公衆號:「秦子帥」一個有質量、有態度的公衆號!