一直慕名Android的MVP模式沒時間去研究,今天就好好記錄一下我所理解的MVP模式。
看別人寫的源碼是最好的學習方法。
這次看的是谷歌的官方示例項目:https://github.com/googlesamples/android-architecture
整體的結構如下:
這個例子主要是做了一個tudo項目,把整體模塊分成了四塊:tudo主模塊、tudo詳情模塊、統計模塊、添加tudo模塊。
項目首先定義了View和Presenter的基類作為所有模塊通用的類,然后每個模塊定義了一個契約類Contract來定義每個模塊View和Presenter要處理的事務接口。
每個模塊先由Activity創建繼承自契約類Contract的View接口的fragment作為MVP的View處理UI業務,然后創建繼承自契約類Contract的Presenter類把fragment傳入,通過基類View的setPresenter方法將View和Presenter綁定在一起。UI初始化在fragment中實現,邏輯入口在Presenter的start方法中開始,fragment中的邏輯部分只需要調用相應的Presenter接口,Presenter中的UI操作也只需要調用相應的View接口,從而實現UI和邏輯代碼的分離。
我想起我之前做的一個項目,也是有這種分離的想法,當時主要有兩個模塊,登錄和支付,于是我創建了兩個單例類、兩個Activity和幾十個fragment,以此來做到View和業務的分離以及View和View之間的分離。其實我當時如果有MVP的思維模式我應該創建2個Presenter,分別對應兩個Activity的UI邏輯,創建2個Model分別對應登錄和支付模塊,多個View接口對應fragment。