网关和存储库模式PHP Laravel

时间:2016-03-10 03:25:43

标签: php design-patterns repository gateway

我想问一下设计模式。

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

例如:

在我的控制器中:

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 个答案:

答案 0 :(得分:1)

假设<select>不是laravel facade:这是以这种方式注入东西的最大优势:将来,你可能会重新定义UserGateway实际上是什么,并提供其他类(通常是它的子类)而不是它是这样的:

UserGateway

这对于覆盖代码的某些部分非常有用,特别是如果您在多个项目中使用相同的包。并且它不需要您更改AuthController的代码。

如果$this->app->bind(UserGateway::class, function ($app) { return new NewUserGateway(); }); 是Facade,那么您获得的唯一好处就是使用IDE更好的代码导航,因为它会知道您正在引用哪个类(假设您没有重新绑定它) )。