說到MVP,Android 開發(fā)者肯定會參考Google 的基礎(chǔ)實(shí)現(xiàn):android-architecture吭露;大體的框架如下:
當(dāng)然大家也應(yīng)該關(guān)注正在成熟的:android-architecture-components椭微,還是對開發(fā)有較大的變更埋虹。
其實(shí)這么久來Android 開發(fā)中就沒有什么很官方的框架咆蒿,我覺得大家可以根據(jù)自己App 的業(yè)務(wù)情況和團(tuán)隊(duì)情況,參考android-architecture(暫時并沒有加入android-architecture-components)然后再封裝定制屬于自己的框架介蛉;雖然業(yè)務(wù)可能千變?nèi)f化,但是基本的一個App 的框架可以由mvp+db+http+Base 抽象+rxjava(處理異步等真的方便)實(shí)現(xiàn)自己的代碼結(jié)構(gòu)溶褪、整體架構(gòu)币旧、可測試性、可維護(hù)性的項(xiàng)目猿妈。
本文主要是記錄自己參考todo?mvp?rxjava 結(jié)合Rxjava2 抽象BaseAct吹菱,BasePresenter,BaseView 等實(shí)現(xiàn)的簡單項(xiàng)目框架的過程。(寫作記錄讓人再次思考反逝碓颉)
項(xiàng)目框架簡介(Demo:Android-MVP-Rxjava2)
- mvp 使用mvp 相對傳統(tǒng)的mvc(并不想講mvvm)帶來的蜜糖不是甜的一點(diǎn)點(diǎn)鳍刷,特別是復(fù)雜的項(xiàng)目。
- rxjava2 改良后的rxjava2 更符合 io32783 Stream 的操作俯抖,處理異步的鏈?zhǔn)讲僮骺雌饋砭蜁芰鲿呈涔希巡僮鲾?shù)據(jù)庫和密集度計算的操作調(diào)度到對應(yīng)的線程然后結(jié)果呈現(xiàn)切回主線程會讓程序流暢很多。
google 的todo-mvp 使用的是rxjava1,我不想回去 - 封裝抽象Base 這幾乎就是大學(xué)課本一直在學(xué)的東西芬萍,加上一些泛型的知識
- 可測性 暫時還沒有尤揣,經(jīng)常開發(fā)的時候API 沒有準(zhǔn)備好的情況不要太多,你還在依賴測試小妹的人工黑測柬祠?
- dagger.android 有了這個使用dagger 的時候方便快捷簡單多了芹缔,依賴注入使用變得很簡單,代碼量也很少
代碼的自動生成
大家也發(fā)現(xiàn)了瓶盛,使用MVP 抽象封裝后雖然有那么多的好處最欠,但是代碼的量增加了不少示罗,而且習(xí)慣MVC后入門有點(diǎn)難,剛開始寫起來有點(diǎn)吃力芝硬;我們也從來不干重復(fù)性的勞動蚜点,使用插件進(jìn)行代碼自動生成吧。
根據(jù)自己封裝的MVP模式拌阴,比如你要做等錄绍绘,輸入Login,會自動生成login文件夾和LoginActivity迟赃,LoginPresenter陪拘,LoginModel等,并且這些類的范型纤壁,繼承關(guān)系接口實(shí)現(xiàn)都按照規(guī)則自動生成了代碼左刽。
最后github demo 地址,僅供交流
這個項(xiàng)目簡單的演示了MVP得封裝使用酌媒,主要是抽象出基類欠痴,結(jié)合rxjava2。
包含基類的presenter,model,view ,甚至某個功能你覺得一點(diǎn)沒有必要mvp 你可以直接繼承BaseAcvtivity,否則繼承BaseMVPActivity.
登陸功能比較簡單秒咨,model 層的數(shù)據(jù)都是來源于網(wǎng)絡(luò)喇辽;
在文件夾mvp_more 演示的功能下稍微復(fù)雜一點(diǎn),model 層有l(wèi)ocal(db)+remote(http).其中讀取db 流程用rxjava2 包裝了一下雨席,不是在主線程完成的菩咨,不然如果查詢數(shù)據(jù)庫比較耗時UI會明顯卡一下,在讀取數(shù)據(jù)的代碼打一個斷點(diǎn)你會發(fā)現(xiàn)調(diào)試到斷點(diǎn)處不進(jìn)行下一步UI依然可以隨意操作陡厘,如果是主線程肯定不行旦委。
為什么一定要引入Rxjava(2)
當(dāng)業(yè)務(wù)邏輯復(fù)雜繁瑣的時候依然能保持代碼的簡潔性
http 的請求和處理使用Retrofit 線程調(diào)度等和R x j a v a 有天然的易結(jié)合
某些需要異步處理的業(yè)務(wù)
后臺計算不能影響UI 操作的流暢,比如上班打卡中計算能否打卡可能很復(fù)雜雏亚,需要間隔計算但是不能影響查看打卡列表缨硝,異步操作就非常方便Rxjava2 的過濾,變換罢低,組合等操作符集
比如像JD 等購物網(wǎng)站對結(jié)果根據(jù)價格顏色等進(jìn)行篩選可以非常的方便操作