关闭

简单介绍MVC、MVP和MVVM模式

标签: mvpmvcmvvm框架
341人阅读 评论(0) 收藏 举报
分类:

说到这三个框架,应该说是所有做安卓开发的童鞋都会用到的,之前在github上看到一位大神写的相关的demo,觉得用的非常好,在此我介绍下我对这三个框架的理解:

MVC原理图
MVC
MVC,Model View Controller,是软件架构中最常见的一种框架,简单来说就是通过controller的控制去操作model层的数据,并且返回给view层展示,当用户出发事件的时候,view层会发送指令到controller层,接着controller去通知model层更新数据,model层更新完数据以后直接显示在view层上,这就是MVC的工作原理。
对于原生的Android项目来说,layout.xml里面的xml文件就对应于MVC的view层,里面都是一些view的布局代码,而各种java bean,还有一些类似repository类就对应于model层,至于controller层,当然就是各种activity和fragment。套用我上面说的MVC的工作原理来理解,比如你的界面有一个按钮,按下这个按钮去网络上下载一个文件,这个按钮是view层的,是使用xml来写的,而那些和网络连接相关的代码写在其他类里,比如你可以写一个专门的networkHelper类,这个就是model层,那怎么连接这两层呢?是通过button.setOnClickListener()这个函数,这个函数就写在了activity中,对应于controller层。
那么MVC框架有什么缺点呢?问题就在于xml作为view层,控制能力实在太弱了,你想去动态的改变一个页面的背景,或者动态的隐藏/显示一个按钮,这些都没办法在xml中做,只能把代码写在activity中,造成了activity既是controller层,又是view层的情况。如果是一个逻辑很复杂的页面,activity或者fragment本身已经写了很复杂了,这样修改起来不仅麻烦,而且后期很难维护。MVC还有一个重要的缺陷就是view层和model层是相互可知的,这意味着两层之间存在耦合,高耦合对于一个大型程序来说是非常致命的,因为这表示开发,测试,维护都需要花大量的精力。
MVP原理图
MVP
MVP,Model View Presenter,MVP作为MVC的演化,解决了MVC不少的缺点,对于Android来说,MVP的model层相对于MVC是一样的,而activity和fragment不再是controller层,而是纯粹的view层,所有关于用户事件的转发全部交由presenter层处理。
最明显的差别就是view层和model层不再相互可知,完全的解耦,取而代之的presenter层充当了桥梁的作用,用于操作view层发出的事件传递到presenter层中,presenter层去操作model层,并且将数据返回给view层,整个过程中view层和model层完全没有联系。可能有的童鞋会问,虽然view层和model层解耦了,但是view层和presenter层不是耦合在一起了吗?其实不是的,对于view层和presenter层的通信,我们是可以通过接口实现的,具体的意思就是说我们的activity,fragment可以去实现实现定义好的接口,而在对应的presenter中通过接口调用方法。不仅如此,我们还可以编写测试用的View,模拟用户的各种操作,从而实现对Presenter的测试。这就解决了MVC模式中测试,维护难的问题。当然,其实最好的方式是使用fragment作为view层,而activity则是用于创建view层(fragment)和presenter层(presenter)的一个控制器。
MVVM原理图
MVVM
MVVM,Model View ViewmodelModel,它和MVP的区别貌似不大,只是presenter层换成了viewmodel层,还有一点就是view层和viewmodel层是相互绑定的关系,这意味着当你更新viewmodel层的数据的时候,view层会相应的变动ui。
备注
因为本人几个项目里面只用过MVC、MVP框架,所以只能简单的介绍下那么多,有感兴趣的童鞋可以去大神的github上看下:
贴出来大神写的关于这三个框架的demo的GitHub地址
1
0
查看评论

教你认清MVC,MVP和MVVM三种模式

相信大家对MVC,MVP和MVVM都不陌生,作为三个最耳熟能详的Android框架,它们的应用可以是非常广泛的,但是对于一些新手来说,可能对于区分它们三个都有困难,更别说在实际的项目中应用了,有些时候想用MVP的,代码写着写着就变成了MVC,久而久之就对它们三个的选择产生了恐惧感,如果你也是这样的人...
  • Greathfs
  • Greathfs
  • 2016-07-24 23:10
  • 21940

