Я хочу спросить о шаблоне дизайна.
Почему я должен использовать внедрение зависимостей в конструктор, а не импортировать его («оператор использования»)?
Например:
в моем контроллере:
class AuthController extends Controller {
public function __construct(UserGateway $userGateway)
{
$this->userGateway = $userGateway;
}
public function doSomething()
{
$this->userGateway->foo();
}
}
Почему бы не использовать просто так вместо этого?
use Acme\UserGateway;
class AuthController extends Controller {
public function doSomething()
{
UserGateway::foo();
}
}
Большое спасибо.
Если предположить, UserGateway
это не фасад laravel: вот самое большое преимущество такого ввода вещей: в будущем вы можете переопределить, что на самом деле представляет собой UserGateway, и вместо него предоставить другой класс (чаще всего это подкласс) следующим образом:
$this->app->bind(UserGateway::class, function ($app) {
return new NewUserGateway();
});
Это чрезвычайно полезно для переопределения некоторых частей вашего кода, особенно если вы используете одни и те же пакеты в нескольких проектах. И это не требует, чтобы вы изменили код AuthController.
Если UserGateway
это фасад, единственное преимущество, которое вы получите, это лучшая навигация по коду с вашей IDE, так как она будет знать, на какой класс вы точно ссылаетесь (при условии, что вы не связали его повторно).
Других решений пока нет …