当前位置: 首页 > 科技观察

别管MVC或MVP,听我说~

时间:2023-03-15 00:06:45 科技观察

MVC的全称是Model-View-Controller,即Model-View-Controller。它由TrygveReenskaug于1970年在Smalltalk-80系统上提出***提出。百度百科对SmallTalk的解释是这样的:Smalltalk被公认为历史上第二个面向对象编程语言和第一个真正意义上的集成开发环境(IDE)。来一张图解释一下MVC的工作模式!图中红色小框就是MVC的工作模式。从图中可以看出,用户向View发送指令,View直接要求Model改变状态。用户也可以直接向Controller发送指令,然后Controller向Model发送指令,再通过Model改变View的状态。所以MVC框架模式下的View和Model的关系还是比较紧密的,耦合度还是很高的。View的后期维护和更改需要更改Model中的内容。MVC是一种框架模式而不是设计模式。它的优点是:比较容易理解,技术含量不高,便于开发维护和修改,耦合度不高,表现层和业务层分离,各司其职自己的任务工作。它的缺点是:定义不是很好,不太容易完全理解MVC模式。MVC的使用需要仔细规划,因为它的内部原理比较复杂。有些小项目如果用MVC框架会比较复杂,需要看例子的可以去网上了解一下,我这里偷懒了:)首先你需要一个View视图,就是XML布局。然后还需要一个Model,也就是数据,可以是数据库中的内容,也可以是代码中写的一个List集合。***需要一个Controller,即Activity或Fragment在Controller中通过用户在View中传递的操作来访问模型中的数据,然后在View中改变状态。MVP是MVC的演变,全称是Model-View-Presenter。MVP的出现主要是为了解决MVC中View和Model的高耦合问题,同时带来了很好的扩展性。MVP模式的三个角色的作用:Presenter——中介,充当View和Model之间的桥梁。他从Model中获取数据,返回给View层。是的,View层和Model层之间没有耦合,所以业务逻辑是从View层拉走的。Model-HomeownerModel主要提供数据访问功能,Presenter需要通过Model层存储和获取数据,Model层就像一个仓库。View-UserView通常是指Activity、Fragment或一个View控件。它包含一个Presenter成员变量,它需要实现一个逻辑接口。对View的操作被传递给Presenter来实现。***Presenter调用View逻辑接口将结果返回给View元素。放一张图来解释一下MVP的工作模式。从图中我们可以看出MVP和MVC最大的区别:VIew和Model的完全解耦。MVP是面向接口的编程,也就是说用户不需要知道我具体如何实现?用户只要知道这个函数存在,就可以直接调用。MVP的Android伪代码实现如下图代码与数据不匹配。只是为了方便大家在代码中理解如何编写MVC。如果需要看例子,可以去网上了解一下。我这里偷懒了:)首先我需要一个Presenter作为View和Model的中间人然后你需要一个View和ViewImpl接口***你还需要一个ModelImpl接口。为什么不用纠结是MVC还是MVP?MVC和MVP的最终目标是将数据和UI分离,互不影响。那么如何做到不纠结呢?你听说过面向对象吗?听听我的理解~面向对象的封装、多态、继承。老师好像也是这么教的,那究竟什么是多态封装和继承呢?封装和封装就是把用户不想看到的东西封装起来,在面向对象中可以使用Private。属性,把用户不想看到的内容写在里面。比如收音机上的播放功能,用户不需要知道收音机怎么播放,只需要知道按下这个按钮就可以播放。多态性多态性是一个对象的多种表现形式,主要表现在:行为多态性和状态多态性。行为多态就像父亲有多个孩子,每个孩子都不一样,但都是同一个父亲;状态多态就像每个孩子一天有多个状态,吃饭,学习,睡觉。遗产?不!我是说物体!我的一个朋友告诉我,继承是对面向对象最大的误解。继承可以理解为一个对象由多个小对象组成;例如,人的对象是由手、脚、头……和其他小对象组成的。因此,我们不必记住继承,只需要深入了解每一个对象,就可以把对象描述清楚!那么MVC、MVP和面向对象是什么关系呢?首先,MVC和MVP都需要数据和UI,互不影响,那不就是面向对象的吗?面向对象视图?对象就是我们所说的用户,也就是MC或者MVP中的View。用户需要的我们会展示,不需要的我们会封装。就是提供一个方法给你调用,这个是不是很像MVC或者MVP啊!面向对象模型?同时,面向对象还需要对对象的行为进行细分,比如人可以跑,可以游泳……这和MVC中一样吗?和Model一样,需要处理不同的用户操作。面向对象的控制器?***面向对象也需要一个状态来控制,比如人脑。用大脑来协调手脚的平衡。