所有类方法都应该使用所有依赖项吗?

时间:2016-03-16 13:04:23

标签: php dependency-injection

这确实是关于依赖注入和方法中依赖项使用的最佳实践问题。

参加下面的课程。

class Inviter {
  protected $repo;
  protected $emailer;

  public function __construct(\ExampleRepository $repo, \Emailer $emailer) {
    $this->repo = $repo;
    $this->emailer = $emailer;
  }

  public function getInvitedMembers() {
    return $this->repo->getInvitedMembers();
  }

  public function sendInvitation() {
    $this->repo->recordInvitation();
    $this->emailer->sendInvitation();
  }
}

实例化Inviter类时,会注入ExampleRepositoryEmailer的实例并存储其引用。但是,getInvitedMembers方法仅使用ExampleRepository而非Emailer

是否可以将这些方法重构为另一个类,以防止创建和注入可能无法使用的依赖项的开销?

如果你想要一些上下文,我用PHP编程并响应HTTP请求。应用程序将针对每个请求运行,并且每次运行时只会调用其中一个方法。

谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

我认为你的班级不遵循Single Responsibility Principle,这就是重构的原因。

避免对对象进行不必要的实例化,特别是如果实例化这些依赖项是昂贵的(可能需要为ExampleRepository创建一个新的数据库连接,否则将不需要)。