前言

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

一、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的MVC MVP MVVM模式

    学习Android的同学一定要了解的三种开发模式,不然自己写的项目采用的什么模式都不清楚 MVC,MVP,MVVM都是为了解决UI页面与逻辑代码分离而出现的模式,MVP和MVVM都是MVC的基础上演化 ...

  2. Android中常见的MVC/MVP/MVVM模式

    Android中常见的MVC/MVP/MVVM模式 经典MVC 在1979年,经典MVC模式被提出. 在当时,人们一直试图将纯粹描述思维中的对象与跟计算机环境打交道的代码隔离开来,而Trygve Re ...

  3. mvvm模式和mvc的区别_Android 开发中的架构模式 -- MVC / MVP / MVVM

    预备知识 了解 Android 基本开发 看完本文可以达到什么程度 了解如何分析一个架构模式 掌握 MVC,MVP,MVVM 架构定义和实现 更多面试内容,面试专题,flutter视频 全套,音视频从 ...

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

    本文转载自https://www.tianmaying.com/tutorial/AndroidMVC,原文作者周鸿博. 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开 ...

  5. Android 系统(77)---MVC,MVP,MVVM的区别

    MVC,MVP,MVVM的区别 一.MVC 软件可以分为三部分 1.Model:模型层,负责处理数据的加载或者存储  2. View:视图层,负责界面数据的展示,与用户进行交互  3.Controll ...

  6. [Android答答答]什么是MVC/MVP/MVVM

    什么是MVC/MVP/MVVM? 概念 1.MVC是什么? 2.MVP是什么 3.MVVM是什么 原理 1.MVC的特点是什么 2.MVP的特点是什么 3.MVVM的特点是什么 概念 1.MVC是什么 ...

  7. Android架构设计之MVC/MVP/MVVM浅析

    目录 写在前面 一.案例演示 二.MVC模式 2.1.MVC简介 2.2.MVC模式的使用 2.3.MVC模式的缺点 三.MVP模式 3.1.MVP简介 3.2.MVP模式的作用 3.3.MVP模式的 ...

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

    转载自: http://www.tianmaying.com/tutorial/AndroidMVC 1.架构设计的目的 通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.这样做的好处是使 ...

  9. 浅谈Android中的MVP与动态代理的结合

    浅谈Android中的MVP与动态代理的结合 本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 在Android开发平台上接触MVP足足算起来大概已经有一个年头左右.从最开始到现在经 ...

最新文章

  1. zz Expect的安装
  2. curl 安装_记一次因curl版本过低导致zabbix server不停重启问题及解决方法
  3. 博客5:文件,目录以及用户的权限管理
  4. MariaDB AX开源分析解决方案
  5. 闪退补丁_ArcGIS打开amp;闪退问题
  6. Debian/Ubuntu下安装Apache的Mod_Rewrite模块的步骤分享
  7. linux ssh服务端下载文件,Linux SSH服务端配置文件设置
  8. 【转】xilinx usb下载器 速度高速极限设置 JTAG-SMT2 JTAG-HS2 JTAG-HS3和Platform Cable USB DLC9 DLC10速度测试
  9. 用VC++6.0 编写一个完整的
  10. pb 数据窗口插入数据_46MB 变4.5PB 数据炸弹:新方法突破性压缩资料
  11. 百面机器学习——svm使用信息熵寻找最优划分
  12. 163接收邮件服务器pop3,pop3设置(163邮箱imap pop3设置)
  13. 省市区联动附(2020年省市区数据)
  14. 2021年,我已经说服 27 个人不上培训机构了
  15. 5028: 小Z的加油店2257: [Jsoi2009]瓶子和燃料
  16. Echarts快速入门
  17. 如何识别Android渠道安装来源追踪?
  18. 网管、桌面运维、技术支持 有出路吗
  19. ytb网站报错 “您没有联网,请检查网络连接”
  20. MySQL 8.0踩到的坑(2)

热门文章

  1. 408中的计算机组成原理,2021考研计算机大纲408计算机组成原理部分原文解析
  2. mysql系统属性,mysql
  3. fiddler抓包第一课--手机数据抓包
  4. 栈溢出脚本_污点分析挖掘漏洞演示——如何在8小时内从零发现cve20120158(word溢出漏洞)...
  5. 【java】switch的用法介绍
  6. 编写一个Applet在屏幕上画一组同心圆
  7. oracle分区键使用教程,Oracle表分区学习笔记
  8. python函数测试_Python测试函数的方法之一
  9. 如何选择神经网络的超参数
  10. 深度学习TensorFlow的55个经典案例