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


Should all class methods use all dependencies?

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

参加下面的课程。

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请求。应用程序将针对每个请求运行,并且每次运行时只会调用其中一个方法。

谢谢你的时间!

我认为

你的类不遵循单一责任原则,这本身就是重构的原因。

避免不必要的对象实例化是可取的,尤其是在实例化这些依赖项的成本很高的情况下(可能需要为原本不需要ExampleRepository创建新的数据库连接)。