常用框架后端资源精选性能优化

Android App的设计架构:MVC, MVP, MVVM

2016-12-22  本文已影响2824人  格子林ll

目前已转至个人博客,本系列地址:Lam's Blog - Knowledge as Action

前言

本文基于周鸿博的文章Android App的设计架构:MVC,MVP,MVVM与架构经验谈,同时结合网上其余与MVC,MVP,MVVM相关的文章。

关于重构的一些话

该文章可以作为项目初期架构选型时的参考,也可作为项目开展一些阶段之后进行重构的参考,所以首先扯点题外话:为什么我们需要重构?

框架介绍与选择

MVC

MVC

MVC简介

MVC全名是Model View Controller,如图,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
其中M层处理数据,业务逻辑等;V层处理界面的显示结果;C层起到桥梁的作用,来控制V层和M层通信以此来达到分离视图显示和业务逻辑层。

Android中的MVC

Android中界面部分也采用了当前比较流行的MVC框架,在Android中

MVP

MVP简介

MVP从更早的MVC框架演变过来,与MVC有一定的相似性:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。
MVP框架由3部分组成:View负责显示,Presenter负责逻辑处理,Model提供数据。在MVP模式里通常包含3个要素(加上View interface是4个):

MVP的优点

MVP模式的一些弊端:

MVP的变种:Passive View

MVP的变种有很多,其中使用最广泛的是Passive View模式,即被动视图。在这种模式下,View和Model之间不能直接交互,View通过Presenter与Model打交道。Presenter接受View的UI请求,完成简单的UI处理逻辑,并调用Model进行业务处理,并调用View将相应的结果反映出来。View直接依赖Presenter,但是Presenter间接依赖View,它直接依赖的是View实现的接口,相对于View的被动,那Presenter就是主动的一方。对于Presenter的主动,有如下的理解:

MVP实践

Google官方MVPDemo

MVC → MVP

MVC → MVP

当我们将Activity复杂的逻辑处理移至另外的一个类(Presenter)中时,Activity其实就是MVP模式中的View,它负责UI元素的初始化,建立UI元素与Presenter的关联(Listener之类),同时自己也会处理一些简单的逻辑(复杂的逻辑交由 Presenter处理)。
MVP的Presenter是框架的控制者,承担了大量的逻辑操作,而MVC的Controller更多时候承担一种转发的作用。因此在App中引入MVP的原因,是为了将此前在Activty中包含的大量逻辑操作放到控制层中,避免Activity的臃肿。

两种模式的区别:

MVVM

MVVM最早应用于Windows的WPF中,在安卓上使用该框架需要对谷歌的data-binding框架有一定的了解才能熟练使用。MVVM可以算是MVP的升级版,其中的VM是ViewModel的缩写,ViewModel可以理解成是View的数据模型和Presenter的合体,ViewModel和View之间的交互通过Data Binding完成,而Data Binding可以实现双向的交互,这就使得视图和控制层之间的耦合程度进一步降低,关注点分离更为彻底,同时减轻了Activity的压力。但是由于去除了Presenter层,会导致view层依然过重,所以衍生了其他类似于MVPVM框架。
刚开始理解这些概念的时候认为这几种模式虽然都是要将view和model解耦,但是非此即彼,没有关系,一个应用应该只会用一种模式。后来发现这几种模式的边界并非那么明显,可能你在自己的应用中都会用到。实际上也根本没必要去纠结自己到底用的是MVC、MVP还是MVVP,不管黑猫白猫,捉住老鼠就是好猫。


MVPVM

MVC → MVP → MVVM 的演进过程

MVC → MVP → MVVM

MVC → MVP → MVVM 这几个软件设计模式是一步步演化发展的,MVVM 是从 MVP 的进一步发展与规范,MVP 隔离了MVC中的 M 与 V 的直接联系后,靠 Presenter 来中转,所以使用 MVP 时 P 是直接调用 View 的接口来实现对视图的操作的,这个 View 接口的东西一般来说是 showData、showLoading等等。
M 与 V 已经隔离了,方便测试了,但代码还不够优雅简洁,所以 MVVM 就弥补了这些缺陷。在 MVVM 中就出现的 Data Binding 这个概念,意思就是 View 接口的 showData 这些实现方法可以不写了,通过 Binding 来实现。

一点总结

参考文章

Android App的设计架构:MVC,MVP,MVVM与架构经验谈
浅谈Android架构之MVP,MVVM
认清Android框架 MVC,MVP和MVVM
如何构建Android MVVM 应用框架

上一篇 下一篇

猜你喜欢

热点阅读