Как правильно использовать сервисы в Симфони4?

Как правильно получать доступ к сервисам в Симфони4? Как правильно, со стилистической точки зрения?
Например, нужно получить данные об авторизованном пользователе. Тут можно пойти 2 путями
1. Передать через параметры метода
public function index(TokenStorageInterface $token) {
  $user = $token->getToken()->getUser();
}


2. Вызвать через обращение к контейнеру
public function index() {
  $user = $this->get('security.token_storage')->getToken()->getUser();
}


Оба способа работают, но в документации встречается только 1 способ. Во всех примерах обращение идет как в 1 примере. 2 способ активнее использовался в ранних версиях Симфони.

Так вот вопрос, как более правильно использовать сервисы, с точки зрения Symfony way?
Лично мне нравится 2 способ, потому-что он компактнее. Но в документации не встретил ни одного примера в таком стиле!
  • Вопрос задан
  • 188 просмотров
Решения вопроса 1
@D3lphi
Использовать нужно первый вариант. В нем мы реализуем паттерн внедрение зависимостей (dependency injection), в то время как во втором случае - паттерн (скорее даже, анти) - локатор служб (service locator). Локатор служб скрывает зависимости классов/методов и создает излишнюю связанность кода, который теперь зависит от этого самого контейнера. Становится неудобно мокать зависимости для тестирования.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы