写点什么

浅谈 MVC、MVP、MVVM 框架模式

作者:Barry Yan
  • 2022 年 10 月 07 日
    北京
  • 本文字数:1599 字

    阅读完需:约 5 分钟

浅谈MVC、MVP、MVVM框架模式

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

        架构(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!

发布于: 4 小时前阅读数: 6
用户头像

Barry Yan

关注

做兴趣使然的Hero 2021.01.14 加入

Just do it.

评论

发布
暂无评论
浅谈MVC、MVP、MVVM框架模式_10月月更_Barry Yan_InfoQ写作社区