前言
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。是一个有用的工具箱,它有很多好处,但也有一些缺点。
准备
在讲MVC设计模式之前,我们先简单了解下那什么是设计模式?
说的通俗一点:设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。
1995 年,GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了 23 种设计模式,从此树立了软件设计模式领域的里程碑,人称「GoF设计模式」。
这 23 种设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性,以及类的关联关系和组合关系的充分理解。
当然,软件设计模式只是一个引导,在实际的软件开发中,必须根据具体的需求来选择:
- 对于简单的程序,可能写一个简单的算法要比引入某种设计模式更加容易;
- 但是对于大型项目开发或者框架设计,用设计模式来组织代码显然更好
感兴趣想要拜读这这本书的童鞋,在这里我也贴一下这本书的下载链接(不是百度云盘,速度贼快),` (づ ̄3 ̄)づ╭❤~
关于本文章
本文章虽然命名为“Java MVC设计模式”,但是设计模式并不是 Java 的专利,它同样适用于 C++、C#、JavaScript 等其它面向对象的编程语言。
本人能力有限,这一篇文章是自己在查阅很多资料后,结合自己的理解前提下整理的,本意在以最容易理解的言语去MVC设计模式,有表述不当或遗漏之处还望大家在评论区斧正.
Java 是典型的面向对象的编程语言,所以本文章以 Java 为基础来讲解MVC设计模式,如果你不了解 Java,请猛击[我的Hexo静态博客][1]
学习。
1.MVC设计模式
MVC是一种编程模式
MVC全名是Model View Controller,是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
- Model(模型)表示应用程序核心,负责转发请求,对请求进行处理(比如数据库记录列表)。
- View(视图)显示数据,界面设计人员进行图形界面设计(数据库记录)。
- Controller(控制器)程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能,写入数据库)。
MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。
MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。
2.MVC框架
MVC模式下的某种框架
它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。最典型的MVC就是JSP + Servlet + javabean的模式。
视图(View)----JSP
视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷.
MVC好处是它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,
不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。
模型(Model)---javabean(对象实体类)
模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。例如它可能用构件对象来处理数据库,被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
控制器(Controller)----servlet
控制器接受用户的输入并调用模型和视图去完成用户的需求
,所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。
 我接触到的分层架构思路完全是遵循了MVC设计模式:
jsp + Servlet + Service + Dao(data access object) + entity
视图层 + 控制层 + 业务逻辑层 + 持久化层 + 模型(存储数据)
在这个分层架构思路下,细化了控制器,视图层是用户看到的界面,用户点击视图层上的按钮没有真正发生数据的处理,而只是转发请求到了Servlet控制层.Servlet获取到请求后,对请求进行判断
转发到业务逻辑层,业务逻辑层将请求转发到持久化层,持久化层是最终接触数据库进行数据处理和调用模型构建处理请求的层,数据处理完成后再一层一层的回到视图层完成数据展示.
只是文字的话可能不是很好理解,我们已淘宝搜索宝贝为栗,简单解释下
- 用户在搜索框中输入自己想要购买的宝贝点击搜索按钮,现在这个操作就是在视图层(View),此时系统没有做任何的数据处理,只是在检测到按钮按下后,获取搜索框内的内容(value值)以及用户想要执行的操作(function(获取这个value值里的所有商品信息,商品名字,商品图片,商品价格,商品产地,商品简介)),将其传到控制层(Servlet).
- 控制层接收到数据后对请求进行判断,然后将请求经过Service层到达Dao层,Dao 层根据请求调取对应的对象模型查询数据库获取响应的信息
- 获取到信息后,再逐层返回到视图层展示给用户
真正的淘宝搜索功能肯定没有那么简单,在这里我们只是借此简单的解释下MVC的设计模式
利用MVC设计模式,可以方便地设计出用于搜索过程的相应的类和对象,并以比较合理的方式将它们组织起来。
在浏览器的jsp页面中显示商品的信息,用户在界面中进行添加商品操作之后,到达servlet控制器,然后选择相应的商品信息模型,可能会与数据库进行交互,完成之后,再在商品展示页面中进行显示出来。
讲到这里,相信大家已经对MVC设计模式有一个大体的了解了,我初步接触这个设计模式,完成的一个最经典的案例就是学生信息管理系统,即Student_curd
curd说明
CURD是一个数据库技术中的缩写词,一般的项目开发的各种参数的基本功能都是CURD。作用是用于处理数据的基本原子操作。
它代表创建(Create)、更新(Update)、读取(Read)和删除(Delete)操作。
CURD 操作通常是使用关系型数据库系统中的结构化查询语言(Structured Query Language,SQL)完成的。随着 Web 变得更加具有面向数据特性,因此需要从基于 SQL 的 CURD 操作转移到基于语义 Web 的 CURD 操作。
框架和设计模式的区别
有很多程序员往往把框架模式和设计模式混淆,认为MVC是一种设计模式。实际上它们完全是不同的概念。在这里我们是先了解了下MVC设计模式,然后讲了下框架更深层的理解MVC设计模式.
框架、设计模式这两个概念总容易被混淆,其实它们之间还是有区别的。框架通常是代码重用,而设计模式是设计重用,架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。
在软件生产中有三种级别的重用:内部重用,即在同一应用中能公共使用的抽象块;代码重用,即将通用模块组合成库或工具集,以便在多个应用和领域都能使用;应用框架的重用,即为专用领域提供通用的或现成的基础结构,以获得最高级别的重用性。
框架与设计模式虽然相似,但却有着根本的不同。设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象;框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示;设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。可以说,框架是软件,而设计模式是软件的知识。
为什么要在WEB开发中使用MVC框架
用户界面逻辑的更改往往比业务逻辑频繁,尤其是在基于Web的应用程序中。例如,可能添加新的用户界面页,或者可能完全打乱现有的页面布局。对显示的更改,尽可能地不要影响到数据和业务逻辑。
目前大部分Web应用都是将数据代码和表示混在一起。经验比较丰富的开发者会将数据从表示层分离开来,但这通常不是很容易做到的,它需要精心的计划和不断的尝试。MVC从根本上强制性的将它们分开。尽管构造MVC应用需要一些额外的工作,但它带来的好处是无庸质疑的
- 提高代码重用率:多个 View 能共享一个 Model
- 提高程序的可维护性:方便的改变应用程序的数据层和业务规则,提高了应用程序的灵活性和可配置性,低耦合性
- 有利于团队开发:较低的生命周期成本,快速的部署,有利于软件工程化管理
MVC设计模式的缺点
MVC的不足体现在以下几个方面:
- 增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
- 视图对模型数据的访问效率低。视图可能需要多次调用Model才能获得足够的显示数据。
- 完全理解MVC并不是很容易。使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。同时由于模型和视图要严格的分离,这样也给调试应用程序到来了一定的困难。
本人个人网站: https://www.icnfox.cn 欢迎来访
有任何问题可以在个人网站的评论区留言,看到就会第一时间回复 啾咪ヾ(≧▽≦*)o