该系列文章为自学过程中的产出,若有错误,希望热心路人不吝赐教
App Architecture
软件学中有个词叫App Architecture,我们常常把他翻译成应用架构,用来表述一个应用/工程中各模块之间相互协调的关系。联想到我们在公司中的组织架构一样,各部门之间相互协同分工,各司其职。研发部负责项目开发落地,业务部负责方案制备,销售部门负责产品销售等。所以说,一个良好的应用架构可以使得大型应用在迭代过程中有条不紊的进行。从小的来说,开发人员可以通过层级结构快速厘清业务。
MVVM
在Android历史中,MVP曾经是广泛使用的设计模式(design pattern),如今Google已经将MVVM作为推荐模式了,包括一些现代化前端框架也在积极拥抱MVVM,其完整组成是Model+View+ViewModel
Model
翻译过来是模型,在OOP(Object Oriented Programming,即:面向对象编程)中我们会定义许多entity,比如说:
data class Person (
val name: String,
val age: Int,
val hobby: List<String>?
)
在我们跟其他平台统一标准,需要传输某种结构数据的时候,这个模型就成了模具,如果你需要某种材料的某种器具,我只需要找到对应的模具,往里倒入相应材质的浇筑液就好了。假如服务端需要这个人的相关信息,那我只需要将上面的Person类装填对应的name、age以及其他属性,然后直接发送过去就好了。相应的,如果我们从服务端获取到的Person数据,也只要填入Person,然后在对应View显示即可,这便是Model的约束作用。当然,我的Person只定义了name、age、hobby,如果服务端还额外返回了其他属性,这时候由于Model并没有声明这些属性,就会把它们直接抛弃不用。
View
顾名思义,view就是视图,在Android中,UI Controller有Activity和Fragment。那么,UI Controller和其他组件有什么区别呢?区别在于,Android将一些对UI操作的API放到了Activity和Fragment,如果在其他非UI Controller对象中去使用,是会得到编译错误的(Android Studio直接提示),所以我们可以得出结论,只有在涉及到UI操作的时候,我们才会把相关操作交给UI Controller的,这便是View的职责
ViewModel
从单词来看,ViewModel就是上面两者的组合。在实际中,ViewModel便是Model和View的连接桥梁。当用户重新填写了一份表单之后,Android系统首先会更改View,直接效果是,用户可以看到输入框里面的内容变了。但从开发人员的角度来说,如果只是UI变了还是不够的,我们还得拿到这个改变之后的内容。而ViewModel的职能便是将View和Model建立关系,只要用户改了View,Model也会随之而变。同理,假如服务端返回来的Model刷新了,View也同样更新到了最新状态。这种相互改变的关系我们称之为two-way data binding(双向绑定)