不必纠结MVC还是MVP了,听我说两句~

MVC全称是Model-View-Controller 也就是模型–视图–控制器。是在1970年的时候提出由TrygveReenskaug在Smalltalk-80系统上首次提出的。

SmallTalk在百度百科的解释是这样:

Smalltalk被公认为历史上第二个面向对象的程序设计语言和第一个真正的集成开发环境 (IDE)。

来张图说明一下MVC的工作模式吧  

图中红色小框框就是MVC的工作模式

  • 从图中可以看出用户向View发送指令,再有View直接要求Modle改变状态
  • 用户也可以直接向Controller发送指令,再由Controller发送给Model,在通过Model去改变View的状态
  • 所以MVC框架模式View和Model之间的联系还是相当紧密的,耦合度还是很高,后期维护改动View需要将Model中的内容也要改动。

MVC是一种框架模式而非设计模式

其优点是:

  • 理解起来比较容易,技术含量并不高,对开发和维护来说易于维护和修改
  • 耦合度不高,表现层与业务层分离,各司其职。

其缺点是:

  • 它定义不是很明确,完全理解MVC模式并不容易。
  • 使用MVC需要精心策划,因为你它的内部原理比较复杂
  • 一些小的项目采用MVC框架反而会更加复杂

MVC的Android伪代码实现

以下图片中代码与数据不匹配,只是为了方便理解MVC在代码中如何写,需要看实例的可以去网上了解,我在这里就偷懒了:)

  • 首先你需要一个View视图,也就是XML布局。 

  • 然后你还需要一个Model

也就是数据,可以是数据库中的内容,也可以是在代码中写的List集合。  

  • 最后需要一个Controller,也就是Activity或者Fragment

通过在Controller中对用户在View中传递过来的操作,进行访问model中的数据,然后改变View中的状态。 

MVP是MVC的一个演化版本,全称是Model-View-Presenter。

MVP的出现主要就是解决MVC中的View和Model的耦合性高的的问题,同时又带来了很好的扩展性。

MVP模式的三个角色的作用:

  • Presenter-中介

主演沟通View和Model的桥梁,他从Model获取数据后返回给View层,是的View层和Model层之间没有耦合,从而奖业务逻辑从View层抽离。

  • Model-房主

Model主要提供数据的存取功能,Presenter需要通过Model层存储、获取数据,Model层就像是一个仓库。

  • View-用户

View通常是指Activity、Fragment或者某个View控件。它含有一个Presenter成员变量,同时它需要实现一个逻辑接口,奖View上的操作转交割Presenter进行实现,最后Presenter调用View逻辑接口将结果返回给View元素。

来张图说明一下MVP的工作模式吧


从图中我们可以看出MVP和MVC之间的额最大区别:

  • VIew和Model之间彻底的解耦
  • MVP是面向接口编程,也就是说用户不必知道我是具体如何实现额,用户只要知道有这个功能,直接调用即可。

MVP的Android伪代码实现

以下图片中代码与数据不匹配,只是为了方便理解MVC在代码中如何写,需要看实例的可以去网上了解,我在这里就偷懒了:)

  • 首先需要一个Presenter,作为View和Model的中间人   

  • 然后你还需要一个View以及ViewImpl接口   

   

  • 最后你还需要Model一个ModelImpl接口   

为什么说不必纠结是MVC还是MVP呢?

MVC和MVP的最终目的就是要数据和UI分离,互相不影响。那么如何能不必纠结而做到呢??你听说过面向对象吗?听过再听听我的理解~

  • 面向对象

封装、多态,继承。老师好像也都是这么教的,那么到底说明是多态封装继承呢?

  • 封装

封装就是将用户不想看到的东西封装起来,可以用到面向对象中的 Private

属性,将用户不想看到的内容写在这里面。比如收音机上的播放功能,用户不用知道收益及如何播放,它只需要知道摁下这个键能播放即可。

  • 多态

多态就是一个对象的多种表现形态,主要表现为:行为多态和状态多态。

行为多态就好比一个父亲有多个孩子,每个孩子都不一样,但是都是同一个父亲;状态多态就好比每个孩子在一天中有好多个状态变现,有吃饭,学习,睡觉。

  • 继承?不!我想说的是对象!

我的一个朋友告诉我继承其实是对面向对象的最大误解。继承我们可以理解成一个对象他有多个小对象组成;比如人这个对象是由手脚,脑袋…等其它小对象组成。因此继承我们可以不去记住,我们只要对每个对象有深刻的认识即可把对象描述清楚!

那么MVC、MVP与面向对象有什么关系呢??

首先MVC和MVP都是要求数据和UI之间互不影响,那么面向对象不就是吗!?

  • 面向对象View?

对象也就是我们说的用户也就是MC或者MVP中View,用户需要什么我们就展示给其什么,不需要的我们将其封装起来提供一个方法给你调用即可,这是不是和MVC或者MVP中很像!

  • 面向对象Model?

同时面向对象也是需要将对象的行为细分,比如人可以跑,可以游泳…这是不是和MVC中的Model一样,需要处理用户不同的操作。

  • 面向对象Controller?

最后面向对象也是需要一个状态去控制的,比如人的大脑。通过大脑去协调手和脚的平衡。

作者:Aller_Dong

来源:51CTO

时间: 2024-10-21 17:49:47

不必纠结MVC还是MVP了,听我说两句~的相关文章

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

MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.MVC被独特的发展起来用于映射传统的输入.处理和输出功能在一个逻辑的图形化用户界面的结构中. 数据关系 View 接受用户交互请求 View 将请求转交给Controller Controller

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

相信大家对MVC,MVP和MVVM都不陌生,作为三个最耳熟能详的Android框架,它们的应用可以是非常广泛的,但是对于一些新手来说,可能对于区分它们三个都有困难,更别说在实际的项目中应用了,有些时候想用MVP的,代码写着写着就变成了MVC,久而久之就对它们三个的选择产生了恐惧感,如果你也是这样的人群,那么这篇文章可能会对你有很大的帮助,希望大家看完都会有收获吧! 文章重点: (1)了解并区分MVC,MVP,MVVM. (2)知道这三种模式在Android中如何使用. (3)走出data bin

界面之下:还原真实的 MVC、MVP、MVVM 模式

前言 做客户端开发.前端开发对MVC.MVP.MVVM这些名词不了解也应该大致听过,都是为了解决图形界面应用程序复杂性管理问题而产生的应用架构模式.网上很多文章关于这方面的讨论比较杂乱,各种MV*模式之间的区别分不清,甚至有些描述都是错误的.本文追根溯源,从最经典的Smalltalk-80 MVC模式开始逐步还原图形界面之下最真实的MV*模式. GUI程序所面临的问题 图形界面的应用程序提供给用户可视化的操作界面,这个界面提供给数据和信息.用户输入行为(键盘,鼠标等)会执行一些应用逻辑,应用逻辑

艾伟_转载:MVC和MVP的一些思考

这篇文章是我近期对MVC和MVP的一些思考,在使用MVC/MVP模式的过程中曾经走过一些弯路.呵呵,现在虽然改正了某些弯路,但不保证改正了所有的弯路(例如对渲染的理解),所以请阅读这篇文章的朋友不吝发挥你们的质疑. 写这篇文章也是想知道自己还有什么地方是错的,我的最终方案是否可行? 有交流才会有进步.你有一个苹果,我有一个苹果,我们交换后仍各有一个苹果,你有一个思想,我有一个思想,我们交换后......会有N个思想 :p 1. MVC的理解误区 以下是我以前对MVC模式的理解误区: 1. 认为M

[Android]对MVC和MVP的总结

以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5036289.html 经历过的客户端的架构分为这么几个阶段: 第一阶段 使用传统的MVC,其中的View,对应的是各种Layout布局文件,但是这些布局文件中并不像Web端那样强大,能做的事情非常有限:Controller对应的是Activity,而Activity中却又具有操作UI的功能,我们在实际的项目中也会有很多UI操作在这一层,也做了很多View中应该

MVC和MVP的一些思考

这篇文章是我近期对MVC和MVP的一些思考,在使用MVC/MVP模式的过程中曾经走过一些弯路.呵呵,现在虽然改正了某些弯路,但不保证改正了所有的弯路(例如对渲染的理解),所以请阅读这篇文章的朋友不吝发挥你们的质疑. 写这篇文章也是想知道自己还有什么地方是错的,我的最终方案是否可行? 有交流才会有进步.你有一个苹果,我有一个苹果,我们交换后仍各有一个苹果,你有一个思想,我有一个思想,我们交换后......会有N个思想 :p 1. MVC的理解误区 以下是我以前对MVC模式的理解误区: 1. 认为M

MVC、MVP、MVVM三种框架模式到底怎么理解?

问题描述 MVC.MVP.MVVM三种框架模式到底怎么理解? 如题,这三个到底该如何理解? 1.M到底只是数据,还是数据+业务逻辑?如果是前者,为何不叫Data? 2.MVP里,M对V有没有影响?是不是说,P处理后发现存储的数据需要改变,就通知M改变,显示的数据需要改变,就通知V改变? 3.MVVM与MVP相比,进步的地方在哪里? 4.对于软件开发者与WEB全栈开发者而言,这三种框架模式的意义相同吗? 看了网上很多这方面的说法,感觉众口不一,枯涩难懂,哪位前辈能彻底解惑.以正视听呢? 解决方案

MVC,画面上有两个结果集怎么实现?

问题描述 MVC,画面上有两个结果集怎么实现?1.A,B两个Grid2.A,B两个ButtonAButton点击和BButton点击分别把对应的数据放到对应的Gird里面.前台引用的时候怎么写呢,后台的话,需要写两个 解决方案 解决方案二:button不是有点击事件吗?解决方案三:····这个和几个结果集有什么关系么··点击按钮执行对应的方法给对应的Grid难道你Grid的名字idname一样?解决方案四:可以建立一个新的实体包含这两个实体对象,controller中给这个新实体中的两个集合赋值

两句CSS完美截断侧栏最新评论列表

常见的侧栏最新评论列表一般有两种格式:路人甲 发表于 某某文章,或者 路人乙:引言-- 它们都有个问题,就是换行很难控制,长短不一,有时候内容还会把页面撑破.老肥研究了很久 CSS 手册,找到了一个符合标准的办法,像现在我的侧栏 widget 一样,强制只显示一行,多出来的一刀切断,是不是有点像 Gmail 里面的预览文字?方法很简单,比如我的侧栏 widget 是 <DIV class="widget">, 要对它下面的 <LI>进行截断,那么用下面的 CSS