我有一个庞大的Symfony项目。我创建了许多服务和子服务来覆盖控制器和服务代码。
在我的代码中,我用以下方法实例化这些服务:
function someRandomFunction(){
window.location.href = document.getElementById("search_bar").value + ".html";
return false;
}
我的一位同事使用$this->get('MyServiceName')->myMethod($foo);
关键字来实例化该类:
new
所以我想知道,这是最佳做法吗?我应该重写那段代码吗?这种代码对应用程序的可维护性和性能有什么影响?
答案 0 :(得分:3)
如果服务是在Ioc容器中定义的,那么一定要从那里使用它,因为它将由容器构造。它负责从开发人员那里实例化新类。如果显式依赖项发生更改,您只需要在容器中更改它们,而不是在整个项目代码中查找它们。在大多数情况下,这也具有性能优势,因为某些类只需要实例化一次。无论如何,请与您的同事交谈,为什么他这样做。
答案 1 :(得分:2)
我始终使用第一种方式(即使用服务容器),因为使用Symfony的依赖注入,您无需担心依赖性和/或参数;我已经从不使用第二种方式(即使用new
关键字“手动”实例化服务)并且我很确定这是最糟糕的方式。
顺便说一下,你应该看看Fabien Potencier的official "best practices" guide和these blog posts。