Android的架構主體演變
在過去Android一直在MVC、MVP中探索。在2019基本沒有誰再去糾結這兩個架構了,因爲Android的Jetpack提供了MVVM架構,說到MVVM架構我第一時間想到剛剛畢業的時候,在WPF的window開發中使用到MVVM的數據綁定。如果你是一個初學者我的建議是直接忽略MVP架構,直接入門MVC,開發MVVM。
最佳架構
對於MVVM,google提供了Jetpack組件。成爲Android最佳架構實踐。可以通過以下網址學習和探索:https://developer.android.com/jetpack 。Jetpack組件已經植入了Android的SDK,從這一點可以看出最佳架構不是徒有空名的,那些還在觀念意識上不接受的就快點轉換思維吧。
學習Jetpack中的設計思想
公司的主體Android架構已經切換到了MVVM結構了,而且App運行良好,優勢也漸漸凸顯。在這裏我和大家分享一下我眼中的Jetpack組件值得學習的切入點主要有兩點:構建對象管理器、數據綁定。
構建對象管理器
對於對象的生成和銷燬的管理一直以來都是各大架構的一個主題功能。歸根結底就是一個工廠模式,在Jetpack中我們也看到這個設計模式的應用,在ViewModelProviders和RepositoryProviders。先不看這個兩個類的實現,我們也可以自己去虛擬一下這個兩個類的實現、毫無疑問就是一個構造器,就是使用一個類的輔助new class。根據以往的知識我們需要解決的問題有兩個:
- 構造一個類
- 傳入構造的參數
構造器的好處在呢?一般想到的是統一構造,其實這只是皮毛,最重要的是,統一的構造器對於對象管理服務器,Jetpack主要是考慮到對於ViewModel和Repository的生命週期的綁定。以往我們的Activity的生命週期歷程相對來說是複雜的,對於一般的對象我們只關注創建、銷燬即可。同理ViewModel和Repository也是這樣的生命週期也是簡化的只有創建和銷燬。
對於傳入構造參數主要是使用了
public final class Class<T>{
public Constructor<T> getConstructor(Class<?>... parameterTypes)
throws NoSuchMethodException, SecurityException {
return getConstructor0(parameterTypes, Member.PUBLIC);
}
}
數據綁定
數據的綁定有XML綁定,數據變化觀察綁定。xml佈局綁定使用了DataBinding,數據觀察綁定使用了類似觀察者模式和代碼生成器。
對於觀察者Jetpack組件使用了一個非常簡約的代碼主要是基於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);
}
}
代碼基本結構如下
生成代碼部分,可以去看看AbstractProcessor的使用,這個非常有意思學習完後基本可以玩轉註解的高階了。
最後
寫的東西很皮毛,關鍵是2020年了。技術飛速發展,其實自己還是原地踏步呀。