Zend Framework 是由 Zend 公司支持开发的完全基于PHP5 的开源PHP开发框架,可用于开发 Web 程序和服务,采用 MVC(Model-View-Controller) 架构模式来分离应用程序中不同的部分方便程序的开发和维护。
ZF2并不像其他框架只是修修补补的更新,而是完全重写了ZF1的所有代码,主打的口号就是"高性能"。
来看一看ZF2都带开了哪些新的特性:
1. 模块化(ModuleManager)
比起ZF1来说,ZF2原生支持模块的概念,任意第三方php程序,只要遵循Zend的编码规范和代码结构,都可以变成一个Zend模块。目前已经有一批试验阶段的模块出炉(参看ZF2 Modules)。 其中不乏像Doctrine ORM这样优秀的项目。
可以预见的是,随着ZF2的慢慢成熟,越来越多可以选择的模块将大量涌现,可能未来基于ZF2的项目开发,会像搭积木一样轻松简单。
2. 事件驱动(EventManager)
传统程序中,代码都是按线性顺序执行的,所以开发中往往很难将一些功能独立为一个组件或模块。
事件驱动,或者也可以叫钩子(Hook),改变了普通程序流程化的运行方式,应用了事件驱动之后,程序将呈现"注册事件" => "触发事件"的跳跃式运行,可以在不影响原有程序代码的,很容易的在任意位置加入新的业务逻辑,让项目的开发变得极为灵活。
3. 服务管理器(ServiceManager)
服务管理器的概念来自于"服务定位模式(Service locator pattern)"的编程思想。这种思想提倡将程序中的每一个独立功能提取出来作为一个"服务",每一个服务都是独立可唤醒的,只有服务被调用时,服务相关的程序才会启动。
这也就是ZF2性能提升的秘密所在,ZF2的MVC启动流程中无处不体现ServiceLocator的思想,功能模块的调用极为"吝啬",想必会给以前对Zend性能有意见的开发者一个大大的惊喜。
4. 依赖注入(Di Dependency Injection)
依赖注入广泛应用于Java的主流框架中,可以很好的解除大型应用中的耦合。ZF2引入Di也经过了反复的考量和权衡,即使进入beta阶段,Di仍然一度作为ZF2的基本实现方案,整个Mvc的配置基于Di。最终为了避免陷入Di可能造成的元数据式编程泥潭(Metaprogramming), Di只是作为ZF2的底层实现,上层加入了ServiceManager。普通开发者在使用ZF2的过程中不需要接触到Di的层面。不过这并不妨碍DI作为一个优秀的php组件存在并发挥作用。
5. 社会化编程
ZF2的代码完全托管在Github,借助Github的优秀设计,任何人都可以轻松的通过fork参与ZF2的项目建设,甚至提交新的模块功能。笔者AlloVince也帮助Zend小组修复了一些BUG,发现Zend小组响应非常快(从没有超过24小时),对反馈的意见也会花时间认真解答。所以参与ZF2项目是参与php开源项目一个不错的选择。