MVC设计模式
一、认识MVC
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式是Java语言官方根据三层架构模式中的表示层(UI)设计而来,规范了一个模块下程序的结构,用于Web应用程序的分层开发。
当用户发出操作时,视图把消息发给控制器,控制器按照业务逻辑进行处理,需要查询或更新数据时,控制器会调用模型。
MVC架构把数据处理,程序输入输出控制及数据显示分离开来,并且描述了不同部件的对象间的通信方式。使得软件可维护性,可扩展性,灵活性以及封装性大大提高。
- Model(模型层):模型代表一个存取数据的对象(JavaBean)或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制,如登陆、增加、删除、修改功能。即
负责数据管理
。 - View(视图层):视图代表模型包含的数据的可视化,负责将数据模型展示在浏览器上,如前端技术(html、js、css、jsp、模板…),即
负责数据显示
。 - Controller(控制层):控制器作用于模型和视图上,它控制数据流向模型对象,使视图与模型分离开,并在数据变化时更新视图。如负责程序中请求的相关控制,接收请求,响应,处理请求…即
负责业务逻辑和响应策略
。
JavaBean:
- JavaBean是Java语言中一种特殊的类,当然你也可以简单理解为一个Java类,当它满足以下两个要求便可以称之为JavaBean:
- public修饰的类,并提供了public修饰的无参构造.
- 所有属性都使用private进行封装,并提供 Getter and Setter 方法进行访问操作。
- 从使用层面来看,JavaBean又分为如下两类:
- 封装了业务逻辑的JavaBean:如负责登陆、增删改查的JavaBean。
- 封装了数据的JavaBean:一般来说对应数据库中的一张表,如一张用户表就对应一个 User.java 类。
- JavaBean具备复用性,即一次编写,处处可用。比如多个显示页面可以共享一个 User.java 类中的属性。
以 Servlet 及 JSP 开发过程为例,JavaBean 相当于 Model,Servlet 相当于 Controller,JSP 相当于 View。
Servlet + JSP + JavaBean:
Servlet+JSP+JavaBean 中 JSP 相当于视图层(View)负责前台页面显示数据。JavaBean 相当于模型层(Model)负责创建 JavaBean 与 JAVA POJO,即负责封装数据表的同时还要负责提供具体的业务逻辑操作。Servlet 相当于控制层(Controller)只负责调用模型层(Model)提供的具体方法完成业务逻辑和响应策略,自身并不作具体实现,可以理解为中转站。
控制器本身不输出任何信息和做任何处理,它只负责把用户的请求转成针对Model的操作,和调用相应的视图来显示Model处理后的数据。
Servlet+JSP+JavaBean 模式的结构清晰,是一个松耦合架构模式,一般情况下,建议使用该模式。
二、为什么要在Web应用中使用MVC架构
用户界面逻辑的更改往往比业务逻辑频繁,尤其是在基于Web的应用程序中。因此我们就要做到对于视图层(View)的更改,尽可能地不要影响到模型层(Model)和业务逻辑层(Controller)。
可见MVC的思想是从根本上强制性地将这三层进行分离,尽管构造MVC应用需要一些额外的工作,但在大型Web应用程序中它带来的好处是无庸质疑的。
所以总结如下:
- 提高代码重用率:多个视图(View)可共享一个模型(Model)。
- 提高程序可维护性:视图层、模型层和控制层相互对立,当某一层有需求改变时只需要改变其中一层即可。
- 有利于团队开发:个人能力参差不齐的团队开发中,采用MVC开发是非常理想的。
三、MVC架构的优点
1.MVC的优点
- 多视图共享一个模型,提高代码可重用性。
- 三个模块相互独立,松耦合架构。发生在哪一层的变化,只需更改该层,不需要更改整个系统。
- 模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作,需要做的只是在新平台上对视图和控制器进行新的修改。
- 控制器提高了应用程序的灵活性和可配置性。
- 有利于团队开发分工协作和质量控制,降低开发成本。
2.MVC的缺点
- 增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
- 视图对模型数据的访问效率低。视图可能需要多次调用Model才能获得足够的显示数据。
- 完全理解MVC并不是很容易。使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。同时由于模型和视图要严格的分离,这样也给调试应用程序到来了一定的困难。
MVC 并不适合小型甚至中型规模的项目,花费大量时间将 MVC 应用到规模并不是很大的应用程序,通常得不偿失,所以对于 MVC 设计模式的使用要根据具体的应用场景来决定。
参考资料:
- https://www.runoob.com/design-pattern/mvc-pattern.html
- https://www.cnblogs.com/xhj123/p/6170975.html
- http://c.biancheng.net/spring_mvc/mvc.html