MVC设计模式详解(思想、结构、作用与实现)

MVC的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范,本身并不引入新的功能,用来指导我们改善应用程序的架构,使得模型和视图相分离,得到更好的开发和维护效率。

所属分类 架构

相关标签 设计MVC

MVC简介

MVC的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范。

MVC是用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件里面,在需要改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,达到减少编码的时间。

MVC始存于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器。

MVC设计在Java Web应用中得到广泛的应用,但其并不局限于Java语言,比如前端、PHP、.NET 等语言。

之所以采用MVC设计模式的根本原因在于解耦各个模块。

MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层:模型层、视图层、控制层。

MVC三个层面的职责非常明确,而且相互分离,因此每个层面都可以独立的改变而不影响其他部分,从而大大提高了应用的灵活性和重用性。

/static/upload/post/1646006359290.jpg

模型(Model)通常又分为数据模型和业务逻辑模型。

  1. 数据模型用来存放业务数据,比如订单信息、用户信息等;
  2. 业务逻辑模型包含应用的业务操作,比如订单的添加或者修改等。

因此:Model主要用于存储数据以及处理用户请求的业务逻辑。

视图(View)代表模型(Model)包含的数据的可视化,将内容展现给用户。

  • 视图从模型获得要展示的数据,然后用自己的方式展现给用户,相当于提供界面来与用户进行人机交互,比如由html元素组成的网页界面,或者软件的客户端界面。
  • 一般来说,模型发生改变时会通知视图,视图也可以主动向模型(经过控制器)查询变化来保证数据一致性。
  • 当用户在视图(View)界面上操作后,如提交、触发事件等,将向控制器(Controller)发出请求。

控制器(Controller)控制数据流向模型对象,并在数据变化时更新视图。

控制器(Controller)作用于模型和视图上,本身并不做任何处理,它使得视图与模型解耦分离。

  1. 收到用户的请求后,会将请求与模型的更新相映射,调用模型来实现用户请求的功能。
  2. 选择用于响应的视图,将模型更新后的数据展示给用户。

MVC的作用

当程序结构划分不明确时,各个部分功能混乱,如果需要变更业务功能时,无论是业务逻辑修改还是显示形式修改,都要修改很多的关联类,“牵一发而动全身”,导致软件的开发和维护效率低下,BUG百出。

遵循MVC模式来开发系统,就会极大的避免上述问题的出现。

MVC模式的核心手段是解耦,MVC模式通过科学的层次划分,把整个应用程序划分成模型、视图、控制器三个部分,然后严密控制三个部分之间的通信,从而得到一个结构清晰、功能分布合理、可重用、可扩展、可维护的应用程序。

  1. 低耦合:
    MVC模式,模型和视图是解耦的,模型不会依赖于视图,而视图也仅仅是从模型中获取需要展示的数据,并不会与模型的逻辑处理相关联。
  2. 低成本:
    MVC模式帮我们清楚的划分了职责,可以让程序员各司其职,服务端只关心业务逻辑的实现,也就是模型部分;UI程序员只关心页面展示,也就是视图部分即可。
  3. 可维护:
    MVC模式划分出明晰的模型和视图部分,并使其解耦,在软件需求发生变更的时候,就可以各自独立的改变而不会相互影响,使得程序更容易维护和扩展。

MVC在Web应用中的实现(Model2模型)

采用MVC设计模式并不一定完全生搬硬套。

比如在Java的Web开发中,通常把Servlet+JSP+JavaBean的模型称为Model2模型,这是一个完全遵循MVC模式的模型。

经典框架Struts2、SpringMVC均遵循了这个模型进行设计。

  • JavaBean(模型){数据模型:实体类;逻辑模型:Service层、Dao层等}
  • JSP(视图)
  • Servlet(控制){原生Servlet、SpringMVC的Controller、Struts2的Action等}

在Web开发中,由于Web应用程序的性质,不存在服务器主动向客户端“推”数据(这里代指TCP协议下),因此从Model到View之间的虚线是不存在的。

效果如下图:

/static/upload/post/1646006409933.gif

米虫

做一个有理想的米虫,伪全栈程序猿,乐观主义者,坚信一切都是最好的安排!

本站由个人原创、收集或整理,如涉及侵权请联系删除

本站内容支持转发,希望贵方携带转载信息和原文链接

本站具有时效性,不提供有效、可用和准确等相关保证

本站不提供免费技术支持,暂不推荐您使用案例商业化

选择个人头像

昵称

邮箱

QQ

网址

评论提示

  • 头像:系统为您提供了12个头像自由选择,初次打开随机为你选择一个
  • 邮箱:可选提交邮箱,该信息不会外泄,或将上线管理员回复邮件通知
  • 网址:可选提交网址,评论区该地址将以外链的形式展示在您的昵称上
  • 记忆:浏览器将记忆您已选择或填写过得信息,下次评论无需重复输入
  • 审核:提供一个和谐友善的评论环境,本站所有评论需要经过人工审核