(Странно, но по моему мнению мы опять получили сверхсвязанные классы.
Ведь сколько методов используют принудительно указанный тип параметра, в стольких местах и понадобится переименование — разве нет? Примечание переводчика)
По-моему, тут просто не очень удачный пример в коде, т.к. объект класса Responce используется в большинстве методов контроллера UsersController. Внедрение через методы удобно использовать когда метод использует объект не используемый в большинстве других методов. Например, если в контроллере пользователей UsersController есть метод для приглашения на сайт по e-mail другого пользователя inviteByEmail(), который работает через объект реализующий интерфейс IMailer:
class UsersController extends BaseController
{
public function inviteByEmail(IMailer $mailer)
{
return $mailer->send('Join us!');
}
}
Класс реализующий интерфейс IMailer может работать через сторонний сервис, для инициализации работы с которым в конструкторе класса может происходить долгая авторизация на сервисе и т.д, что нет смысла делать, при вызове всех других методов класса UsersController.
Т.е. если интерфейс используется в большинстве методов класса, то лучше использовать внедрение через конструктор. Если только в нескольких методах, то лучше делать его внедрение через метод.
По-моему, тут просто не очень удачный пример в коде, т.к. объект класса
Responceиспользуется в большинстве методов контроллераUsersController. Внедрение через методы удобно использовать когда метод использует объект не используемый в большинстве других методов. Например, если в контроллере пользователейUsersControllerесть метод для приглашения на сайт по e-mail другого пользователяinviteByEmail(), который работает через объект реализующий интерфейсIMailer:Класс реализующий интерфейс
IMailerможет работать через сторонний сервис, для инициализации работы с которым в конструкторе класса может происходить долгая авторизация на сервисе и т.д, что нет смысла делать, при вызове всех других методов классаUsersController.Т.е. если интерфейс используется в большинстве методов класса, то лучше использовать внедрение через конструктор. Если только в нескольких методах, то лучше делать его внедрение через метод.