什么是MVC设计模式,为什么使用MVC?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是MVC设计模式,为什么使用MVC?相关的知识,希望对你有一定的参考价值。
MVC(Model-View-Controller)把系统的组成分解为M(模型)、 V(视图)、C(控制器)三种部件。视图表示数据在屏幕上的显示。控制器提供处理过程控制,它在模型和视图之间起连接作用。控制器本身不输出任何信息和做任何处理,它只负责把用户的请求转成针对Model的操作,和调用相应的视图来显示Model处理后的数据。用户界面逻辑的更改往往比业务逻辑频繁,尤其是在基于Web的应用程序中。例如,可能添加新的用户界面页,或者可能完全打乱现有的页面布局。对显示的更改,尽可能地不要影响到数据和业务逻辑。
目前大部分Web应用都是将数据代码和表示混在一起。经验比较丰富的开发者会将数据从表示层分离开来,但这通常不是很容易做到的,它需要精心的计划和不断的尝试。MVC从根本上强制性的将它们分开。尽管构造MVC应用需要一些额外的工作,但它带来的好处是无庸质疑的 参考技术A 1.各施其职,互不干涉 在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。
2.有利于开发中的分工 在MVC模式中,由于按层把系统分开,那么就能更好的实现开发中的分工。网页设计人员可以进行开发视图层中的JSP,对业务熟悉的开发人员可开发业务层,而...
谈谈JAVA工程狮面试中经常遇到的面试题目------什么是MVC设计模式
作为一名java工程狮,大家肯定经历过很多面试,但每次几乎都会被问到什么是MVC设计模式,你是怎么理解MVC的类似这样的一系列关于MVC的问题。
【出现频率】
【关键考点】
- MVC的含义
- MVC的结构
【考题分析】
在java Web开发中,存在两种普遍的开发模式,通常成为模式1和模式2。模式1使用JSP+JavaBean技术将页面显示和业务逻辑分开,由JSP来实现页面的显示,JavaBean对象来保存数据和实现业务逻辑。客户端直接向JSP发出请求,JSP做出相应的响应,并调用JavaBean对象,所有的数据通过JavaBean来处理,然后再返回JSP,由JSP生成最后的返回结果,模型1的结构图如下所示:
在模型一中,JSP往往会嵌入控制请求流程的代码和部分逻辑代码,如果把这部分代码提取出来,由一个单独的角色来承担,该角色也就是控制器,则此时就构成了 模型2,模型2就符合了MVC的设计模式,即模型--视图--控制器(Model--View--Controller)。
MVC的架构的Web程序被分割成若干逻辑部件,使得程序开发编程变的更加容易。它把对象按照功能的不同分割成3个部分,主要目的就是为了将各种对象的耦合度降到最低。被分割成的3个部分为:模型(Model),视图(View),控制器(Controller)。
- 模型(Model):代表了应用程序的数据和处理这些数据的规则。当模型发生变化时,它会通知视图,并为视图提供查询模型相关状态的能力。
- 视图(View):用来组织模型的内容,它从模型中获取数据,然后将数据展现给客户,该角色往往又JSP承担。
- 控制器(Controller):负责从客户端接受请求,并把这些请求转换为某种行为。这些行为往往又模型来实现,这些行为完成以后,再选择一个视图来展现给客户。
下面简单介绍一下最基础的开发模式(JSP-Servlet)来构建一个MVC架构模式,后来的那些框架都是在此基础上增加的,代替相应的组件实现MVC的设计模式的。
(JSP-Servlet)开发中,由Servlet来充当控制器的角色,它接受请求,根据请求信息的不同将它们分发给合适的JSP页面来作为用户的响应,同时,Servlet还需要实例化一个JavaBean对象,JSP就可以通过使用JavaBean的相关标签(如<jsp:getProterty>)来的到JavaBean的数据,结构如下图所示:
采用模型2,可以将页面的显示,业务逻辑的处理和流程的控制很清晰的分离出来。JSP负责数据的显示,JavaBean负责业务逻辑的处理,Servlet负责流程的控制。MVC模式使得Web应用程序很容易扩展和维护,因为各个部件的功能不同,可以由不同的人进行开发和维护。例如,前端攻城狮专门负责JSP页面,充分发挥她们的美术和设计才能,后台攻城狮负责业务逻辑的实现。
Struts1框架是如何体现MVC模式的
虽然struts1现在基本由于使用不方便基本已被struts2所替代,但许多老的项目还是用struts1写的,所以有必要对struts1的框架了解一下,毕竟它曾经也驰骋疆场数载呢,现在依然在某些项目中还能看到它的身影。
struts1的控制器(Controller)由ActionServlet、Action和struts-config.xml组成。ActionServlet是struts的入口,所有的请求都会通过它来处理,然后由它来决定相应的Action来处理请求。Action代表了一次动作,如用户注册、购买商品等,开发者的业务逻辑代码也会在这里添加。配置文件struts-config.xml是对整个struts的配置,包括ActionServlet应该将请求转发给那个Avtion,Action负责处理完成之后,又该由那个JSP文件作为响应等。
struts1的模型(Model)主要由ActionForm来实现,它有一点类似于JavaBean,包含了若干可读可写的属性,用于保存数据,也有数据验证的功能。一般来说,一个Action会配备一个ActionForm。
struts1的视图(View)主要由JSP来实现。JSP显示的数据可以来自ActionForm,也可以是Action保存在作用范围(request,session,application)的数据。当然,使用struts自带的标签可以起到最大的简化作用。
使用struts1开发Web应用程序以后,开发者的思考方式需要做一下改变,Action、ActionForm和JSP是一个整体了,每一个HTTP请求都需要它们三者协作来完成。JSP代表用户可以看到的东西,ActionForm代表的是数据,Action代表的是业务逻辑。下图所示的是struts1的MVC各个组成部分,以及它们是如何一起协调工作的。
以上就是struts1最核心的设计思想,开发人员大多数的时候只需要完成文件配置和Action,将大多数精力集中在Action中的业务逻辑实现上面。如果业务上有改动,只需要修改action即可,如果显示上有变化,也只需要修改JSP,两者实现了耦合,互不影响。下面这个图大概讲解一下Struts处理请求的过程和原理。
以上是关于什么是MVC设计模式,为什么使用MVC?的主要内容,如果未能解决你的问题,请参考以下文章