【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
先来介绍下本文结构:
- 三种框架的具体概念
- 在安卓开发上的写法、优缺点
1.概念
1.1 MVC
MVC模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),以便于程序的分层开发。
MVC模式最早由Trygve Reenskaug在1978年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件架构。——维基百科
- Model(模型) - 定义用户界面所需要被显示的数据模型以及这个数据模型包含着相关的业务逻辑。
- View(视图) - 呈现给用户的终端界面,主要用于模型中数据的可视化。
- Controller(控制器) - 作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。
图中的两种虚线其实分别对应着Android开发过程中的MVC模式2中写法,接下来会详细介绍。
1.2 MVP
MVP模式(Model-view-presenter)可以说是MVC模式的一种变种。在MVP模式中,为了让UI层能够从逻辑层上分离下来,在UI层与逻辑层之间加了一层Presenter
。而Presenter与它们之间的交互,通常以interface
来规范。无论是UI开发还是数据逻辑开发,都要尊重这个契约、按照它进行设计和开发。
- Model - 定义用户界面所需要被显示的数据模型以及这个数据模型包含着相关的业务逻辑。
- View - 呈现给用户的终端界面,主要用于模型中数据的可视化。
- Presenter - 包含着组件的事件处理,负责检索 Model 获取数据,和将获取的数据经过格式转换与 View 进行沟通。
1.3 MVVM
MVVM模式(Model–view–viewmodel)也是基于MVC演化而来,它主要是基于数据绑定
的框架来优化MVC。MVVM也被称为model-view-binder,像ZK(Java写的一个Web应用框架)和KnockoutJS(一个JavaScript库)也是使用此模式。
MVVM由微软架构师Ken Cooper和Ted Peters开发,通过利用WPF(微软.NET图形系统)和Silverlight(WPF的互联网应用派生品)的特性来简化用户界面的事件驱动程序设计。微软的WPF和Silverlight架构师之一John Gossman于2005年在他的博客上发表了MVVM。
Model与View与上面的基本一致,ViewModel作为它们之间的桥梁,相比于MVP模式,其ViewModel可以看成是View视图的一个模型和Presenter的合体。
通过数据绑定
框架来实现ViewModel和View的绑定:
- 当View变化时会自动更新到ViewModel上。
- 当ViewModel变化时,会自动更新View。
2.写法以及优缺点
MVC
- Model层在安卓中通常就是我们的bean类以及数据获取相关内容。
- View层对应我们的layout.xml布局文件以及Activity,主要因为由于Android中layout.xml功能太弱,大部分视图的操作也需要Activity处理。
- Controller也就对应着我们的Activity。
另外在安卓中MVC主要有两种写法:
- Model层与View层之间没有直接交互,数据改变后先通知C层,由C层去完成视图刷新。
对应MVC图中的<------
- Model层可直接通知View更新。
对应MVC图中的<······
分别对应的缺点:
- 第一种由于Android中layout.xml功能太弱,大部分视图的操作也需要Activity处理。会导致Activity代码过于臃肿。
- 第二种写法会稍微减轻一些Activity的负担,但其会导致Model层和View层过于紧密、耦合。
- 两者都会导致代码难以维护,不方便测试。
优点: 容易编写,结构相对简单。
MVP
- M:依然是数据获取和实体模型
- V:对应xml和Activity,负责View的绘制、用户交互
- P:负责完成View与Model间的交互,将一些业务逻辑处理写在这里,通过接口定义实现。
优点:
MVP模式减轻了Activity的负担,将业务逻辑与视图想分离,降低了耦合性,便于复用代码也便于单个模块测试。
缺点:
- 增加了代码复杂度,对于一些简单模块而言,会让程序变得冗余。
- MVP 架构中,Presenter 对 Activity 与 Fragment 的生命周期是无感知的,所以我们需要手动添加相应的生命周期方法,并进行特殊处理,以避免出现异常或内存泄露
MVVM:
MVVM的架构相对复杂,核心是 Lifecycle*** 组件,在此之上,Google 还开发了 DataBinding、ViewModel、LiveData 以实现完整的 MVVM 架构。
优点:
- 方便单元测试
- 进行绑定后,可以减少模板代码、回调接口的编写,代码更加简洁
缺点:
- 类会增多,增加了引用包。
- 数据双向绑定不利于代码重用。客户端开发最常用的重用是View,但是数据双向绑定技术,让你在一个View都绑定了一个model,不同模块的model都不同。那就不能简单重用View了。
- 一个大的模块中model也会很大,当时长期持有,不释放内存就造成了花费更多的内存。
最后
今年金九银十我花一个月的时间收录整理了一套知识体系,如果有想法深入的系统化的去学习的,可以点击传送门,我会把我收录整理的资料都送给大家,帮助大家更快的进阶。
来源:oschina
链接:https://my.oschina.net/u/4219156/blog/3142922