前言

今天有时间就刚好有想写关于这几个名词。对于我来说。事实上这么多名词、思想归根究竟就是要依据项目实际、人员配置来做合理优化,既不能纸上谈兵、又不能畏惧不前。那么合理分阶段架构和完好代码才是关键,本篇文章将以两个思路讲述,第一先说介绍,然后再说优缺点,结合实际开发。

一、MVC介绍

MVC (Model-View-Controller):M是指逻辑模型,V是指视图模型,C则是控制器。一个逻辑模型能够对于多种视图

模型,比方一批统计数据你能够分别用柱状图、饼图来表示。一种视图模型也能够对于多种逻辑模型。

使用MVC的

目的是将M和V的实现代码分离。从而使同一个程序能够使用不同的表现形式。而C存在的目的则是确保M和V的同步。

一旦M改变,V应该同步更新。

二、Android中MVC使用

1.视图层(View):一般採用XML文件进行界面的描写叙述,使用的时候能够很方便的引入。当然。怎样你对Android了解的比較的多了话,

就一定能够想到在Android中也能够使用JavaScript+HTML等的方式作为View层,当然这里须要进行Java和JavaScript之间的通信。幸运的是,

Android提供了它们之间很方便的通信实现。     

 2.控制层(Controller):本层应该是跟业务最挂钩的一层。是用户能操作的入口,在android中仅仅有activity。ios中有Controller,

在这边activity中要做的就是业务导向。详细实现模块功能能够封装到model层,长时间操作例如以下载、上传、等都能够放线程或者服务等。

 3.模型层(Model):对数据库的操作、对网络等的操作都应该在Model里面处理,当然对业务计算等操作也是必须放在的该层的。

还有数据模型都能够放在本层。

三、MVC长处

从用户的角度出发,用户能够依据自己的需求。选择自己合适的浏览数据的方式。

比方说,对于一篇在线文档,

用户能够选择以HTML网页的方式阅读,也能够选择以pdf的方式阅读。从开发者的角度,MVC把应用程序的

逻辑层与界面是全然分开的。最大的长处是:界面设计人员能够直接參与到界面开发,程序猿就能够把精力放

在逻辑层上。而不是像曾经那样,设计人员把全部的材料交给开发者,由开发者来实现界面。

在Eclipes工

具中开发Android採用了更加简单的方法,设计人员在DroidDraw中设计界面。以XML方式保存。

在Eclipes中直接打开就能够看到设计人员设计的界面。

四、MVP介绍

MVP作为MVC的演化版本号,那么相似的MVP所相应的意义:M-Model-模型、V-View-视图、P-Presenter-表示器。 

从MVC和MVP两者结合来看,Controlller/Presenter在MVC/MVP中都起着逻辑控制处理的角色。起着控制各业务

流程的作用。


MVP与MVC最不同的一点是M与V是不直接关联的也是就Model与View不存在直接关系,这两者之

间间隔着的是Presenter层,其负责调控 View与Model之间的间接交互,MVP的结构图例如以下所看到的,对于这个图理解

就可以而不必限于当中的条条框框,毕竟在不同的场景下多少会有些出入的。在
Android中很重要的一点就是对UI的

操作基本上须要异步进行也就是在MainThread中才干操作UI。所以对View与Model的切断分离是合理的。此外

Presenter与View、Model的交互使用接口定义交互操作能够进一步达到松耦合也能够通过接口更加方便地进行

单元測试。

四、MVP长处缺点

1.长处:
Presenter这一层处理着程序各种逻辑的分发,收到View层UI上的反馈命令、定时命令、系统命令等指令后分发处理

逻辑交由Model层做详细的业务操作。在这里能够看到本身activity要做的事情被抽离出来,降低activity与view的业务

耦合,这样有利于维护、易开发,降低降低activity中代码和业务抽离模块化。

2.缺点
mvp架构会抽离一层、这一层是业务分发,假设项目越来越大、人越来越多。假设业务许多。而且易改动的话,抽

离的一层会变的易读性降低。还有开发团队假设不能坚持,要又一次架构。基本要又一次写一遍,所以要谨慎谨慎。

五、MVVM介绍

MVVM首先是基于mvc演变而来的,讲到这里那么MVVM代表啥里。MVVM模式包括了三个部分:Model
– 代表你的
基本业务逻辑。View
– 显示内容,ViewModel – 将前面两者联系在一起的对象。

一个ViewModel接口提供了两个东西:

动作和数据。动作改变Model的下层(click
listener。监听文字改变的listener等等),而数据则是Model的内容,代表
第三方库:RoboBinding等,github:https://github.com/RoboBinding/AndroidMVVM.

六、MVVM优缺点

1.长处

ViewModel大致上就是MVP的Presenter和MVC的Controller了,而View和ViewModel间没有了MVP的界面接口,而是直接

