Web应用中的处理器除了要接收和处理客户端发来的请求,还需要调用模板引擎,然后由模板引擎生成HTML并把数据填充至将要回传给客户端的响应报文当中。

用MVC模式来讲,处理器既是控制器(controller),也是模型(model)。在理想的MVC模式实现中,控制器应该是“苗条的”,它应该只包含路由(routing)代码以及HTTP报文的解包和打包逻辑;而模型则应该是“丰满的”,它应该包含应用的逻辑以及数据。

“模型-视图-控制器”模式

模型-视图-控制器(Model-View-Controller,MVC)模式是编写Web应用时常用的模式,这个模式是如此的流行,以至于人们有时候会错误地把这一模式当成了Web应用开发本身。

实际上,MVC模式最初是在20世纪70年代末的施乐帕罗奥多研究中心(Xerox PARC)被引入到Smalltalk语言里面的,这一模式将程序分成了模型、视图和控制器3个部分,其中模型用于表示底层的数据,而视图则以可视化的方式向用户展示模型,至于控制器则会根据用户的输入对模型进行修改。每当模型发生变化时,视图都会自动进行更新,从而展现出模型的最新状态。

尽管MVC模式起源于桌面开发,但它在编写Web应用方面也流行了起来——包括Ruby on Rails、CodeIgniter、Play和Spring MVC在内的很多Web应用框架都把MVC用作它们的基本模式。在这些框架里面,模型一般都会通过结构(struct)或对象(object)映射(map)到数据库,而视图则会被渲染为HTML,至于控制器则负责对请求进行路由,并管理对模型的访问。

使用MVC框架进行Web应用开发的新手程序员常常会误以为MVC模式是开发Web应用的唯一方法,但Web应用本质上只是一个通过HTTP协议与用户互动的程序,只要能够实现这种互动,程序本身可以使用任何一种模式开发,甚至不使用模式也是可以的。

为了防止模型变得过于臃肿,并且出于代码复用的需要,开发者有时候会使用服务对象(service object)或者函数(function)对模型进行操作。尽管服务对象严格来说并不是MVC模式的一部分,但是通过把相同的逻辑放置到服务对象里面,并将同一个服务对象应用到不同的模型之上,可以有效地避免在多个模型里面复制相同代码的窘境。

正如之前所说,Web应用并不是一定要用MVC模式进行开发——通过将控制器和模型进行合并,然后由处理器直接执行所有操作并向客户端返回响应的做法不仅是可行的,而且也是十分合理的。

results matching ""

    No results matching ""