最近由於換工做的緣由沒有寫博客,如今慢慢穩定了,我準備寫一些關於Android 進階的文章,也是爲了督促本身學習,你們一塊兒進步!
今天詳細的分析一下Android APP架構之一:MVC算法
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯彙集到一個部件裏面,在改進和個性化定製界面及用戶交互的同時,不須要從新編寫業務邏輯。MVC被獨特的發展起來用於映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中。
你們有對MVC不瞭解的直接去百度百科,這裏就不作過多的講解了。數據庫
M層:適合作一些業務邏輯處理,好比數據庫存取操做,網絡操做,複雜的算法,耗時的任務等都在model層處理。segmentfault
MVC每層都有了解後,再對它構建一個導向圖微信
咱們在寫項目的時候activity太臃腫,須要把View與Model進行分離,這樣的好處:
1.耦合性低,利用MVC框架使得View(視圖)層和Model(模型)層能夠很好的分離
2.方便維護
3.不用重複的寫相同的業務邏輯,實現Model與Model之間的調用,Controller也能夠直接調用Model 來實現代碼複用網絡
以以前作過的一個需求舉例吧,「獲取個人評論列表」 目的就是獲取評論的數據,並顯示出來架構
XML視圖佈局我這裏就再也不寫了,無非就是按鈕、列表控件以及須要更新的item佈局控件mvc
爲了實現View模塊與Model的交互 (也就是Model執行完業務邏輯以後,須要通知給View去展現數據) 咱們須要定義一個MyCommentListener框架
public interface MyCommentListener { /** * 加載個人評論列表成功的回調 */ void onMyCommentSuccess(MyCommentBean s); /** * 加載個人評論列表失敗的回調 */ void onMyCommentFailure(); }
Controller與Model交互,也就是C層告訴M層獲取評論的請求, 它們之間的聯繫經過MyCommentModelide
public interface MyCommentModel { /** * 獲取個人評論列表信息 */ void getMyCommentInfo(List<MyCommentBean.ResultBean> list, String page, MyCommentListener myCommentListener); }
實現獲取評論列表的邏輯,這很顯然是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(); } }); } }
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過於依賴
你們能夠關注個人微信公衆號:「秦子帥」一個有質量、有態度的公衆號!