3分钟看懂程序员常用的Android MVC和MVP、MVVM的分析

image.png

前言

想必大家都是Android手机应用开发者,那应该都对Android各种手机型号感兴趣,我本人平时也很喜欢,不小心看到了上面的那张图,很清晰了对比了三大处理器的区别。你们可以自己先好好理解一下。
我个人认为的是:

  • 联发科CPU:一核有难、九核围观。

如果你的手机用的是联发科处理器,你就有必要要好好看看了,当你用你的手机做性能测试的时候可以看到,10个cpu只有第一个一直在增加 其他剩余的9个cpu可以说一直是百分之0. 就算第一个cpu已经达到了百分之百,其他九个cpu还是一直是0,我之前亲身的测过。所以为什么说有人吐槽联发科这个那个。

  • 高通骁龙CPU:一方有难、八方支援

高通现在可是一些人关注的焦点,玩游戏真的是很流畅。最近新出的845处理器更有噱头说可以碾压A11处理器。首先他的特点就是10个cpu都分配均匀,不会导致联发科那样只有一个人在工作。这样的话性能肯定会很强很多。

  • 苹果A处理器:一核更比8核强

苹果处理器没的说。单核强大,稳定 再加上ios的系统本身流畅,所以也导致了为什么很多人都喜欢IPhone。

好了就给大家科普这么多吧 ,对接下来理解MVC 和 MVP有帮助。如果你是对手机研究深的大神,那我可能板门弄斧了哈哈..

image.png

如果说起Android架构,那就可能要说起 Android中的MVC MVP 和MVVM了,后面又有模块化和插件化,对此,关于哪种架构更好的争论从未停止。

根据郭神观点:脱离实际项目比较这些模式优劣毫无意义,各种模式都有优点和缺点,没有好坏之分。越高级的架构实现起来越复杂,需要更多的学习成本更多的人力,所以说技术选型关键是在你自己项目的特点,团队的水平,资源的配备,开发时间的限制,这些才是重点!但是不少团队本末倒置,把mvvm往自己的项目硬套。

下面我从两大块讲下我理解的Android架构:代码层面,主要是MVC和MVP的理解。项目层面,主要是怎么搭建整个项目,怎么划分模块。

一、MVC(Model-View-Controller)

关于MVC、MVC即Model-VIew-Controller。他是1970年代被引入到软件设计大众的。MVC模式致力于关注点的切分,这意味着model和controller的逻辑是不与用户界面(View)挂钩的。因此,维护和测试程序变得更加简单容易。

MVC是比较直观的架构模式。
用户操作->View(负责接收用户的输入操作)->Controller(业务逻辑处理)->Model(数据持久化)->View(将结果反馈给View)。

MVC使用非常广泛。比如JavaEE中的SSH框架(Struts/Spring/Hibernate),Struts(View, STL)-Spring(Controller, Ioc、Spring MVC)-Hibernate(Model, ORM)以及ASP.NET中的ASP.NET MVC框架,xxx.cshtml-xxxcontroller-xxxmodel。(实际上后端开发过程中是v-c-m-c-v,v和m并没有关系,下图仅代表经典的mvc模型)。

简单来说:
MVC模式的意思是,软件可以分成三个部分。

image.png

★ 视图(View):用户界面。
★ 控制器(Controller):业务逻辑
★ 模型(Model):数据保存

各部分之间的通信方式如下:

image.png

1.View 传送指令到 Controller。
2.Controller 完成业务逻辑后,要求 Model 改变状态。
3.Model 将新的数据发送到 View,用户得到反馈。

所有通信都是单向的。

二、MVP(Model-View-Presenter)

MVP是把MVC中的Controller换成了Presenter(呈现),目的就是为了完全切断View跟Model之间的联系,由Presenter充当桥梁,做到View-Model之间通信的完全隔离。

NET程序员熟知的ASP.NET webform、winform基于事件驱动的开发技术就是使用的MVP模式。控件组成的页面充当View,实体数据库操作充当Model,而View和Model之间的控件数据绑定操作则属于Presenter。控件事件的处理可以通过自定义的IView接口实现,而View和IView都将对Presenter负责。

简单来说:
MVP 模式将 Controller 改名为 Presenter,同时改变了通信方向。

image.png
  1. 各部分之间的通信,都是双向的。
  2. View 与 Model 不发生联系,都通过 Presenter 传递。
  3. View 非常薄,不部署任何业务逻辑,称为"被动视图"(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。

三、MVVM(Model-View-ViewModel)

如果说MVP是对MVC的进一步改进,那么MVVM则是思想的完全变革。
它是将“数据模型数据双向绑定”的思想作为核心,因此在View和Model之间没有联系,通过ViewModel进行交互,而且Model和ViewModel之间的交互是双向的,因此视图的数据的变化会同时修改数据源,而数据源数据的变化也会立即反应到View上。
这方面典型的应用有.NET的WPF,js框架Knockout、AngularJS等。

简单来说:
MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。

image.png

唯一的区别是,它采用双向绑定(data-binding):
View的变动,自动反映在 ViewModel,反之亦然。Angular 和 Ember 都采用这种模式。

结束语:

先上结论:

MVC:Model-View-Controller,经典模式,很容易理解,主要缺点有两个:

View对Model的依赖,会导致View也包含了业务逻辑;

Controller会变得很厚很复杂。

所以把MVC理解成联发科不为过,所有的职责积压在了Activity上,导致Activity代码臃肿,导致项目不流畅,所以Activity就是联发科里面那个苦逼的第一个cpu.

MVP:Model-View-Presenter,MVC的一个演变模式,将Controller换成了Presenter,主要为了解决上述第一个缺点,将View和Model解耦,不过第二个缺点依然没有解决。

我个人觉得MVP更像是高通骁龙。分工均匀、解耦、不会导致Activity代码臃肿。替Activity减少了不少代码。这样整个项目的代码都是简洁、清晰。

MVVM:Model-View-ViewModel,是对MVP的一个优化模式,采用了双向绑定:View的变动,自动反映在ViewModel,反之亦然。
至于MVVM给大家推荐这一篇博客。希望大家好好阅读
https://blog.csdn.net/u013406800/article/details/53410766

你可能感兴趣的:(3分钟看懂程序员常用的Android MVC和MVP、MVVM的分析)