gpt4 book ai didi

php - Zend_Registry : real life examples

转载 作者:可可西里 更新时间:2023-11-01 13:04:22 24 4
gpt4 key购买 nike

你找到Zend_Registry了吗?有用吗?

它应该用于哪些任务?哪个不是?

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

最佳答案

引用 PoEAA on Registry Pattern :

When you want to find an object you usually start with another object that has an association to it, and use the association to navigate to it. Thus, if you want to find all the orders for a customer, you start with the customer object and use a method on it to get the orders. However, in some cases you won't have an appropriate object to start with. You may know the customer's ID number but not have a reference. In this case you need some kind of lookup method - a finder - but the question remains: How do you get to the finder?

我使用注册表(当我使用它时)的主要原因是因为它创建了一个易于访问的应用程序范围。使用注册表,我不必在全局范围内乱扔对象;只有注册表本身是全局的。查找我从任何地方扔进注册表的任何东西都很方便,包括模型:

  • Zend_Cache、Zend_Translate、重要应用路径等

然而,就像单例一样,Registry 经常被人反对。这是一个 article by Brandon Savage with some thought about why not to use the Registry .反对注册表的主要论点是

  • 它使单元测试更加困难
  • 没有经验的编码人员可能会投入太多,而不关心适当的设计

那些投票反对注册表的人通常提倡使用 Dependency Injection ,尽管应该注意的是,一旦获得注册表实例,您也可以注入(inject)它。你没有 Inversion of Control然后,因为使用对象将从注册表中提取它需要的东西。不过,使用注册表作为服务定位器是一种有效的方法。

查看此 article by Martin Fowler about ServiceLocator vs. Dependency Injection .

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

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com