Android开发写BaseActivity应该是最常见不过的,那么它具体承担哪些职责、是否也有考虑代码膨胀的问题呢?
注意哈,这里提到的BaseActivity不是指某个类,而是一组功能的组合;
1. BaseActivity设计的基本原则
- 统一模板代码,例如提供initView()、initData()、requestData();
- 处理相同的功能逻辑,例如toast、dialog、关闭输入框;
- 与架构相关的处理,例如MVVN、MVP初始化;
- 与业务相关的统一逻辑处理;
3. BaseActivity架构图
根据上述远程会把BaseActivity拆分成多层;
- BaseActivity负责封装统一的代码模板,以及统一的业务处理,这都是跟业务无关的;
- BaseVMActivity继承BaseActivity,处理跟MVVN架构相关的 ,例如ViewModel的创建、ViewBinding的创建;为什么会有这一层呢?因为上层的架构是不确定的,可能是mvvn、mvp或者其他,所以把它设计成独立的;
- AppBaseVMActivity继承BaseVMActivity,用来处理跟业务强相关的;
- MainActivity就是具体的实现了。
- 拆分成3层,每层都有不同的职责,也是为了解决代码膨胀的问题,我们不能一脑子地将所有逻辑都放BaseActivity,那样会导致这个类变得不好维护;
classDiagram
BaseActivity <|-- BaseVMActivity
BaseVMActivity <|-- AppBaseVMActivity
AppBaseVMActivity <|-- MainActivity
class BaseActivity{
+initView()
+initData()
+requestData()
}
class BaseVMActivity{
-BaseViewModel mViewModel
-ViewBinding mBinding
}
class AppBaseVMActivity{
+X x
+XX xx
+x()
}
class MainActivity{
+XXXX xxxx
+XXXXX xxxxx
+xx()
}
BaseFragment也应该有类型的分层设计,大同小异,这里就不展开说说了,后续对各层实现有详细的分析,有兴趣的可以关注下;