Я получил огромный проект Symfony. Я создал много сервисов и подсервисов для удаления кода контроллера и сервисов.
В моем коде я создаю эти службы с помощью:
$this->get('MyServiceName')->myMethod($foo);
Один из моих коллег использует new
ключевое слово для создания экземпляра класса:
$myservice = new Service();
$refid = $myservice->mymethod($foo);
Так что мне интересно, это лучшая практика? Должен ли я переписать этот код? Как этот код влияет на удобство обслуживания и производительность приложения?
Если сервис определен в контейнере Ioc, то во всех случаях используйте его оттуда, потому что он будет создан контейнером. Он берет на себя ответственность за создание новых классов от разработчика. Если явные зависимости меняются, вам нужно будет только изменить их в контейнере, а не искать их во всем коде проекта. Это также в большинстве случаев дает выигрыш в производительности, потому что некоторые классы нужно создавать только один раз. В любом случае, поговорите со своим коллегой, почему он так делает.
я всегда использовать первый способ (т.е. используя сервисный контейнер) потому что с внедрением зависимостей Symfony вам не нужно беспокоиться о зависимостях и / или параметрах; Я никогда использовать второй способ (т. е. создание службы «вручную» с new
ключевое слово) и я почти уверен, что это худший путь.
Кстати, вы должны проверить официальное руководство «Лучшие практики» а также эти сообщения в блоге Фабьен Потенсье.