在Symfony2中使用服务的最佳方式是什么?


What the best way to use services with Symfony2

我得到了一个巨大的Symfony项目。我创建了许多服务和子服务来细化控制器和服务代码。

在我的代码中,我实例化这些服务:

$this->get('MyServiceName')->myMethod($foo);

我的一个同事使用new关键字实例化类:

    $myservice = new Service();
    $refid = $myservice->mymethod($foo);

所以我想知道,这是一个最佳实践吗?我应该重写代码吗?这类代码对应用程序的可维护性和性能有什么影响?

如果服务是在Ioc容器中定义的,那么无论如何都要从那里使用它,因为它将由容器构造。它从开发人员那里承担了实例化新类的责任。如果显式依赖改变了,你只需要在容器中改变它们,而不是在整个项目代码中寻找它们。在大多数情况下,这也有性能上的好处,因为有些类只需要实例化一次。无论如何,和你的同事谈谈,他为什么这样做。

总是使用第一种方法(即。使用服务容器),因为使用Symfony的依赖注入,你不需要担心依赖项和/或参数;我从来没有使用过第二种方法(即。用new关键字"手工"实例化一个服务),我很确定这是最糟糕的方法。

顺便说一下,你应该看看官方的"最佳实践"指南和Fabien Potencier的这些博客文章。