Android MVP Plugin,一鍵完成MVP結構代碼編寫


推薦一個Gradle的學習系列,Gradle相關的知識一直很匱乏,難得發現一個不錯的系列:

 

 

http://www.cnblogs.com/davenkin/p/gradle-learning-1.html

 

 

本文作者

 

本文由螞蟻提供。

螞蟻的博客地址:

http://yugai.github.io/archives/

 

對於MVP,其實是非常適合在Android項目中使用的架構,如果你目前還不清楚MVP的架構究竟是什么樣子,那么可以參考Google給出的示例:

 

https://github.com/googlesamples/android-architecture

 

如果當前這個MVPPlugin不能滿足你的需求(很多時候,會根據自身對MVP結構做調整),你可以自己查看插件的寫法,做一些符合你所使用的規則上的調整,關於插件的寫法:

 

自己編寫Android Studio插件 別停留在用的程度了

 

根據該篇教程,以及本篇文章的實例源碼結合,做一些定制肯定沒問題。

 

1、前言

從Google推出官方MVP架構demo到現在大概有一年多的時間了,半年前大概在所有的Android技術社區都有提到MVP架構,現在關於MVP架構的話題似乎沒有以前那么多了,可能是因為大家都已經能夠熟練的使用MVP了。

 

在這里先炒碗閑飯,提供了一個快速生成MVP模式的插件。

 

https://github.com/yugai/MVPPlugin

 

在Android Studio的設置面板搜索該插件。

 

 

2、遇到的問題與解決方案

關於MVP模式,我自己也使用了很久,實際使用中還是存在很多缺點的。例如一個很簡的activity我們就需要去新建多個類,每個操作之間還需要通過接口回調的方式。雖然邏輯變得更加的清晰了,但隨之而來的是代碼量變得更大。

 

解決方案

那么有沒有什么辦法使MVP模式變得更簡潔,能夠更快速的使用呢?其實大家一般的都會利用泛型封裝一下MVP的base類,通過泛型所提供的類型去實例化View層和Presenter層,在繼承封裝好的基類中可以快速的使用MVP模式。

 

這是的確是極大的提高了使用效率。但是無法避免的是我們在新建任意一個activity的時候都要去新建P層和V層。

 

而且通過泛型約束了之后,導致了我們在繼承的時候需要填寫多個泛型值。這樣的操作無疑相當繁瑣,而且無趣的。

 

后來在幾經思考下,我決定將MVP的模板代碼提取出來,通過插件自動生成那些簡單而又不得不做的操作。

 

3、解決的問題

你如果現在還沒有學習MVP模式,或者你還沒有熟練的使用MVP模式,這個將是你最快使用MVP模式的方式。因為你可能根本就不需要了解如何去搭建一個MVP的架構,只需要去在每一個層級去做好該做的職責就行了。


如果你已經使用過MVP架構的話,其中使用時候的痛楚應該不用多說了。每次在新建一個頁面的時候都需要進行重復的操作,這個插件能快速幫你生成一個簡單模板。

 

注意事項

在使用插件的時候,需要生成一個mvp的文件夾,其中封裝了MVP的架構,你可以根據自己需求去增加各種操作,但是請不要刪除里面的關鍵代碼。注意請先生成mvp的目錄再去創建別的MVP架構的界面。


頁面一般分為activity和fragment,在新建一個activity的時候你可以直接寫類名就好了。

 

例如你再新建頁面的時候填入login,插件會自動幫你生成login的文件夾,其中包含LoginActivity,LoginContract,LoginPresenter文件。

 

如果你要是需要生成一個fragment在新建頁面的時候,需要填寫loginfragment這時候插件也會幫你生成一個login文件夾,只不過LoginActivity變成了LoginFragment。那么你應該知道了,需要創建fragment的時候需要以fragment結尾,當然你也可以以activity結尾,效果和默認的不寫的一樣。

 

每次創建文件夾的時候,可能讀寫的速度有點慢,請等待2s左右。有時候創建完了后AndroidStudio並不會自動刷新文件夾,這時候你點擊下文件夾收縮再展開就好了。

 

4、使用步驟

1.請先搜索安裝MVPPlugin插件。還可以通過我的github中找到插件的jar包,從本地安裝。

 

2.在安裝完畢后,在任意文件夾下點擊新建都會顯示一個MVPFile的選項。

 

 

3.首先我們需要生成一個叫做mvp的文件夾,直接點擊MVPFile選項,輸入mvp即可。一定要先生成這個。

 

 

4.這時候我們就可以新建頁面了,比如我們要新建一個登陸頁面,這時候就可以輸入login,如果我們需要的是一個fragment,就在后綴添加fragment便行。

 

5.這個時候一個頁面也就完成就緒,例如我們需要實現一個登陸的功能,在LoginContract中View接口中編寫成功和失敗的回調,在Presenter接口中編寫登陸調用的接口。


 

6.這時候Activity和Presenter層都會提示錯誤,需要實現回調方法,我們按alt+enter好了。

 

在Activity中已經持有Presenter對象,反之在Presenter也存在View的對象,它們的名字叫mPresenter和mView。(是不是感覺有點神奇?可以自己去看看泛型的實例化,其中有個getInstance()方法算是淫技吧)。

 

之后我們就可套路來做就行了。


 

5、總結

好了,這樣看起來是不是邏輯很清楚了?媽媽再也不用擔心你使用MVP模式了。
實際中我們需要根據自己的需求去修改一下MVP的base類,例如我們每個頁面都有加載,就可以在BaseView中添加,加載中,加載成功和加載失敗的回調,總之一切的自定義取決於你自己。
說了這么多,如果還有朋友不理解怎么使用的話可以去看看我之前的開源項目(https://github.com/yugai/DouYu-Android),這個設計架構也是從中提取出來的。如果沒有了解過MVP架構的也可以參見Google推出實例項目(https://github.com/googlesamples/android-architecture)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM