隐藏最终用户实例化它的类依赖项(PHP)

时间:2010-02-16 11:57:30

标签: php dependency-injection

我的情况基本上是这样的:我有一个名为Foo的类,它有依赖关系A和B,所有这些都是库的内部。 Foo的实例将由库的用户创建,他们不应该要求了解依赖关系。

在内部当然我希望Foo与A和B的具体实现保持分离。我曾考虑过一个简单的静态工厂类,但是有必要以某种方式为依赖项配置它(比如Factory :: $ _ staticAttr = x)这似乎是错误的,因为它本质上意味着我的静态类具有状态。

我一直在考虑一些XML或其他配置的依赖注入容器,但是它提出了如何使配置的DIC实例可以访问的问题,而不会像在注册表对象中那样混乱。

我正在努力为最终用户提供一些简单的方法来生成注入所有内容的Foo实例,同时保持库中隐藏所有依赖项等细节。

我已经读完了,解决方案还没有真正让我明白,所以我很感激任何输入:)。

2 个答案:

答案 0 :(得分:0)

我自己使用一个依赖注入容器(一个静态工厂)来做这些事情。 请仔细阅读以下文章:http://www.potstuck.com/2009/01/08/php-dependency-injection/

  

我正在努力寻找一些微不足道的方法   为最终用户生成一个   一切都是Foo的例子   注入,同时保持所有   隐藏的依赖关系的细节   在图书馆内。

在那种情况下,我肯定会找工厂。

<强>更新

这就是静态类的用途。它们代表某种状态,就像在这种情况下一样。您只需要一个db适配器(每个application | class | package),因此您可以反复使用同一个db。 使用global会更加hackyish;)

答案 1 :(得分:0)

感谢您的回复。

嗯,我昨天读了那篇文章。我唯一的问题是:

`Factory::$_database = $ourDatabaseVarForDB1;`

虽然很方便,但这种实现方式对我来说有点像黑客的方式吗?

然而它会勾选其他方框,所以如果没有更好的情况,那就需要这样。