Android的架構(gòu)主體演變

Android的架構(gòu)主體演變

在過去Android一直在MVC、MVP中探索。在2019基本沒有誰再去糾結(jié)這兩個(gè)架構(gòu)了,因?yàn)锳ndroid的Jetpack提供了MVVM架構(gòu),說到MVVM架構(gòu)我第一時(shí)間想到剛剛畢業(yè)的時(shí)候,在WPF的window開發(fā)中使用到MVVM的數(shù)據(jù)綁定。如果你是一個(gè)初學(xué)者我的建議是直接忽略MVP架構(gòu),直接入門MVC,開發(fā)MVVM。

最佳架構(gòu)

對于MVVM,google提供了Jetpack組件。成為Android最佳架構(gòu)實(shí)踐??梢酝ㄟ^以下網(wǎng)址學(xué)習(xí)和探索:https://developer.android.com/jetpack 。Jetpack組件已經(jīng)植入了Android的SDK,從這一點(diǎn)可以看出最佳架構(gòu)不是徒有空名的,那些還在觀念意識上不接受的就快點(diǎn)轉(zhuǎn)換思維吧。

學(xué)習(xí)Jetpack中的設(shè)計(jì)思想

公司的主體Android架構(gòu)已經(jīng)切換到了MVVM結(jié)構(gòu)了,而且App運(yùn)行良好,優(yōu)勢也漸漸凸顯。在這里我和大家分享一下我眼中的Jetpack組件值得學(xué)習(xí)的切入點(diǎn)主要有兩點(diǎn):構(gòu)建對象管理器、數(shù)據(jù)綁定。

構(gòu)建對象管理器

對于對象的生成和銷毀的管理一直以來都是各大架構(gòu)的一個(gè)主題功能。歸根結(jié)底就是一個(gè)工廠模式,在Jetpack中我們也看到這個(gè)設(shè)計(jì)模式的應(yīng)用,在ViewModelProviders和RepositoryProviders。先不看這個(gè)兩個(gè)類的實(shí)現(xiàn),我們也可以自己去虛擬一下這個(gè)兩個(gè)類的實(shí)現(xiàn)、毫無疑問就是一個(gè)構(gòu)造器,就是使用一個(gè)類的輔助new class。根據(jù)以往的知識我們需要解決的問題有兩個(gè):

  • 構(gòu)造一個(gè)類
  • 傳入構(gòu)造的參數(shù)

構(gòu)造器的好處在呢?一般想到的是統(tǒng)一構(gòu)造,其實(shí)這只是皮毛,最重要的是,統(tǒng)一的構(gòu)造器對于對象管理服務(wù)器,Jetpack主要是考慮到對于ViewModel和Repository的生命周期的綁定。以往我們的Activity的生命周期歷程相對來說是復(fù)雜的,對于一般的對象我們只關(guān)注創(chuàng)建、銷毀即可。同理ViewModel和Repository也是這樣的生命周期也是簡化的只有創(chuàng)建和銷毀。

對于傳入構(gòu)造參數(shù)主要是使用了

public final class Class<T>{
    public Constructor<T> getConstructor(Class<?>... parameterTypes)
        throws NoSuchMethodException, SecurityException {
        return getConstructor0(parameterTypes, Member.PUBLIC);
    }
}

數(shù)據(jù)綁定

數(shù)據(jù)的綁定有XML綁定,數(shù)據(jù)變化觀察綁定。xml布局綁定使用了DataBinding,數(shù)據(jù)觀察綁定使用了類似觀察者模式和代碼生成器。

對于觀察者Jetpack組件使用了一個(gè)非常簡約的代碼主要是基于Observable去拓展

public interface Observable {

    /**
     * Adds a callback to listen for changes to the Observable.
     * @param callback The callback to start listening.
     */
    void addOnPropertyChangedCallback(OnPropertyChangedCallback callback);

    /**
     * Removes a callback from those listening for changes.
     * @param callback The callback that should stop listening.
     */
    void removeOnPropertyChangedCallback(OnPropertyChangedCallback callback);

    /**
     * The callback that is called by Observable when an observable property has changed.
     */
    abstract class OnPropertyChangedCallback {

        /**
         * Called by an Observable whenever an observable property changes.
         * @param sender The Observable that is changing.
         * @param propertyId The BR identifier of the property that has changed. The getter
         *                   for this property should be annotated with {@link Bindable}.
         */
        public abstract void onPropertyChanged(Observable sender, int propertyId);
    }
}

代碼基本結(jié)構(gòu)如下

觀察者.PNG

生成代碼部分,可以去看看AbstractProcessor的使用,這個(gè)非常有意思學(xué)習(xí)完后基本可以玩轉(zhuǎn)注解的高階了。

最后

寫的東西很皮毛,關(guān)鍵是2020年了。技術(shù)飛速發(fā)展,其實(shí)自己還是遠(yuǎn)點(diǎn)踏步呀。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容