Android快捷建立MVP模板

2021-10-01 22:59:48 字數 2115 閱讀 8016

序言:

mvp 是從經典的模式mvc演變而來,它們的基本思想有相通的地方:controller/presenter負責邏輯的處理,model提供資料,view負責顯示。作為一種新的模式,mvp與mvc有著乙個重大的區別:在mvp中view並不直接使用model,它們之間的通訊是通過presenter (mvc中的controller)來進行的,所有的互動都發生在presenter內部,而在mvc中view會從直接model中讀取資料而不是通過 controller。

隨著越來越多的開發者的開發方式從mvc演變至mvp後,乙個讓人頭疼的事情尾隨而至,相信很多開發者都有過類似的體會,當新寫任意乙個v類時,都需要去建立對應的p,m,甚至contract,建立這些類,並讓這些類保持關聯關係的過程,其實是時分痛苦的,因為它的過程相似,但是你又不得不每次去寫。

解決辦法:

應對這種問題,github上可以找到一系列的解決辦法,多數推薦的是使用基於android studio的mvp外掛程式,我也嘗試過幾個,確實可以快速生成m,v,p相關的類,但關聯關係以及內部預設方法無法進行調整,存在一定的侷限性,且不適用其他的ide,適用性不強。於是,從快速完成具有相似性的事件出發,我想到了最近較火的python,這種事情,完全可以使用指令碼命令來協助完成。

看到上面的流程,想想每次新建頁面都需要這樣的一系列操作,作為一名合格的碼農,肯定是不能忍的,於是乎,基於python的懶人版的建立方式就出現了。當前mvp.py基於python3.7.3。測試後可正常使用。

github連線:      可使用**hotfix_1.0.0測試

python建立mvp模板基本思路:

準備乙個mvp模板,做一定的實現,以後的mvp檔案及資料夾建立,都需要使用該模板來建立。

當需要新寫乙個頁面activity或fragment時,首先需要開發者明確在哪個包下的那個資料夾下建立這個activity或fragment。例如需求:在cn.com.cg.test.main包下建立乙個基於mvp的loginactivity(登入)頁面

開發者使用命令列,將包路徑cn.com.cg.test.main ,需要建立的頁面名稱login以及需要建立的頁面型別activity(或者fragment)傳入mvp.py中。(示例命令:python  mvp.py  cn.com.cg.test.main  login  activity)

mvp.py將自動在指定的包下建立指定名稱的頁面的mvp模式的資料夾和檔案。(建立過程其實就是將模板mvp檔案及資料夾複製到指定的包下,然後將頁面名稱替換成指定名稱,將各個類裡面的import路徑改為指定包的路徑。至於mvp之間的關聯及繼承關係,以及各類中的初始化操作,都已在模板mvp中就已經實現好了。)

開發者直接使用已經建立好的mvp類進行開發。

基於python建立mvp模板的好處:

模板內部可自由增刪,例如希望建立出的mvp檔案中,預設寫好oncreate方法,則只需在mvp模板新增該方法,之後通過命令建立傳來的mvp檔案,都將預設包含oncreate方法,相比只用android studio的mvp外掛程式建立,模板可隨意改變,更加靈活。

預設做了mvp的關聯關係,減少了需要寫的**量。例如,測試的模板中,預設讓view持有了對應的presenter。

相比較上邊繁瑣的建立資料夾,檔案

例如,新建testmvp資料夾,作為mvp承載容器:

現在想建立乙個register頁面和乙個person頁面,執行以下命令:

android 建立快捷方式

1 新增許可權 必須 com.android.launcher.permission.install shortcut 2 新增快捷鍵 public static void setupshortcut activity activity 3 快捷鍵也可以指向非launcher activity,只需...

Android中的MVP架構

model 業務邏輯和實體模型 controllor 是應用程式中處理使用者互動的部分,activity來充當。檢視 view 負責介面資料的展示,與使用者進行互動,就是activity 主導器 presenter 相當於協調者,是模型與檢視之間的橋梁,將模型與檢視分離開來。通過presenter進...

Android中的MVP模式

mvp簡介 model 業務邏輯和資料處理 資料庫儲存操作,網路資料請求,複雜演算法,耗時操作 view 對應於activity,負責view的繪製以及與使用者互動。presenter 負責完成view於model間的互動 責任劃分 model 定義並實現獲取資料操作 如資料庫讀取 網路載入 的介面...