【Android篇】老生常谈之Android架构(MVC,MVP,MVVM)

1,079 阅读3分钟

「本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,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文件的代码量比较大,也比较复杂;
  • 整体的代码量也较大,比较冗余。

比较&总结

用一个表格来总结一下三种架构的区别:

参考链接

Common Android Architecture

MVC vs MVP vs MVVM Architecture in Android

Android安卓架构MVC、MVP、MVVM之间的区别和联系(图解+案例+源码)