首页 > 代码库 > 框架之谈(MVC>Structs>Structs2)

框架之谈(MVC>Structs>Structs2)

经典MVC中的事件流中,用户与视图View进行交互,填入数据并单击按钮,控制器Controller按接收到来自视图的事件并对模型Model进行操作,根据用户提供的数据更新模型Model。View也会接到“模型改变”的事件通知,因而它会随着模型而更新,将更新的结果显示给用户。这种模式在单机且实时更新的应用程序中效果很好。

但是,在web世界的MVC,view是在客户端的浏览器生成的,controller和model在服务器端,他们之间的交互通过http协议完成的。view不能直接调用controller,而是基于http请求映射成不同的url。view不是一个可以被更新的对象,而是在客户端发出一个新请求的时候随之呈现的网页页面。同时,controller也不能将自身的改变通知biew,因为view呈现于另一台计算机的用户浏览器中。因此,试图每次都需要依照最新的数据重新生成。

web世界的经典MVC应用程序通过使用前端控制器(front controller)模式实现的。此模式包含一个分发器(通过servlet实现),而分发器将请求url映射到需要被执行的命令示例(commond  Instance,于Structs中就是Action)。

Action与系统后端的服务进行交互,通常这些服务组合在一起作为模型。命令实例在处理完业务逻辑之后返回一个码值,这个返回码会映射到某个view(通常为一个web页面模板,如jsp)。最后,结合controller和模型view(通常会使用标签库,一边访问数值)将会呈现给用户。

分发器直接到达view并且在继续生成view之前调用相应的controller,这种模式称为页面控制器

(▲Structs1采用前端控制器,Structs两种模式都支持)

 

框架可以极大提高开发效率。

框架的强大之处不是源自他能让你做什么,而是他不能让你做什么。

 

框架之谈(MVC>Structs>Structs2)