我想问一下设计模式。
为什么我应该在构造函数中使用依赖注入,而不是导入它('使用语句')?
例如:
在我的控制器中:
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 :(得分:1)
假设<select>
不是laravel facade:这是以这种方式注入东西的最大优势:将来,你可能会重新定义UserGateway实际上是什么,并提供其他类(通常是它的子类)而不是它是这样的:
UserGateway
这对于覆盖代码的某些部分非常有用,特别是如果您在多个项目中使用相同的包。并且它不需要您更改AuthController的代码。
如果$this->app->bind(UserGateway::class, function ($app) {
return new NewUserGateway();
});
是Facade,那么您获得的唯一好处就是使用IDE更好的代码导航,因为它会知道您正在引用哪个类(假设您没有重新绑定它) )。