引言:

Android框架的发展的过程就是一个不断化繁为简的过程,大家都在研究如何正确方便高效的规范代码。当然这条路也永远不会停止,就像新的芽儿,随着时间的流逝,每天都在长出新的枝叶,每天都在成长。对于技术,每次新框架的提出都在剔除旧框架的诟病和痛点,演变成更方便,更高效,更简洁的新框架,然后新的框架在具体使用中又会带来新的诟病和痛点,反反复复,无穷尽也......从开始使用MVC到使用MVP,从MVP到MVVM,每次框架的提出都有让我们眼前一亮的东西,但具体使用中确还是存在很多的痛点,似乎一直存在一种反作用力来阻止我这样做。但又能怎样?新的芽儿注定会长成参天大树,技术终究只会进步。

概述

MVC

MVC这里就不多说了,大家都熟悉的不能再熟悉了,比较古老的框架了,相信大家也都使用过;

MVC具体使用

  • Model:数据模型,JavaBean

  • View:layout布局文件

  • Control:Activity,处理数据请求,业务逻辑

MVC的诟病

  • View和Control耦合严重,Activity中存在大量的逻辑代码,Activity既是View,又是Control,结构不清晰,Activity中内容太多

MVP

MVP是在MVC的基础上把Control独立出来的模型,简化Control的内容,这里Presenter充当中间代理的角色,view和Model不直接交互,而是通过Presenter

MVP的具体使用

  • Model:实体模型,JavaBean

  • View:Activity和Layout

  • Presenter:View和Model通过Presenter交互

MVP的诟病

  • 粒度很难把握,使用过MVP的都知道,MVP模型需要定义比较多的接口,View需要定义接口,presenter需要定义接口,以前我们使用一个activty能解决的问题,现在要将一个Activity分解成一个View,一个Preseter,一个Model,每个模块都需要使用接口来实现解耦,这样就会导致有时候一个activity中涉及的业务比较多,按每个业务点搭建MVP模型的话,会导致原来一个Activity类能搞定的,现在需要扩展成多个接口,多个类才能实现;粒度大的话,可能结构不清晰;粒度小的话,代码量又会比较大;

  • MVP是以UI和事件为驱动的模型,数据的获取是被动的根据UI变动的,我们更希望是数据变化去更新UI,而不是反过来;

  • Presenter和View耦合度比较高;

  • Presenter类在业务比较复杂情况下,代码量比较大;

MVVM

MVVM是在MVP的基础上,根据谷歌提出的DateBinding方案重新设计的一个灵活高效的框架,MVVM使用ViewModel一层代替原来的Presenter层;

MVVM的使用

  • Model:数据模型,JavaBean

  • View:Activty和Layout

  • ViewModel:View和Model业务逻辑交互

MVVM的优点

数据驱动

在MVVM中,数据的变化可以自动更新view,不需要获取view的引用;

耦合较低

MVP模式中View和Presenter是强耦合的,Presenter需要拿到View的引用,这样当View变动时,Presenter也需要变化,耦合度太高;现在MVVM中,ViewModel只负责数据和业务,View的变化,ViewModel不需要关系,数据变化,View自动更新,耦合度比较低;

View更新

MVVM模型中不用考虑是否在主线程中更新UI,DateBinding会负责在主线程中更新UI的,我们不用担心线程的问题,简单的不止一点点;

可重复利用

一个ViewModel就是一个数据源,可以将一个ViewModel绑定到不同的View中,就可以达到更新view目的

MVVM的诟病

  • MVVM由于是基于google的DataBinding框架的,而DataBinding支持的绑定View还比较少,因此在使用的过程中可能会遇到某些view无法使用DateBinding的情况,这点也是我之前没有使用MVVM的原因

  • 既然存在上面的问题,国内外的大牛已经帮我们封装好了一套使用dateBinding的view库,为避免重复造轮子,我们可以将它引入到我们的项目中直接使用,目前我知道的已经支持常用所有View;

总结

经过上面对不同框架的对比,相信大家都有一个基本的了解,有人会问这么多框架,我们使用那个比较好呢?

个人觉得,技术是在不断进步,旧的框架最终都会被新的框架所代替,我觉得MVVM的提出解决了我们使用其他框架的很多痛点,我觉得使用MVVM会更好点。

