浅谈MVC、MVP、MVVM框架模式

举报
海风极客 发表于 2022/10/16 16:36:03 2022/10/16
【摘要】 一、简述架构、设计模式、框架模式、框架及其相互关系        架构(Architecture),又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。常见的架构,如C/S架构,B/S架构等。       设计模式(Design pattern),又称软件设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用...

一、简述架构、设计模式、框架模式、框架及其相互关系

        架构(Architecture),又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。常见的架构,如C/S架构,B/S架构等。

       设计模式(Design pattern),又称软件设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。常见的设计模式,如工厂模式、原型模式、解释器模式等。

       框架模式(Framework pattern),就是解决某一类问题的方法论。把解决某类问题的方法总结归纳到理论高度,就是模式。Alexander给出定义:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案核心。通过这种方式,可无数次地使用那些已有的解决方案,无需重复相同工作。常见的架构模式,如MVC、MVP、MVVM等。

       框架(Framework),是构成一类特定软件可复用设计的一组相互协作的类。框架规定了你的应用的体系结构。它定义了整体结构,类和对象的分割,各部分的主要责任,类和对象怎么协作,以及控制流程。框架预定义了这些设计参数,以便于应用设计者或实现者能集中精力于应用本身的特定细节。常见的框架,如Spring、Mybatis、Beego等。

相互关系

架构 > 框架模式 > 框架 > 设计模式

说明

框架模式是项目的总体架构,有时也叫设计模式,但是不同于编码的设计模式,如MVC架构,只是一个设计上的概念,而框架是具体的实现,在框架设计中有用到了许多的设计模式。

二、MVC模式

       经典MVC模式中,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面。

        V即View视图是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。MVC的好处之一在于它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操作的方式。

       M即model模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

       C即controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。
在这里插入图片描述

Model层:业务模型

Controller层:Servlet、Spring MVC、Struts、Struts2等等

View层:jsp、html等等

三、MVP模式

        MVP的全称为Model-View-Presenter,Model提供数据,View负责显示,Controller/Presenter负责逻辑的处理。MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。
在这里插入图片描述
MVP在安卓开发中比较常见,接下来的说明以安卓为例

Model层:业务模型

Presenter层:负责处理View与Model直接的交互,没有明显技术名词可以描述。

View层:Activity等等

四、MVVM模式

        MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。
在这里插入图片描述

Model层:业务模型

View-Model层:Vue、LayUI、React等等

View层:vue、html等等

此文章仅代表作者的个人理解,如有错误或不同理解,请给作者留言,Thanks!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。