知识卡片

页面控制器与前端控制器的选择

普通读书笔记卡

内容

输入控制器有两种常见组织方式。页面控制器:为站点上每个页面(更准确说是每个”动作”,比如一次按钮点击或链接跳转)各配一个输入控制器,最简单的情况下这个控制器甚至可以就是包含了视图功能和输入处理功能的同一个服务器页面;多数实现会把输入控制器拆成独立对象,由它创建合适的处理对象、再实例化合适的视图返回结果——需要注意”页面控制器”和”页面”之间并不总是一一对应,更准确的说法是”每个动作一个页面控制器”,同一个链接偶尔也可能根据条件跳转到不同页面。任何输入控制器都承担两个职责:处理HTTP请求消息、根据请求决定下一步该做什么——把这两个职责分开是有意义的(比如让服务器页面处理请求、把”决定下一步”的逻辑交给一个独立的辅助对象)。前端控制器把这种分离贯彻得更彻底:用单一对象处理所有请求消息,这个统一的处理程序自己解释URL、判断请求类型,再创建对应的独立对象去实际处理——好处是当站点的行为结构发生变化时,不需要重新配置Web服务器本身,因为所有请求的入口始终是这同一个对象。

参考来源

- 位置:《企业应用架构模式》第一部分"表述"之"第4章 Web表现层"之"4.2 输入控制器模式"(源文件:_epub-src/OEBPS/Text/000028.html) - 结论依据:原文说明"为Web站点上的每一个页面都准备一个输入控制器是一种最常用的模式……更为准确的观点是:为每一个动作准备一个页面控制器……前端控制器则把这种分离的思想贯彻得更彻底一些,它通过单个对象处理所有的请求消息……当站点的行为结构有所改变的时候,就可以避免重新配置Web服务器了",直接支撑本卡结论。 - 原始内容:前端控制器则把这种分离的思想贯彻得更彻底一些,它通过单个对象处理所有的请求消息。这个单一的处理程序解释URL来计算出它正在处理哪种类型的请求消息,然后创建一个分离的对象来处理它。