解读Zend框架(五) 前端控制器

在ZF框架中,前端控制器好比人类的大脑,处理着每一个通过HTTP协议发送过来的的请求,告诉请求该访问哪个正确的控制器以及动作。ZF开发人员对其也着实下了一番功夫,仅此组件,就采用了两种不同的设计模式实现功能:前端控制器模式以及单例模式

我们在开发WEB应用系统(但不拘于WEB应用)时,存在很多不恰当的设计方法,比如让客户端直接访问各个请求页面。如smarty模板框架,这种实现方法,会导致项目的业务逻辑被分散到各个视图中,从而产生了各种问题:

  1. 不利于现有功能的修改,使代码的可维护性降低。例如session会话管理,一旦session验证的方式需要改变,则要修改所有页面的代码。
  2. 缺乏可扩展性。例如我们需要在已有的系统中加入ACL权限控制,控制用户对某些页面的访问,但是项目没有统一的处理入口,我们需要在所有的页面中都加上认证代码。

也许你会说,我可以实现通过包含一个公共文件来实现功能。那么每个文件中都需要include它,但是很不幸,当项目代码数量膨胀到一定数量级,我想修改一下这个公共文件的名字时,噩梦开始了...

为了解决这种项目提供多个请求入口,不利用项目管理与扩展的状况,聪明的开发人员提出了前端控制器这种设计模式。那么到底什么是前端控制器模式呢?

Front Controller模式要求在WEB应用系统的前端(Front)设置一个入口控制器(Controller),所有的request请求都被发往该控制器统一处理。

 

下面这幅图很生动的描述了前端控制器的作用。

ZF框架中,前端控制器,实现的另一个设计模式就是单例模式(Singleton)。单例模式保证了整个ZF项目在用户的多次请求中,只产生一个Zend_Controller_Front类的实例,保证不重复产生资源导致性能损失和浪费。

1. $front = Zend_Controller_Front::getInstance(); //right method
2. $front = new Zend_Controller_Front();  //wrong method

从上面的代码,我们可得知,我们不可以在项目中直接对Zend_Controller_Front类进行实例化,如果你尝试用new方法去获得Zend_Controller_Front类的实例,我们会得到一个该类的构造函数是protected属性的异常信息,这就是单例模式的特点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值