如何防止在大型代码库中到处"新建"实例?



我正在使用一个非常大的代码库,其中包含数百个不同的类。我们最初有一个主Application.php,在那里我们启动了我们的services。意思是说,这就是我们将依赖关系相互挂钩的地方,类似于这样的东西:

public function loadConfig(ConfigLocatorInterface $config) 
{
$this->config = new Config($config);
}

等等。您可能已经知道,这些实例中有多个甚至可能具有2个或多个依赖项或已经具有依赖项的对象。

一路上,这变得不可用,因为你必须不断地将这些serviceproviders传递给其他对象、控制器、连接池等。

这就是我的开发伙伴们开始在类中实例化对象的原因,而不是沿着链传递对象,从而创建紧密耦合。即使是newing也会在构造函数中打开对象,使得unit test这些代码几乎不可能。

在这种情况下,不断传递这些依赖关系可能不是解决方案,因为许多构造函数已经有3个左右的参数。如果我们要这样做,我们将不得不创建预先配置的对象块,这并不总是可能的。

容器似乎是一个可能的解决方案,但由于担心安全配置数据从容器中泄漏并显示在调用堆栈或其他地方,这一方案遭到了反对。此外,我的开发伙伴们担心这可能会导致一个臃肿的'god-object',在那里我们几乎丢弃了我们不想经常传递的所有需要的东西。

我对此束手无策,尽管这不是一个简单的技术问题,但我想知道你们个人是如何处理的。我希望这是一个可行的问题,否则我会找其他地方发布这个。我会喜欢这个社区的想法。

您正在寻找单例设计模式。请查看stackoverflow上的下一个示例:https://stackoverflow.com/a/203359/3130183

最新更新