Android 设计模式对比的更多相关文章

  1. Android设计模式系列

    http://www.cnblogs.com/qianxudetianxia/category/312863.html Android设计模式系列(12)--SDK源码之生成器模式(建造者模式) 摘要 ...

  2. Android设计模式(五岁以下儿童)--简单工厂模式

    1.面试的时候问这个问题: 在ListView 的item小程序.很多不同的显示风格.或者是,为了更好地维护,不同的样式,应该怎么做? 我一下就想到的是工厂的模式,利用project,编写ViewFa ...

  3. Android 设计模式之MVC模式

    说到Android设计模式的MVC模式,估计很多人都是比较熟悉了,这里深入了解一下MVC到底是怎么回事,以ListView为例子讲解. 一.深入理解MVC概念 MVC即Model-View-Contr ...

  4. 经常使用的android设计模式

    一般来说,经常使用的android设计模式有下面8种:单例.工厂.观察者.代理.命令.适配器.合成.訪问者.   单例模式:目的是为了让系统中仅仅有一个调用对象,缺点是单例使其它程序过分依赖它,并且不 ...

  5. Android设计模式源码解析之桥接模式

    模式介绍 模式的定义 将抽象部分与实现部分分离,使它们都可以独立的变化. 模式的使用场景 如果一个系统需要在构件的抽象化角色和具体化角色之间添加更多的灵活性,避免在两个层次之间建立静态的联系. 设计要 ...

  6. Android 设计模式一:EIT造型

    前言:首先不提造型,我们先来学习公式. 思绪回到于十七世纪中,牛顿提出了简单公式:F=ma:让人们能轻易理解物体运动的复杂<关系>. 再如,于二十世纪初,爱因斯坦发表了简单公式:E=MC平 ...

  7. Android 设计模式 之 单例模式

    http://blog.csdn.net/fangchongbory/article/details/7734199   目录(?)[+] 单例模式常见情景 首先实现1中的单例模式A 实现2中单例模式 ...

  8. Android 设计模式

    简介 项目开发中发现问题.解决问题这个过程中会出现很多问题,比如重复出现.某个问题的遗留,这些问题的本质就是设计模式.今天记录设计模式的知识点. 内容 在java以及其他的面向对象设计模式中,类与类之 ...

  9. 【Android车载系统 News | Tech 3】News 从手机征战到汽车 Android Auto对比CarPlay 2014-12-29

    Google和苹果都试图给用户的汽车带来一个安全和友好的移动体验.Android Auto和CarPlay是这两家公司推出的专为车载而重新设计的移动用户界面,双方目前都在筹备着在明年正式大规模推广. ...

随机推荐

  1. java中的http请求的封装(GET、POST、form表单形式)

    目前JAVA实现HTTP请求的方法用的最多的有两种:一种是通过HTTPClient这种第三方的开源框架去实现.HTTPClient对HTTP的封装性比较不错,通过它基本上能够满足我们大部分的需求,Ht ...

  2. 简单聊一聊那些svg的沿路径运动

    之前遇见动画就很想用css实现,显然有些效果是我们力所不能及,实现起来麻烦,效果不好,让人捉急.其实归结起来,不同的动画有自己的优势,根据实际情况进行取舍.本文就告诉大家如何用SVG写出个简单动画.就 ...

  3. axios的秘密

    vue自2.0开始,vue-resource不再作为官方推荐的ajax方案,转而推荐使用axios. 按照作者的原话来说: “Ajax 本身跟 Vue 并没有什么需要特别整合的地方,使用 fetch ...

  4. 【mysql】模糊查询的使用

    1.like/not like 关键字的模糊查询(SQL模式) 基础模板:  SELECT  *  FROM   test  WHERE name LIKE '%你好_'     :匹配       ...

  5. .Net 环境下比较各种数据库插入操作的性能

    1.简介 再说Windows的异步I/O操作前,先聊聊一些题外话,能帮助我们更好的理解异步I/O操作,常规的Web程序,当用户发起一次请求,当请求通过管道到达客户端的这个过程,会唤起一个线程池线程(后 ...

  6. 小程序开发--template模板

    小程序的template模板可以说是我遇到的最简单的了,看看实例: <template name="article"> <view class='containe ...

  7. 浅谈《think in java》:一 对象导论总结

    清单1. 抽象机制,面向对象程序设计方式 java所基于Smalltalk的特性表现一种纯粹的面向对象设计方式: 万物都是对象 程序是对象的集合(容器),他们通过发送消息(发送请求)来告知彼此所要做的 ...

  8. MySql 踩坑小记

    MySql 踩坑一时爽,一直踩啊一直爽...   以下记录刚踩的三个坑,emmm... 首先是远程机子上创建表错误(踩第一个坑),于是将本地机器 MySql 版本回退至和远程一致(踩第二个坑),最后在 ...

  9. LAMP环境快速搭建

    1.安装httpd [root@localhost httpd]# yum -y install httpd #安装httpd [root@localhost httpd]# chkconfig ht ...

  10. ElasticSearch实战:Linux日志对接Kibana

    本文由云+社区发表 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTFul web接口.ElasticSearch是用Java开发 ...