交互。用数据“绑定”的形式让数据更新的事件不须要开发者手动去编写特殊用例,而是自己主动地双向同步。数据绑定你能够

觉得是Observer模式或者是Publish/Subscribe模式,原理都是为了用一种统一的集中的方式实现频繁须要被实现的数据更新

问题。比起MVP。MVVM不仅简化了业务与界面的依赖关系,还优化了数据频繁更新的解决方式,甚至能够说提供了一种有

效的解决模式。

2.缺点

MVVM是数据模型绑定视图方式,降低代码、降低了数据更新,但假设是负责业务逻辑或者是高频发业务改动,对于代码理

解会有所降低。而且要使用第三方架构。这个是我最不喜欢的一点。

Android中MVC、MVP、MVVM具体解释的更多相关文章

  1. Android App的设计架构:MVC,MVP,MVVM与架构经验谈

    相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...

  2. Android App的设计架构:MVC,MVP,MVVM与架构AAAAA

    1. 架构设计的目的1.1 通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.1.2 这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点,提高程序开发的效率,并且更容易进行后续 ...

  3. android MVC && MVP && MVVM分析和对比

    相关:http://www.cnblogs.com/wytiger/p/5305087.html 出处http://blog.csdn.net/self_study,对技术感兴趣的同鞋加群544645 ...

  4. 浅析前端开发中的 MVC/MVP/MVVM 模式

    MVC,MVP和MVVM都是常见的软件架构设计模式(Architectural Pattern),它通过分离关注点来改进代码的组织方式.不同于设计模式(Design Pattern),只是为了解决一类 ...

  5. MVC, MVP, MVVM比较以及区别

    MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下 ...

  6. 浅谈Android架构之MVP,MVVM

    概述 MVP(Model-View-Presenter)是传统MVC(Model-View-Controller)在Android开发上的一种变种.进化模式.主要用来隔离UI.UI逻辑和业务逻辑.数据 ...

  7. 用户界面编程模式 MVC MVP MVVM

    用户界面编程模式 MVC MVP MVVM 程序 = 数据 + 算法 数据:就是待处理的东西 算法:就是代码 涉及到人机交互的程序,不可避免涉及到界面和界面上显示的数据原始方式是界面代码和逻辑代码糅合 ...

  8. MVC, MVP, MVVM比较以及区别(上)

    MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下 ...

  9. [转]MVVM架构~mvc,mvp,mvvm大话开篇

    MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负 责显示.作为一种新的模式,MVP与MVC有着一 ...

随机推荐

  1. Source Insight常用快捷键及注释快捷键设置

    转:http://blog.csdn.net/tlaff/article/details/6536610 在使用SI过程中,我根据自己的使用习惯修改了它的默认快捷键,并且在配置文件中添加了一些人性化功 ...

  2. linux 环境下git 命令小结

    转载自:http://blog.chinaunix.net/uid-28241959-id-3880025.html 本地建立仓库 先创建个文件夹,仓库的地点: mkdir cangkumkdir C ...

  3. Git分布式开发之生成ssh公钥

    1.在Preferences>Network Connections>SSH2,切换至Key Management面板,点击 2.点击生成Genarate RSA Key,并修Commne ...

  4. C语言指针加1问题以及字节对齐问题

    今天早上自己写了一段代码,然后测试的时候发现结果总是和预期的不一样,而且偏差的有点离谱,冥思苦想了将近五个小时,最后在我要开始怀疑人生的时候,发现原来是自己犯了一个极其低级但又容易被忽略的问题.好吧, ...

  5. sqlmap的篡改绕过WAF

    space2comment.py Replaces space character (‘ ‘) with comments ‘/**/’ Example: * Input: SELECT id FRO ...

  6. Qt 串口类QSerialPort 使用笔记

    Qt 串口类QSerialPort 使用笔记 虽然现在大多数的家用PC机上已经不提供RS232接口了.但是由于RS232串口操作简单.通讯可靠,在工业领域中仍然有大量的应用.Qt以前的版本中,没有提供 ...

  7. JavaScript逻辑and、or、not运算符详解

    一.AND详解: 在JavaScript中,逻辑 AND 运算符用双和号(&&)表示. 需要说明的是:逻辑AND运算的运算数可以是任何类型的,不止是Boolean值,如果某个运算数不是 ...

  8. SQL OUTER JOIN

    When we want to select out all the record from two table, no matter it's present at second table or ...

  9. DNS named.conf文件详解

    配置文件: /etc/named.conf /在NAMED.CONF         配置文件中使用//和/* */来进行注释, options { /*OPTIONS选项用来定义一些影响整个DNS服 ...

  10. 【云计算】使用privilege权限对Docker内核参数进行定制

    探讨Docker容器中修改系统变量的方法 探讨完Docker对共享内存状态持久化的支持状况后,我将遗留产品build到一个pre-production image中,测试启动是否OK.很显然,我过于乐 ...