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{
public Constructor 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年了。技术飞速发展,其实自己还是远点踏步呀。