MVC模式简介

MVC简介 html

MVC的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑汇集到一个部件里面,在须要改进和个性化定制界面及用户交互的同时,不须要从新编写业务逻辑,达到减小编码的时间。 前端

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

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

在网页当中, web

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.视图与控制器间的过于紧密的链接而且下降了视图对模型数据的访问

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

依据模型操做接口的不一样,视图可能须要屡次调用才能得到足够的显示数据。对未变化数据的没必要要的频繁访问,也将损害操做性能。

相关文章
相关标签/搜索