【问题标题】:Gateway and repository pattern PHP Laravel网关和存储库模式 PHP Laravel
【发布时间】:2016-03-10 03:25:42
【问题描述】:

我想问一下设计模式。

为什么要在构造函数中使用依赖注入,而不是导入它('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();
    }

}

非常感谢。

【问题讨论】:

    标签: php design-patterns repository gateway


    【解决方案1】:

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

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

    这对于覆盖代码的某些部分非常有用,尤其是当您在多个项目中使用相同的包时。而且它不需要您更改 AuthController 的代码。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-27
      • 2014-03-05
      • 2014-03-15
      • 2014-09-19
      • 2015-01-22
      • 2016-12-13
      • 2014-08-13
      • 2016-12-24
      相关资源
      最近更新 更多