前端框架模式MVC、MVVM和MVP的讲解

复杂的软件必须有清晰合理的架构,否则无法开发和维护。   MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用。   除了MCV模式还有MVVM和MVP模式,下边就来介绍下着三种模式:     一. MVC模式...
  • jason_renyu
  • jason_renyu
  • 2017-02-07 18:53
  • 763

理解MVC,MVP和MVVM设计模式

原文链接:http://www.dotnet-tricks.com/Tutorial/designpatterns/2FMM060314-Understanding-MVC,-MVP-and-MVVM-Design-Patterns.html 有3个非常受欢迎的MV-*系列设计模式:MVC...
  • pkxiuluo01
  • pkxiuluo01
  • 2015-10-24 14:36
  • 23821

iOS中MVC、MVVM、MVP几种模式小结

一、MVC模式的优缺点  优点: 1、开发人员可以只关注整个结构中的其中某一层; 2、可以很容易的用新的实现来替换原有层次的实现; 3、可以降低层与层之间的依赖; 4、有利于标准化; 5、利于各层逻辑的复用。 概括来说,分层式设计可以达至如下目的:分散关注、松散耦合、逻辑复用...
  • li_shuang_ls
  • li_shuang_ls
  • 2015-12-04 16:38
  • 1959

对MVC、MVP、MVVM的理解

最近看了一堆js框架的文档,有点乱,想分门别类整理一下,但是首先需要搞清楚这些框架里面经常谈论的MV*之类的概念。MVC的概念很早就知道,现在发现还有MVP、MVVM,那么这些设计模式有什么区别呢?谈一下自己的理解。 刚开始理解这些概念的时候认为这几种模式虽然都是要将view和model解耦,但是...
  • napolunyishi
  • napolunyishi
  • 2014-04-01 17:50
  • 23179

浅谈开发中的MVVM模式及与MVP和MVC的区别

我记得前段时间分享了一篇文章《 浅谈Andorid开发中的MVP模式》,反响不错,为了进一步介绍MVVM模式,还提前分享了实现Android中MVVM模式的一个关键技术的文章《Android 数据绑定框架DataBinding,堪称解决界面逻辑的黑科技》。如果没有看过这两篇文章的,建议先看...
  • zzqhappy025
  • zzqhappy025
  • 2017-02-10 15:53
  • 1431

android中MVC,MVP和MVVM三种模式详解析

我们都知道,android本身就采用了MVC模式,model层数据源层我们就不说了,至于view层即通过xml来体现,而 controller层的角色一般是由activity来担当的。虽然我们项目用到了MVP模式,但是现在人们并没有总结出一种规范,所以MVP模式的写法并不统一,而至于MVVM模式看网...
  • u013320868
  • u013320868
  • 2016-08-11 11:36
  • 842

关于MVC,MVP,MVVM的一点总结和思考

简介软件的架构方式有很多种,从最开始的MVC模式,演化到MVP,然后到现在的MVVM,在不断的演化过程中其核心的思想就是降低各组件之间的耦合度,使得数据的流向更加的清晰明了。但并不是意味着一个比另一个高级,只是对于软件的架构方式有的不同的视角,针对不同的场景有了更多的选择方案。在学习过程中通过对三种...
  • wqc_CSDN
  • wqc_CSDN
  • 2016-12-27 16:43
  • 1584

Android开发模式之MVC,MVP和MVVM的简单介绍与区别

相信大家对MVC,MVP和MVVM都不陌生,作为三个最耳熟能详的Android框架,它们的应用可以是非常广泛的,但是对于一些新手来说,可能对于区分它们三个都有困难,更别说在实际的项目中应用了,有些时候想用MVP的,代码写着写着就变成了MVC,久而久之就对它们三个的选择产生了恐惧感,如果你也是这样的人...
  • xiangzhihong8
  • xiangzhihong8
  • 2016-09-26 16:06
  • 4728

【框架篇】mvc、mvp、mvvm使用关系总结

MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业...
  • hudan2714
  • hudan2714
  • 2016-03-27 10:04
  • 11092
    个人资料
    • 访问:16748次
    • 积分:427
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:0篇
    • 译文:0篇
    • 评论:5条