MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是掌握器。

利用的MVC的目的:在于将M和V的实当代码分离,从而使同一个程序可以利用不同的表现形式。
比如Windows系统资源管理器文件夹内容的显示办法,下面两张图中左边为详细信息显示办法,右边为中等图标显示办法,文件的内容并没有改变,改变的是显示的办法。
不管用户利用何种类型的显示办法,文件的内容并没有改变,达到M和V分离的目的。

Windows系统的视图

mvc模式jsp注册功能实现的走近MVC设计模式你真的懂得了吗 React

网页当中

V即View视图是指用户看到并与之交互的界面。
比如由html元素组成的网页界面,或者软件的客户端界面。
MVC的好处之一在于它能为运用程序处理很多不同的视图。
在视图中实在没有真正的处理发生,它只是作为一种输出数据并许可用户操纵的办法。

M即model模型是指模型表示业务规则。
在MVC的三个部件中,模型拥有最多的处理任务。
被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图供应数据,由于运用于模型的代码只需写一次就可以被多个视图重用,以是减少了代码的重复性。

C即controller掌握器是指掌握器接管用户的输入并调用模型和视图去完成用户的需求,掌握器本身不输出任何东西和做任何处理。
它只是吸收要求并决定调用哪个模型构件去处理要求,然后再确定用哪个视图来显示返回的数据。

下图解释了三者之间的调用关系:

用户首先在界面中进行人机交互,然后要求发送到掌握器,掌握器根据要求类型和要求的指令发送到相应的模型,模型可以与数据库进行交互,进行增编削查操作,完成之后,根据业务的逻辑选择相应的视图进行显示,此时用户得到这次交互的反馈信息,用户可以进行下一步交互,如此循环。

MVC举例一:

最范例的MVC便是jsp+servlet+javabean模式。

JavaBean作为模型,既可以作为数据模型来封装业务数据,又可以作为业务逻辑模型来包含运用的业务操作。
个中,数据模型用来存储或通报业务数据,而业务逻辑模型吸收到掌握器传过来的模型更新要求后,实行特定的业务逻辑处理,然后返回相应的实行结果。

JSP作为表现层,卖力供应页面为用户展示数据,供应相应的表单(Form)来用于用户的要求,并在适当的时候(点击按钮)向掌握器发出要求来要求模型进行更新。

Serlvet作为掌握器,用来吸收用户提交的要求,然后获取要求中的数据,将之转换为业务模型须要的数据模型,然后调用业务模型相应的业务方法进行更新,同时根据业务实行结果来选择要返回的视图。

MVC举例二:

Struts2框架:Struts2是基于MVC的轻量级的web运用框架。
Struts2的运用范围是Web运用,看重将Web运用领域的日常事情和常见问题抽象化,供应一个平台帮助快速的完成Web运用开拓。
基于Struts2开拓的Web运用自然就能实现MVC,Struts2着力于在MVC的各个部分为开拓供应相应帮助。

下面通过代码来大略阐明一下:

Login.html

Login.java

Struts.xml

用户首先在Login.html中输入用户名和密码,点击上岸,此时根据action的路径,在struts.xml中找到对应的Login,然后根据对应的class的路径进入相应的login.Java,在这里判断之后,返回success或error,然后根据struts.xml中的result值,指向相应的jsp页面。

掌握器——filterdispatcher

从上面这张图来看,用户要求首先到达前端掌握器FilterDispatcher。
FilterDispatcher卖力根据用户提交的URL和struts.xml中的配置,来选择得当的动作(Action),让这个Action来处理用户的要求。
FilterDispatcher实在是一个过滤器(Filter,servlet规范中的一种web组件),它是Struts2核心包里已经做好的类,不须要我们去开拓,只是要在项目的web.xml中配置一下即可。
FilterDispatcher表示了J2EE核心设计模式中的前端掌握器模式。

动作——Action

在用户要求经由FilterDispatcher之后,被分发到了得当的动作Action工具。
Action卖力把用户要求中的参数组装成得当的数据模型,并调用相应的业务逻辑进行真正的功能处理,获取下一个视图展示所须要的数据。
Struts2的Action,比较于别的web框架的动作处理,它实现了与Servlet API的解耦,使得Action里面不须要再直接去引用和利用HttpServletRequest与HttpServletResponse等接口。
因而使得Action的单元测试更加大略,而且强大的类型转换也使得我们少做了很多重复的事情。

视图——Result

视图结果用来把动作中获取到的数据展现给用户。
在Struts2中有多种精良的结果展示办法,常规的jsp,模板freemarker、velocity,还有各种其它专业的展示办法,如图表jfreechart、报表JasperReports、将XML转化为HTML的XSLT等等。
而且各种视图结果在同一个工程里面可以稠浊涌现。

MVC举例三:

ASP.NET MVC

在visual studio当中新建一个ASP.NET MVC web运用程序,

新建完成之后,创建的项目当中即有controllers,models和views,表示了MVC的编程思想。

MVC的优点

1.耦合性低

视图层和业务层分离,这样就许可变动视图层代码而不用重新编译模型和掌握器代码,同样,一个运用的业务流程或者业务规则的改变只须要改动MVC的模型层即可。
由于模型与掌握器和视图相分离,以是很随意马虎改变运用程序的数据层和业务规则。

2.重用性高

MVC模式许可利用各种不同样式的视图来访问同一个做事器真个代码,由于多个视图能共享一个模型,它包括任何WEB(HTTP)浏览器或者无线浏览器(wap),比如,用户可以通过电脑也可通过手机来订购某样产品,虽然订购的办法不一样,但处理订购产品的办法是一样的。
由于模型返回的数据没有进行格式化,以是同样的构件能被不同的界面利用。

3.支配快,生命周期本钱低

MVC使开拓和掩护用户接口的技能含量降落。
利用MVC模式使开拓韶光得到相称大的缩减,它使程序员(Java开拓职员)集中精力于业务逻辑,界面程序员(HTML和JSP开拓职员)集中精力于表现形式上。

4.可掩护性高

分离视图层和业务逻辑层也使得WEB运用更易于掩护和修正。

MVC的缺陷

1.完备理解MVC比较繁芜。

由于MVC模式提出的韶光不长,加上同学们的实践履历不敷,以是完备理解并节制MVC不是一个很随意马虎的过程。

2.调试困难。

由于模型和视图要严格的分离,这样也给调试运用程序带来了一定的困难,每个构件在利用之前都须要经由彻底的测试。

3.不适宜小型,中等规模的运用程序

在一个中小型的运用程序中,逼迫性的利用MVC进行开拓,每每会花费大量韶光,并且不能表示MVC的上风,同时会使开拓变得繁琐。

4.增加系统构造和实现的繁芜性

对付大略的界面,严格遵照MVC,使模型、视图与掌握器分离,会增加构造的繁芜性,并可能产生过多的更新操作,降落运行效率。

5.视图与掌握器间的过于紧密的连接并且降落了视图对模型数据的访问

视图与掌握器是相互分离,但却是联系紧密的部件,视图没有掌握器的存在,其运用是很有限的,反之亦然,这样就妨碍了他们的独立重用。

依据模型操作接口的不同,视图可能须要多次调用才能得到足够的显示数据。
对未变革数据的不必要的频繁访问,也将危害操作性能。