[Android]如何做一個崩潰率少於千分之三噶應用app(29)- 重構呼叫解耦

Cang_Wang發表於2018-01-08

大家好,我係蒼王。

以下是我這個系列的相關文章,有興趣可以參考一下,可以給個喜歡或者關注我的文章。

[Android]如何做一個崩潰率少於千分之三噶應用app--章節列表

很多專案都是更新迭代中,才逐漸使用元件化的架構。
可以思考一下以下一些情景。
1.使用GreenDao等orm型別資料庫,如果你只是使用在登入功能當中,並沒涉及到其他資訊儲存,就因為需要獲得使用者物件,你是否一定要將整個物件型別下移到base module呢?

2.網路請求的時候,使用Retrofit等需要註解的框架,如果某個模組也用到這個請求,是否需要整個請求返回物件和請求封裝的interface也下移呢?

想清楚以上的問題,如何能在不更改原有程式碼的基礎上,能夠正常呼叫同一層級的其他業務module程式碼呢?這就是本章介紹的內容了。

這裡可以分為兩種情況,一種是隻涉及邏輯,不涉及介面。第二種是涉及到介面的。

首先介紹第一種做法

架構如下圖
[Android]如何做一個崩潰率少於千分之三噶應用app(29)- 重構呼叫解耦
抽象類解耦設計

1.定義一個空的MBaseApi抽象類

public abstract class MBaseApi {}
複製程式碼

2.定義一個註冊類

public class ModuleApiManager {

    static ModuleApiManager instance = new ModuleApiManager();

    HashMap<Class<?extends MBaseApi>,MBaseApi> aMap;

    public static ModuleApiManager getInstance(){
        return instance;
    }

    private ModuleApiManager(){
        aMap = new HashMap<>();
    }

    public boolean containsApi(Class<?extends MBaseApi> clazz){
        return aMap.containsKey(clazz);
    }

    public <T extends MBaseApi> T getApi(Class<T> clazz){
        return (T) aMap.get(clazz);
    }

    public void putApi(Class<?extends MBaseApi> key,MBaseApi value){
        aMap.put(key, value);
    }

    public void removeApi(Class<?extends MBaseApi> key){
        aMap.remove(key);
    }
}

複製程式碼

3.建立模組的抽象Api class放到BaseModule當中

public abstract class PageNameApi extends MBaseApi{
    public abstract String loadPageName();
}
複製程式碼

4.建立模組Ap實現類,這裡PageNameCore是邏輯類,可以是靜態或者是單例。

public class PageNameImpl extends PageNameApi{

    @Override
    public String loadPageName() {
        return PageNameCore.getInstance().getName();
    }
}
複製程式碼

5.在模組啟動的時候呼叫

ModuleApiManager.getInstance().putApi(PageNameApi.class,new PageNameImpl());
複製程式碼

倘若你定義的Impl實現類是個單例,填入單例也可以。

6.模組呼叫的時候

String pageName = ModuleApiManager.getInstance().getApi(PageNameApi.class).loadPageName();
複製程式碼

這樣做基本不會讓原有的邏輯更改。

如果想使用更新頁面邏輯,可以參考第7節的跨module互動的方式。

這裡通過介面的方式來,改造將BaseApi和抽象類Api改為介面,然後通過註冊實現呼叫。


[Android]如何做一個崩潰率少於千分之三噶應用app(29)- 重構呼叫解耦
介面解耦設計

業務模組中的頁面邏輯View、Activity、Fragment繼承介面Api,然後通過ModuleApiManager註冊,就可以使用了。

下一節將會更精彩,敬請期待!!!

冬天的清晨喚醒你的應該是夢想吧。

群號是316556016,也可以掃碼進群。我在這裡期待你們的加入!!!

[Android]如何做一個崩潰率少於千分之三噶應用app(29)- 重構呼叫解耦
元件化群


相關文章