我的一个队友用以下方式编写了一些代码:
Class Foo implements Job {
// Framework uses type-hinting for dependency injection, only works on the handle() method
// not on other methods
public function handle(Dependency1 $dep1, Dependency2 $dep2) {
$this->setAlpha($dep1, $dep2);
$this->setBravo($dep1, $this->someOtherObject);
}
// This function is only called by the handle method
private function setAlpha($dep1, $dep2) {
// Do something
}
// This function is only called by the handle method
private function setBravo($dep1, Object $otherObject) {
// Do something
$this->something = $dep1->something();
}
}我正试图向他解释为什么最好将依赖项分配给private or protected类属性并在您的函数中使用它们,这样您就不会用依赖项污染方法参数。
他的论点是,这样做的可读性要高得多,因为您将知道这些方法的依赖关系是什么。
我的论点是,如果你这样写你的方法,它们可以变成静态的,这不是什么好东西。如果您获得了需要这些依赖项的额外方法,则需要一种不同的方法来检索它们。
有人知道上面的代码是否是一种很好的方法吗?还是应该将其重写到类属性中?为什么?
我找不到很好的理由,我来StackExchange听你的意见
发布于 2018-06-07 11:31:22
在我看来,你们俩有时都是对的。这完全取决于dep1和dep2改变的频率。
您的朋友是对的:尽可能缩小依赖范围是很好的。将它们作为参数传入,完全缩小了该范围。如果类很大,它确实会提高可读性。
您是对的,将这些依赖项放入私有字段可以简化代码,因为您减少了每个函数的参数数。而且,由于类不应该很大,这种方法实际上可以提高可读性。
我说的不同意你的观点是,“它们可以是静态的,而不是好的东西”。当然,这些方法可以是静态的。它们的依赖项通过参数注入,而不是全局访问,因此它们是静态的主要候选对象。
那么选择哪种方法呢?如果这些依赖关系在应用程序的整个生命周期中相当稳定,那么通过构造函数注入它们并将它们存储为字段。这样,您只需要在系统周围传递一个对象,Foo。但是,如果每次调用handle时它们都是不同的,那么每次使用这种方法都必须创建一个新的Foo。因此,相反,让它们是静态的,并在via参数中传递依赖项。
https://softwareengineering.stackexchange.com/questions/372236
复制相似问题