您觉得Zend_Registry有用吗?

应该将其用于哪些任务?哪个不适合?

变量的全局状态不是一个好习惯。
主要对象可以通过$front->setParam('paramName', $object)注入(inject)全局状态,
那么Zend_Registry的目的是什么?

最佳答案

引用PoEAA on Registry Pattern:



我使用注册表的主要原因(当我使用它时)是因为它创建了易于访问的应用程序范围。有了注册表,我不必在整个全局范围内乱扔对象。只有注册管理机构本身是全局性的。从任何地方查找我扔到注册表中的任何内容,包括模型,都非常方便:

  • Zend_Cache,Zend_Translate,重要的应用程序路径等

  • 但是,就像Singletons一样,Registry经常会皱眉。这是一个article by Brandon Savage with some thought about why not to use the Registry。反对书记官处的主要论据是
  • 使得单元测试更加困难
  • 没有经验的编码人员可能对其投入过多,并且不关心适当的设计

  • 那些反对注册表的人通常主张使用Dependency Injection,尽管应注意的是,一旦获得实例,您也可以注入(inject)regt。但是您没有Inversion of Control,因为using对象将从注册表中提取所需的内容。但是,将注册表用作服务定位器是一种有效的方法。

    看到这个article by Martin Fowler about ServiceLocator vs. Dependency Injection

    就像您对问题的评论中指出的那样,Zend_Registry不是严格的Singleton。除了使用通过Zend_Registry::getInstance()获得的全局实例之外,您还可以在需要时实例化多个实例。因此,对象可以拥有自己的注册表。但是,当以这种方式使用注册表时,它基本上只是一个荣耀的ArrayObject。

    最后说明:与所有设计模式一样,如果适用于您的问题,请使用它。

    关于php - Zend_Registry : real life examples,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2531168/

    10-13 04:47