您的位置:首页 > 运维架构 > 网站架构

关于MVC到底是设计模式还是框架又或者是架构模式的新看法

2017-11-04 11:08 1386 查看
MVC学习杂谈

MVC简介


    MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。

    其中,模型用来封装业务逻辑,视图用来处理表示逻辑,控制器用来协调模型和视图(视图将请求先发送给控制器,由控制器选择对应的模型来处理;模型返回的处理结果要先发送给控制器,由控制器选择对应的视图来展现)。

如何使用MVC?

    一般使用java类充当模型,使用Servlet充当控制器,使用jsp充当视图。

SpringMVC的基本原理

    1)DispatcherServlet   前端控制器

    2)HandlerMapping    映射处理器

    3)Controller               处理器

    4)ModelAndView       处理结果

    5)ViewResovler          视图解析器

具体流程

step1.DispatcherServlet收到请求之后,依据HandlerMapping的配置,调用Controller来处理。

step2.Controller将处理结果封装成ModelAndView,然后将该对象返回给DispatcherServlet。

          注: ModelAndView里面是数据和视图名,其中视图名是一个字符串(比如"hello"),ViewResolver会将视图名解析成真正的视图对象(比如hello.jsp),

                 视图技术有很多,比如jsp,FreeMarker,Velocity等等,这样设计的好处:当需要使用新的视图技术的时候,只需要配置新的ViewResolver即可。

step3.DispatcherServlet依据ViewResolver的解析,调用对应的jsp。



关于MVC是设计模式还是架构模式或者框架的争议与不同看法

以下为他人看法,觉得有趣,拿来分析下,具体来源参考下方超链接。

首先,MVC在我的理解看来 他是一种架构模式,也可以说是一种框架的模式。而并非是一种设计模式,从百度百科找来设计模式的概念设计模式  设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。  那么,从我个人的角度理解,就相当于盖一栋楼和盖一座房子。盖一栋楼和盖一座房子,他们动工的流程基本都是一样的:设计师出图纸、打地基、用砖垒、封楼顶。但是他们不一样的地方在于
盖一栋楼所出的图纸、所要打的地基的深度等等和盖一座房子所用的图纸、所要打的地基的深度都是不一样的。因此,他们动工的这些流程就可以看作是设计模式的一种,而他们实际盖的时候所需要的架构就类似于MVC框架模式。

下面就是我曾看到过的一个MVC模型的图:



      从图中可以看出,控制器获取到了用户的请求 然后不做任何处理就转发给了模型,模型通过自己的业务逻辑判断,以及对数据库中数据的操作,找到了满足控制器所转发过来的用户请求,假设模型所要提交给视图的请求都和视图有一个虚拟的链接地址,那么每次在模型确定好要传送的已经处理好的用户请求的时候,视图就会对模型的这一请求做出回应,便会将不同的页面展示给用户,然后根据用户的进一步要求继续重复之前的流程。  

     从个人角度,用大白话来说就是:模型=建筑公司的施工部门;控制器=建筑公司的销售部门;视图=建筑公司的设计部门;

     在销售部门成功拉到用户的时候,他会将用户的需求直接交给施工部门,其中需求就包括到底谁要做什么;施工部门在得到销售部门从用户那里得到的请求之后,就会用用户的请求和自己所能承接的项目做对比呀,比如 一个房地产开发商要盖一座别墅,那么施工部门就会判断自己会不会改别墅喽;在施工部门确定好是否能满足用户的需求之后就会把这个决定告诉设计部门,那么就会让设计部门负责把他们所能做的图纸反馈给用户,当然,如果不能做,那就会反馈给用户一张白纸加许多句解释的话呗。如果用户满意了,那么就直接进行这个项目,如果用户觉得图纸上哪个地方有问题,那么久继续重复之前的操作。   

   

参考文章:

MVC到底是设计模式还是一种框架?   https://www.zhihu.com/question/31079945
到底什么是MVC?                                   http://blog.csdn.net/pi9nc/article/details/18822325
MVC到底是个什么                                   http://www.cnblogs.com/xiyoulc/p/5453127.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息