Android开发知识

Android 认清MVC与MVVM

2017-05-23  本文已影响72人  付亮

从事Android开发已经有两年多的时间了从最开始的MVC到一年多前开始使用的MVVM,始终都没有能够总结一下这两个框架具体有什么区别,为什么很多应用会从一开的MVC转到MVVM。在开发中MVVM具有哪些MVC没有的优势。下面我会根据我自己在实际应用中的体会来说一下为什么我会用MVVM。

一、MVC
MVC是由Model、VIew、Controller三个部分组成,是Google推荐的应用开发框架。我们先通过一张图我们来了解一下MVC

MVC.png

通过上面的图片我们可以看出MVC框架是单项绑定的,当用户进行操作,触发事件的时候view将事件传递给controller,controller将根据触发事件的不同作出不同的逻辑处理,并将处理结果告诉Model,Model根据结果更新数据通知View进行相应的变化。

在上面我们说MVC是单项绑定的,但是图上面Model与View是双向绑定的。我觉得这可能是MVC的一个重要缺陷吧。Model与View在MVC中是相互感知的,是存在一定的耦合度。而这种耦合在大型项目中所带来的问题就是需要花更多的时间、人力、财力来维护这个项目。这也就是问什么我会使用MVVM框架。但是这就能说明MVC不好么,也不是。我们还是要根据项目类型,充分考虑的项目内的业务逻辑来判断我们使用哪种框架更适合这个项目。

二、MVVM
MVVM是由Model、View、ViewModel三个部分组成,是一个可维护度高、可拓展性强的开发框架。下面我们通过一张图来了解一下MVVM框架。

MVVM.png

通过上面的图片我们可以看出ViewModel与View、Model之间是双向绑定的,View的事件直接传递到ViewModel,ViewModel去对Model进行操作并接受更新,进而反馈到View上。

创建ViewModel可以充分的将Activity与Fragment进行解耦。让Activity和Fragment只做跟View有的事情,将业务逻辑的处理全部移到ViewModel中。ViewMode可以对应多个Activity与Fragment。在多个Activity中引用同一个ViewModel的时候我是在每个Activity中都创建一个ViewModel的实例。如果我们不去创建实例通过其他Activity去传递ViewModel也可以。但是在引用的时候我们需要注意内存泄露的问题,在Activity销毁的时候一定要把对ViewModel的强引用去掉。否则Activity不会被回收。使用MVVM之后你会发现原来混乱不堪的Activity也有一股清流了。充分的解耦之后我们维护项目就方便的多了,项目结构更加清晰,可拓展性也得到了提高。

说说我为什么会从MVC到MVVM。
之前公司的项目是MVC,但是随着业务逻辑的复杂,一个Activity可以达到2000多行的代码量,声明了很多变量,看起来相当乱,结构不清晰。但是使用MVVM我可以把业务逻辑的处理完全跟Activity区分开来,Activity中只引用ViewModel处理的结果集。

以上就是我对MVC与MVVM的理解,如有不对的地方望大家指正。

上一篇下一篇

猜你喜欢

热点阅读