SpringMVC原理MVC设计思想
什么是MVC?
MVC是⼀种架构模式 --- 程序分层,分⼯合作,既相互独⽴,⼜协同⼯作
MVC是⼀种思考⽅式 --- 需要将什么信息展⽰给⽤户? 如何布局?调⽤哪些业务逻辑?
MVC流程图如下图所⽰:
MVC核⼼思想:业务数据抽取同业务数据实现相分离
总结:
模型层(M) 业务数据的信息表⽰,关注⽀撑业务的信息构成,通常是多个业务实体的组合
视图层(V) 为⽤户提供UI,重点关注数据的呈现
控制器(C) 接受⽤户请求,并调⽤相应的模型处理
(相当于⼀个总调配中⼼,有什么需求,就去调⽤相应模型进⾏处理,最后通过视图给⽤户进⾏展⽰)
SpringMVC的原理:
1 ⾸先⽤户发出请求,请求到达SpringMVC的前端控制器(DispatcherServlet),
2 前端控制器根据⽤户的url,请求处理器映射器(HandlerMapping)查匹配该url的handler,并返回⼀个执⾏链(HandlerExecutionChain),
3 前端控制器再请求处理器适配器(HandlerAdapter)调⽤相应的handler进⾏处理并返回给前端控制器⼀modelAndView,
4 前端控制器再请求视图解析器(ViewResolver)对返回的逻辑视图进⾏解析,
5 最后前端控制器将返回的视图进⾏渲染并把数据装⼊到request域,返回给⽤户。
注:DispatcherServlet作为springMVC的前端控制器,负责接收⽤户的请求并根据⽤户的请求返回相应的视图给⽤户(分发调度)
补充:
为什么叫前端控制器?前端⼜是什么?
举个例⼦:假如你去医院看病,通过向分诊台的医院描述⾃⼰的病情,就可以得到医⽣的指导具体去看外科、内科或者神经科等等,这⾥我们的分诊台就扮演着前端控制器(Dispatcher)的⾓⾊,也叫做调度器,⽽各个科室就扮演着控制器(Controller)的⾓⾊,因为分诊台是在具体各个科室之前,所以这个模式就叫做前端控制器。
springmvc选择题MVC设计思想
MVC英⽂即Model-View-Controller,即把⼀个应⽤的输⼊、处理、输出流程按照Model、View、Controller的⽅式进⾏分离,这样⼀个应⽤被分成三个层——模型层、视图层、控制层。
视图(View)代表⽤户交互界⾯,对于Web应⽤来说,可以概括为HTML界⾯,但有可能为XHTML、XML和Applet。随着应⽤的复杂性和规模性,界⾯的处理也变得具有挑战性。⼀个应⽤可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及⽤户的请求,⽽不包括在
视图上的业务流程的处理。业务流程的处理交予模型(Model)处理。⽐如⼀个订单的视图只接受来⾃模型的数据并显⽰给⽤户,以及将⽤户界⾯的输⼊数据和请求传递给控制和模型。
模型(Model):就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其它层来说是⿊箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核⼼。⽬前流⾏的EJB模型就是⼀个典型的应⽤例⼦,它从应⽤技术实现的⾓度对模型做了进⼀步的划分,以便充分利⽤现有的组件,但它不能作为应⽤设计模型的框架。它仅仅告诉你按这种模型设计就可以利⽤某些技术组件,从⽽减少了技术上的困难。对⼀个开发者来说,就可以专注于业务模型的设计。MVC设计模式告诉我们,把应⽤的模型按⼀定的规则抽取出来,抽取的层次很重要,这也是判断开发⼈员是否优秀的设计依据。抽象与具体不能隔得太远,也不能太近。MVC并没有提供模型的设计⽅法,⽽只告诉你应该组织管理这些模型,以便于模型的重构和提⾼重⽤性。我们可以⽤对象编程来做⽐喻,MVC定义了⼀个顶级类,告诉它的⼦类你只能做这些,但没法限制你能做这些。这点对编程的开发⼈员⾮常重要。
业务模型还有⼀个很重要的模型那就是数据模型。数据模型主要指实体对象的数据保存(持续化)。⽐如将⼀张订单保存到数据库,从数据库获取订单。我们可以将这个模型单独列出,所有有关数据库的操作只限制在该模型中。
控制(Controller)可以理解为从⽤户接收请求, 将模型与视图匹配在⼀起,共同完成⽤户的请求。划分控制层的作⽤也很明显,它清楚地告诉你,它就是⼀个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的⽤户请求。控制层并不做任何的数据处理。例如,⽤户点击⼀个连接,控制层接受请求后, 并不处理业务信息,它只把⽤户的信息传递给模型,告诉模型做什么,选择符合要求的视图返回给⽤户。因此,⼀个模型可能对应多个视图,⼀个视图可能对应多个模型。
MVC的优点
⼤部分⽤过程语⾔⽐如ASP、PHP开发出来的Web应⽤,初始的开发模板就是混合层的数据编程。例如,直接向数据库发送请求并⽤HTML显⽰,开发速度往往⽐较快,但由于数据页⾯的分离不是很直接,因⽽很难体现出业务模型的样⼦或者模型的重⽤性。产品设计弹性⼒度很⼩,很难满⾜⽤户的变化性需求。MVC要求对应⽤分层,虽然要花费额外的⼯作,但产品的结构清晰,产品的应⽤通过模型可以得到更好地体现。
⾸先,最重要的是应该有多个视图对应⼀个模型的能⼒。在⽬前⽤户需求的快速变化下,可能有多种⽅式访问应⽤的要求。例如,订单模型可能有本系统的订单,也有⽹上订单,或者其他系统的订单,但对于订单的处理都是⼀样,也就是说订单的处理是⼀致的。按MVC设计模式,⼀个订单模型以及多个视图即可解决问题。这样减少了代码的复制,即减少了代码的维护量,⼀旦模型发⽣改变,也易于维护。其次,由于模型返回的数据不带任何显⽰格式,因⽽这些模型也可直接应⽤于接⼝的使⽤。
再次,由于⼀个应⽤被分离为三层,因此有时改变其中的⼀层就能满⾜应⽤的改变。⼀个应⽤的业务流程或者业务规则的改变只需改动MVC的模型层。
控制层的概念也很有效,由于它把不同的模型和不同的视图组合在⼀起完成不同的请求,因此,控制层可以说是包含了⽤户请求权限的概念。
最后,它还有利于软件⼯程化管理。由于不同的层各司其职,每⼀层不同的应⽤具有某些相同的特征,有利于通过⼯程化、⼯具化产⽣管理程序代码。
思想:
MVC应⽤程序总是由三个部分组成.Event(事件)导致Controller改变Model或View,或者同时改变两者.只要Controller改变了Models的数据或者属性,所有依赖的View都会⾃动更新.类似的,只要Controller改变了View,View会从潜在的Model中获取数据来刷新⾃⼰。
MVC模式是⼀个复杂的架构模式,其实现也显得⾮常复杂,但多种设计模式结合在⼀起,使MVC模式的实现变得相对简单易⾏.Views可以看作⼀棵树,显然可以⽤Composite Pattern来实现.Views和Models之间的关系可以⽤Observer Pattern体现.Controller控制Views的显⽰,可以⽤Strategy Pattern实现.Model通常是⼀个调停者,可采⽤Mediator Pattern来实现.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论