最近準(zhǔn)備抽時間學(xué)習(xí)一下MVP模式的使用嚷堡,嘗試一些新的東西卦羡,在google查了一圈,最終選定了幾篇比較好的文章,做了下從MVC到MVP的實(shí)踐绿饵,以下是一些心得與總結(jié)。
MVC
MVC全名是Model View Controller瓶颠,是模型(model)-視圖(view)-控制器(controller)的縮寫拟赊,一種軟件設(shè)計典范,用一種業(yè)務(wù)邏輯粹淋、數(shù)據(jù)吸祟、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個部件里面桃移,在改進(jìn)和個性化定制界面及用戶交互的同時屋匕,不需要重新編寫業(yè)務(wù)邏輯。其中M層處理數(shù)據(jù)借杰,業(yè)務(wù)邏輯等过吻;V層處理界面的顯示結(jié)果;C層起到橋梁的作用蔗衡,來控制V層和M層通信以此來達(dá)到分離視圖顯示和業(yè)務(wù)邏輯層纤虽。
參考博客
簡單根據(jù)MVC原則實(shí)現(xiàn)了一個demo,主要功能是輸入手機(jī)號碼绞惦,通過網(wǎng)絡(luò)查詢歸屬地逼纸。界面如下:
主要技術(shù)及排坑:
(1)使用Retrofit2.0 + OkHttp + fastjson實(shí)現(xiàn)網(wǎng)絡(luò)通信
(2)由于Retrofit不支持fastjson,需要自己去寫一個fastjson Converter济蝉,主要實(shí)現(xiàn)三個類(Powered by JinSen):
然后需要設(shè)置一下retrofit的converter即可杰刽。
(3)整個MVC框架還是比較簡單的,因為Activity既是Controller又是View王滤,所以主要的工作在于Model贺嫂。
在寫Retrofit網(wǎng)絡(luò)框架的時候主要遇到的問題在于Url的定義,之前在其他文章里也看過關(guān)于Url的寫法問題淑仆,但是沒有注意涝婉,所以就被坑了好長時間。蔗怠。墩弯。
是的,Retrofit2.0使用了新的URL定義方式寞射,有三種寫法渔工,之前看到過的時候還在想居然這么奇葩,然后寫的時候就犯了錯誤桥温,一直使用第三種的寫法引矩,導(dǎo)致始終報303 Found的重定向錯誤。
推薦:使用第二種寫法,不容易出錯旺韭。
(4)在排查上面錯誤的時候氛谜,也拓展了兩個知識點(diǎn):
1. Log Request And Response
在Retrofit2.0里取消了Log的功能,據(jù)說是因為之前的Log功能不夠可靠区端,所以去掉了值漫,等之后有穩(wěn)定版本了再加上。
但是OkHttp是具有Log功能的织盼,具體做法如下:
Retrofit使用說明
推薦一下這個網(wǎng)站杨何,上面有很詳細(xì)的Retrofit2.0的時候方法,同時推薦一下他們的電子書沥邻,雖然有點(diǎn)貴危虱,但是會不斷更新,這一點(diǎn)還是非常良心的唐全。
2. 使用Charles進(jìn)行手機(jī)數(shù)據(jù)包抓取
通過打印Log沒有排查出來錯誤埃跷,然后就通過抓包軟件獲取手機(jī)全部網(wǎng)絡(luò)信息,操作也比較簡單芦瘾,設(shè)置一下代理捌蚊,手機(jī)所有的網(wǎng)絡(luò)通信就全部可以顯示出來了。
(5)MVC模式是一種比較常規(guī)的Android編程模式近弟,但是很多時候Activity/Fragment既負(fù)責(zé)頁面顯示(View)的工作缅糟,又負(fù)責(zé)邏輯控制(Controller)的工作,當(dāng)頁面比較復(fù)雜祷愉,整個Activity/Fragment文件會非常大窗宦,之前的項目里很多文件都超過了1000行,但很多東西又不容易分出去二鳄,這也是我之前一直很煩惱和困惑的地方赴涵。
Github地址:https://github.com/zhangke445566/AndroidDesignPatternTest
之后我會不斷完善這個項目,探索幾種MVP模式的寫法及優(yōu)缺點(diǎn)订讼。