MVC模式工作的核心模式

  MVC的核心模式思想是将一个应鼡分成三个基本部分:Model(模型)、View(视图)和Controller(控制器)这三个部分以最少的耦合,从而提高应用的及可维护性
  MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写一种软件设计典范,用一种、数据、界面显示分离的方法组织代码将聚集到一个部件里面,在改进和个性化定淛界面及用户交互的同时不需要重新编写。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结構中

MVP 是从经典的模式MVC演变而来它们嘚基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据View负责显示。作为一种新的模式MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它們之间的通信是通过Presenter ControllerAlex在他的blog中对于这两者之间的比较很直观也比较清楚,原文可以下面的地址找到:/blog/cns!5F420!中包含控件的页面(page)就是一个视图視图可以从模型中读取数据,但是不能修改或更新模型

3、层现器(Presenter)/控制器(Controller)包含了根据用户在视图中的行为去更新模型的逻辑。视图仅仅只昰将用户的行为告知控制器而控制器负责从视图中取得数据然后发送给模型。

MVC/P模式的核心模式是为了将模型从视图/控制器中分离出来從而使得模型独立于它们,因此模型不包含对视图和控制的引用

1、为了使得视图接口可以与模型和控制器进行交互,控制器执行一些初始化事件

2、用户通过视图(用户接口)执行一些操作

3、控制器处理用户行为(可以用观察着模式实现)并通知模型进行更新

4、模型引发一些事件以便将改变发告知视图

5、视图处理模型变更的事件,然后显示新的模型数据

6、用户接口等待用户的进一步操作

这一模式的有一下几个偠点:

1、视图并不使用控制器去更新模型控制器负责处理从视图发送过来的用户操作并通过与模型的交互进行数据的更新

Forms的默认处理方式就是这样的。【译注:比如我们双击一个Button然后在它的事件里写处理逻辑,然后将处理的数据写回模型中这里处理逻辑时间应该是控淛器的功能,但是我们并没有专门写一个控制器来做这件事情而是接受了VS的默认处理方式将它写在Form的代码中,而这里的Form在MVC中它就是一个View所以这说vs默认的处理方式是将把控制器和视图融合在一起的。】

“主动―MVC”模式也是通常意义下的MVC模式

【译注:为什么说是主动的?View鈈是等Controller通知它Model更新了然后才从Model取数据并更新显示而是自己监视Model的更新(如果用观察者模式)或主动询问Model是否更新。前面那种等待Controller通知的方式昰下面所介绍的“被动―MVC”的实现方式】

与主动MVC的区别在于:

1、模型对视图和控制器一无所知,它仅仅是被它们使用

2、控制器使用视图并通知它更新数据显示

3、视图仅仅是在控制器通知它去模型取数据的时候它才这么做(视图并不会订阅或监视模型的更新)

4、控制器负责处悝模型数据的变化

5、控制器可以包含对视图的渲染逻辑

与“被动―MVC模式”很接近,区别在于“视图并不使用模型”在MVP模式中视图和模型昰完全分离的,他们通过Presenter进行交互

Presenter与控制器非常相似,但是它们也有一些的区别:

1、Presenter处理视图发送过来的用户操作(在MVC中视图自己处理叻这些操作)

2、它用更新过的数据去更新模型(在被动MVC中控制器只是通知视图去更新过的模型中去取新的数据而主动MVC中模型通知视图去哽新显示,控制器不需要做工作)

3、检查模型的更新(与被动MVC一样)

4、(与MVC的主要区别)从模型中取数据然后将它们发送到视图中

5、(与MVC嘚主要区别)将所做的更新告知视图

1、模型与视图完全分离我们可以修改视图而不影响模型

2、可以更高效地使用模型,因为所以的交互嘟发生在一个地方――Presenter内部

3、我们可以将一个Presener用于多个视图而不需要改变Presenter的逻辑。这个特性非常的有用因为视图的变化总是比模型的變化频繁。

4、如果我们把逻辑放在Presenter中那么我们就可以脱离用户接口来测试这些逻辑(单元测试)。

由于对视图的渲染放在了Presenter中所以视圖和Persenter的交互会过于频繁。

还有一点你需要明白如果Presenter过多地渲染了视图,往往会使得它与特定的视图的联系过于紧密一旦视图需要变更,那么Presenter也需要变更了

如说,原本用来呈现Html的Presenter现在也需要用于呈现Pdf了那么视图很有可能也需要变更。

1、通过依赖注入(set、构造器两种紸入方式)实现Ioc控制反转

2、提供业务层事务管理支持

3、提供AOP面向切面编程功能

同时从Spring框架结构图中可以看出除了spring底层核心模式容器之外,还提供了与持久层(JDBC、ORM框架)和web层Servlet、Struts等框架的集成

1、DispatcherServlet:中央控制器,把请求给转发到具体的控制类

2、Controller:具体处理请求的控制器

3、HandlerMapping:映射处理器负责映射中央处理器转发给controller时的映射策略

4、ModelAndView:服务层返回的数据和视图层的封装类

5、ViewResolver:视图解析器,解析具体的视图

6、Interceptors :拦截器负责拦截我们定义的请求然后做处理工作

下面通过一个Spring MVC基础配置,来进一步对上述原理进行理解

4、基本配置完成后,通过 进行页面訪问

1、web配置文件中设置了访问的url模式,以*.do结尾所以每次发送request请求时时,通过***.do进行访问

3、ViewResolver 视图解析器通过配置访问路径的前缀 ,后缀在controller中返回到view页面时,便可直接写jsp的名字与前后缀一组合便可找到该view页面。例如ControllerTest 类中return “index”,便可直接跳转到index.jsp页面值得注意的是:return的徝并不是指jsp的名称,而是该jsp除去前后缀中间剩余的路径字符串

 

我要回帖

更多关于 核心模式 的文章

 

随机推荐