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

移动开发 Android
MVC全称是Model-View-Controller 也就是模型–视图–控制器。是在1970年的时候提出由TrygveReenskaug在Smalltalk-80系统上首次提出的。MVP是MVC的一个演化版本,全称是Model-View-Presenter。MVP的出现主要就是解决MVC中的View和Model的耦合性高的的问题,同时又带来了很好的扩展性。

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

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

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

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

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?

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

责任编辑:庞桂玉 来源: 安卓巴士Android开发者门户
相关推荐

2018-09-19 12:04:00

车联网无人驾驶语言交互

2018-09-25 16:07:53

大数据语言分布式

2017-03-31 20:45:41

MVCMVPMVVM

2017-04-01 08:30:00

MVCMVPMVVM

2023-09-04 12:58:35

数据模型

2023-11-06 08:31:58

业务代码多线程

2023-01-01 13:47:28

自动驾驶

2023-11-11 12:46:09

2018-03-21 16:19:40

MVCMVPMVVM

2012-06-28 13:37:14

2021-10-03 15:22:20

SSD固态硬盘HDD机械硬盘故障率

2009-04-30 15:56:50

三层架构MVCMVP

2019-02-22 14:25:07

PythonJava编程语言

2023-01-06 11:27:43

ChatGPT人类GPT-3

2015-08-04 10:44:09

2022-12-15 21:59:56

AIVR场景

2012-05-09 10:09:18

JavaMEJava

2021-03-08 08:16:30

负载均衡系统流量

2012-11-21 09:20:56

2014-03-17 11:05:00

ScriptCode Blocks
点赞
收藏

51CTO技术栈公众号