Android中MVC、MVP、MVVM具体解释
前言
今天有时间就刚好有想写关于这几个名词。对于我来说。事实上这么多名词、思想归根究竟就是要依据项目实际、人员配置来做合理优化,既不能纸上谈兵、又不能畏惧不前。那么合理分阶段架构和完好代码才是关键,本篇文章将以两个思路讲述,第一先说介绍,然后再说优缺点,结合实际开发。
一、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介绍
– 代表你的
– 显示内容,ViewModel – 将前面两者联系在一起的对象。
一个ViewModel接口提供了两个东西:
listener。监听文字改变的listener等等),而数据则是Model的内容,代表
六、MVVM优缺点
ViewModel大致上就是MVP的Presenter和MVC的Controller了,而View和ViewModel间没有了MVP的界面接口,而是直接
交互。用数据“绑定”的形式让数据更新的事件不须要开发者手动去编写特殊用例,而是自己主动地双向同步。数据绑定你能够
觉得是Observer模式或者是Publish/Subscribe模式,原理都是为了用一种统一的集中的方式实现频繁须要被实现的数据更新
问题。比起MVP。MVVM不仅简化了业务与界面的依赖关系,还优化了数据频繁更新的解决方式,甚至能够说提供了一种有
效的解决模式。
MVVM是数据模型绑定视图方式,降低代码、降低了数据更新,但假设是负责业务逻辑或者是高频发业务改动,对于代码理
解会有所降低。而且要使用第三方架构。这个是我最不喜欢的一点。
Android中MVC、MVP、MVVM具体解释的更多相关文章
- Android App的设计架构:MVC,MVP,MVVM与架构经验谈
相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...
- Android App的设计架构:MVC,MVP,MVVM与架构AAAAA
1. 架构设计的目的1.1 通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.1.2 这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点,提高程序开发的效率,并且更容易进行后续 ...
- android MVC && MVP && MVVM分析和对比
相关:http://www.cnblogs.com/wytiger/p/5305087.html 出处http://blog.csdn.net/self_study,对技术感兴趣的同鞋加群544645 ...
- 浅析前端开发中的 MVC/MVP/MVVM 模式
MVC,MVP和MVVM都是常见的软件架构设计模式(Architectural Pattern),它通过分离关注点来改进代码的组织方式.不同于设计模式(Design Pattern),只是为了解决一类 ...
- MVC, MVP, MVVM比较以及区别
MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下 ...
- 浅谈Android架构之MVP,MVVM
概述 MVP(Model-View-Presenter)是传统MVC(Model-View-Controller)在Android开发上的一种变种.进化模式.主要用来隔离UI.UI逻辑和业务逻辑.数据 ...
- 用户界面编程模式 MVC MVP MVVM
用户界面编程模式 MVC MVP MVVM 程序 = 数据 + 算法 数据:就是待处理的东西 算法:就是代码 涉及到人机交互的程序,不可避免涉及到界面和界面上显示的数据原始方式是界面代码和逻辑代码糅合 ...
- MVC, MVP, MVVM比较以及区别(上)
MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下 ...
- [转]MVVM架构~mvc,mvp,mvvm大话开篇
MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负 责显示.作为一种新的模式,MVP与MVC有着一 ...
随机推荐
- 【spring】RestTemplate发送请求,请求第三方接口 的几种请求方式POST,GET,DELETE,PUSH
org.springframework.web.client.RestTemplate 参考地址:http://www.cnblogs.com/UniqueColor/p/7123347.html G ...
- VS收集插件
有空再做细细解说,大部分童鞋应该都在用1.Achievements这个就是传说中的VS成就插件了,一边编程一边解锁成就 2.Spell Checker拼写检查插件,这个插件能够实时帮你检查注释或字符串 ...
- Hibernate查询语言
HQL(Hibernate Query Language)查询语言是完全面向对象的查询语言,它提供了更加面向对象的封装,它可以理解如多态.继承和关联的概念.HQL看上去和SQL语句相似,但它却提供了更 ...
- Unity的shader学习2
下面继续看基于surface的shader代码,基本与Vertex&Fragment shader差不多,只是不能写pass,然后只需要声明surface函数,就能处理所有的事情. Shade ...
- 82. Remove Duplicates from Sorted List II && i
题目 83. Remove Duplicates from Sorted List Given a sorted linked list, delete all duplicates such tha ...
- Android之旅 自我图示总结四大组件
最近学完了Android的四大组件的基础知识,自己总结了一个图示,希望自己看到这个图的时候能回忆起相关的知识点,与大家分享!
- (转)[ActionScript 3] Google-ProtoBuf for AS
最近由于项目的需要,研究了一下protobuf.在这里分享一下经验,具体介绍网上也有不少,可以百度先了解一下. ProtoBuf在as中主要就是序列反序列化的作用,我们主要用它来代替amf,因为像c+ ...
- STL - 判断式(Predicate) - 单参判断式(Unary Predicate)
Predicate是一种特殊的辅助函数,它会返回Boolean,常常被用来作为排序或者查找准则. Predicate会有1个或者2个操作数. Unary Predicate(单参判断式) 例子: 我们 ...
- TCP/IP 工具Ping
TCP/IP 工具Ping 在网络中Ping 是一个十分好用的TCP/IP工具.它主要的功能是用来检测网络的连通情况和分析网络速度. C:\Users\gechong>ping /? 用法: p ...
- ionic 调用手机的打电话功能
1.需求描述 在ionic项目用调用手机的打电话功能.开始还想找cordova和ng-cordova的插件那,现在H5实现起来特别方便. 2.准备 在cordova中所有的URL Schemes 都是 ...