前言
本章主要基于以下几个方向进行 MVx 的讲解,带你玩转 MVx;
MVC、MVP、MVVM、MVI 它们到底是什么?
分文件、分模块、分模式
一个文件打天下
为什么不要用一个页面打天下?
页面是给用户看的,随着版本的迭代,页面上的交互需求也在不断的变化,导致页面不断的在修改,页面在不断的修改,那么这个文件中就不能放太多的代码,否则导致后续迭代起来就很困难;
页面很复杂怎么办?
一个复杂页面,也是由一个一个的 View 组成的,那么我们就可以将 View 拆成自定义 View。同时将这个 View 的相关逻辑,拆分到对应的逻辑处理层;
应用开发原则
- 遵循面向对象的SOLID原则;
- 视图、数据、逻辑分离;
六大原则
- 单一职责
一个 class 完成一件事情;一个 class 只做一件事情,当有更多事情的时候,使用继承,那么就引申出了『开闭原则』;
- 开闭原则
对继承开放,对修改关闭(不能改变基类中的逻辑);多个类文件完成多件事情的时候,使用继承,对文件尽量不做修改;
- 里氏替换原则
子类覆写父类函数的时候,不能改变父类的逻辑;例如:「基类车 有一个 run 方法,子类覆写之后不能改成 fly 方法」
- 依赖倒置原则
不依赖实现,只依赖接口;「例如车在路上跑,车不应该依赖路的具体实现,而是一个路的接口」;
- 接口隔离原则
接口的粒度要小,接口的最小化;『例如,人和路的接口要分别定义,而不是定义成一个接口』;
- 迪米特原则
最小支持原则;
视图、数据、逻辑分离
从静态角度的一个分离,以及生命周期的控制,数据需要在什么情况下进行销毁;
App 架构设计
整体遵循一个 层次化、模块化、控件化;
而模块化又可以细分成:组件化、插件化;
组件化一般针对的都是业务组件,业务组件之间互相不依赖,公共部分抽象成接口,下沉到通用组件;组件化的意义是通过 App 模块把这些组件拼装起来,组装成一个 APK,这种就是在编译期间,它们是一个一个的组件;
而插件化,本质上可以理解为,把这一个一个的组件打包成一个一个的无图标的 APK,然后通过后下载的方式集成到应用中,以此来缩小安装包的体积;
MVx
在 MVx 中,这个 M 基本都是一样的,V 的角色其实是有一些差异的;
MVC
数据层、视图层、控制层(逻辑层)如何定义?
- 数据层
对数据 + 对数据进行的操作(不依赖视图的操作);例如我们利用 RxJava 对数据进行变换的操作,map、flatMap等等,放到 model 层执行;
- 视图层
不同的模式有不同的定义,在 Android 中就是 Activity + xml + fragment;
- 控制层
view 和 model 之间的通信和交互;
在 Andriod 中 xml 布局的功能性太弱, Activity 实际上负责了 View 层与 Controller 层两者的工作,所以在 Android 中 MVC 更像是这种形式,而 Model 层好多人直接把 bean 写在了 model 下,它俩并不能完全相等;