(Странно, но по моему мнению мы опять получили сверхсвязанные классы.
Ведь сколько методов используют принудительно указанный тип параметра, в стольких местах и понадобится переименование — разве нет? Примечание переводчика)
По-моему, тут просто не очень удачный пример в коде, т.к. объект класса 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
.Т.е. если интерфейс используется в большинстве методов класса, то лучше использовать внедрение через конструктор. Если только в нескольких методах, то лучше делать его внедрение через метод.