2010-02-24 36 views
1

Zend框架发展得相当快,我们都同意,我们都在尝试Zend Framework的模块化结构时感到惊讶,如果要具体引导模块 - 模块的所有引导文件都在开始时执行无论我们是否使用/访问该模块。据我记得,模块bootstrap像插件一样执行到主Bootstrap。但另一方面,我发现ZF的实现非常复杂,并且非常尊重设计模式。Zend框架的模块化方法是否具有良好的逻辑?

所以才去和绊模块延迟加载/引导,我想对自举方面

一个目标思想 - 因此,没有在ZF初始模块的Bootstrap有它后面的固体逻辑或它应该改变成像懒/按需引导?

我知道问题是很含蓄的,所以让我给些

例如在一个模块化的应用程序,我们希望为每个模块一个单独的初始配置(如单独的布局)和自举是“做初始配置的地方”的范例,对吧?但是,如果我们按照Zend文档说的方式放置初始化/配置,那么我们的应用程序会为每个请求加载在每个模块引导类中设置的所有初始化(我只是一个客户,并且仍然在我请求管理员引导时将被执行,尽管在后台) - 这是非常糟糕的系统。

据我看到有两个办法的思路可以流动

  1. 有在模块引导的东西,只是整个系统 (几乎看不出它什么都可以互补)
  2. 要更改与帮助行动插件或扩展引导类与boostrapping的madule白手起家

而且我最初的问题是,交易没有任何逻辑遵循先选择自举的方式模块,第二种选择将是一个不错的选择?

回答

1

是的。它基于调度过程。在引导时你无法确定你需要哪一个。模块引导程序有一个优点 - 您不需要将模块代码插入主引导程序 - 它使模块更“自包含”。

模块取决于

  • 请求
  • 选择的路由
  • 如果为前。 _forward()被称为

但是你可能想为每个模块添加你的路由,注入你自己的disatcher等。而这一切都需要在创建请求对象之前完成。这就是为什么在开始时启动所有引导程序。

在理想的情况下,您的引导程序不应该包含重复代码或添加任何严重的开销。您可以从其他启动的引导程序中检索资源,以便不存在像db适配器或视图这样的对象的副本。

+0

“您可以从其他启动的引导程序中获取资源,因此不会有像db适配器或视图这样的对象的副本。” - btw如何获取已启动的模块Bootstrap内其他(主)引导程序的资源, couse我无法获得管理模块中的“布局”资源 – simple 2010-02-25 12:07:40

+0

您无法执行$ this-> getResource('layout')?这让我感到惊讶。不是我曾经尝试过,但我预计它会这样工作......抱歉错误:) – 2010-02-25 17:26:27