「本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!」
Android架构算是面试中非常常见的一类问题,最近在整理Android相关的一系列基础知识,所以在此对于常见的三种架构: MVC,MVP,MVVM来进行一个简单的梳理和总结。
Android架构的优势
- 灵活的可拓展性
- 方便进行重构
- 更容易进行单元测试
- 较强的可读性
MVC(Model - View - Controller)
- Model 包括了所有数据模型与数据状态,同时负责数据的交互与存储;
- View 包括了呈现给用户的UI以及其他所有和用户的交互;
- Controller 包括了业务逻辑以及Model与View之间的交互,它像是Model与View之间的桥梁,通过Controller可以去操作Model并返回结果显示在View上。
MVC架构的架构图如下:
优势
- Model和View进行了解耦,Model易于进行单元测试
- 整体架构比较简单,开发周期短,速度快
劣势
- 对于安卓来说,Controller中既包含View也包含Controller,十分难以扩展和修改,也很难进行单元测试;
- Model可以直接操作View,所以当View改动时Model和Controller都会需要进行改动。
MVP
Model
包括了所有数据模型与数据状态,同时负责数据的交互与存储(和MVC相同);View
包括了呈现给用户的UI以及其他所有和用户的交互,但同时它包括了一组View Interface可供Presenter进行调用;Presenter
包括了业务逻辑以及Model与View之间的交互,除此之外它还调用了View提供的一组接口,通过接口与View进行通信从而达成了解耦的目的。
MVP架构的架构图如下:
优势
- 通过View Interface解耦了View和Presenter, 在MVP架构中Activity/Fragment只承担VIew的作用从使得Presenter的改变不影响View,反之亦然;
- Model和View同时也进行了解耦,View的改变同时也不会影响Model,反之亦然;
- Presenter非常容易进行单元测试,并且可以灵活地进行重构,改写或扩展;
- View只含有纯UI的代码,易于复用以及在不同View间切换。
劣势
- 会引入大量接口,导致项目代码量激增,
- 代码结构更复杂,难以管理和阅读
MVVM
Model
包括了所有数据模型与数据状态,同时负责数据的交互与存储(和MVC, MVP相同);View
包括了呈现给用户的UI以及其他所有和用户的交互,在MVVM中一般使用xml文件来承载UI,这样可以使用DataBinding框架来进行数据绑定;ViewModel
包括了业务逻辑以及Model与View之间的交互,和MVP中Presenter的职责基本一致,唯一的区别是ViewModel通过DataBinging与View进行通信。使用DataBinding不仅可以大大简化代码量,而且可以感知组件的生命周期,减少内存泄漏。
MVVM架构的架构图如下:
优势
- View和ViewModel通过DataBinding框架实现了松耦合;
- ViewModel易于进行单元测试,因为XML文件不需要测试,所以总体的测试覆盖率非常高。
劣势
- 对于复杂的UI,XML文件的代码量比较大,也比较复杂;
- 整体的代码量也较大,比较冗余。
比较&总结
用一个表格来总结一下三种架构的区别: