Шаблон шлюза и репозитория PHP Laravel

Я хочу спросить о шаблоне дизайна.

Почему я должен использовать внедрение зависимостей в конструктор, а не импортировать его («оператор использования»)?

Например:

в моем контроллере:

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();
}

}

Большое спасибо.

0

Решение

Если предположить, UserGateway это не фасад laravel: вот самое большое преимущество такого ввода вещей: в будущем вы можете переопределить, что на самом деле представляет собой UserGateway, и вместо него предоставить другой класс (чаще всего это подкласс) следующим образом:

$this->app->bind(UserGateway::class, function ($app) {
return new NewUserGateway();
});

Это чрезвычайно полезно для переопределения некоторых частей вашего кода, особенно если вы используете одни и те же пакеты в нескольких проектах. И это не требует, чтобы вы изменили код AuthController.

Если UserGateway это фасад, единственное преимущество, которое вы получите, это лучшая навигация по коду с вашей IDE, так как она будет знать, на какой класс вы точно ссылаетесь (при условии, что вы не связали его повторно).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]