2016-03-10 169 views
0

我想问一下设计模式。网关和存储库模式PHP Laravel

为什么我应该在构造函数中使用依赖注入,而不是导入它('use statement')?

例如:

在我的控制器:

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

} 

非常感谢。

回答

1

假设UserGateway不是laravel facade:这是以这种方式注入东西的最大优势:将来,您可能会重新定义UserGateway的实际内容,并提供其他类(通常是子类),而不是像这样:

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

这对覆盖代码的某些部分非常有用,特别是在跨多个项目使用相同的包时。而且它不要求您更改AuthController的代码。

如果UserGateway是一个Facade,您将获得的唯一好处是您可以更好地使用IDE进行代码导航,因为它将知道您引用的是哪个类(假定您没有重新绑定它)。