首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一种方法中的依赖注入到另一种方法params

一种方法中的依赖注入到另一种方法params
EN

Software Engineering用户
提问于 2018-06-07 11:18:43
回答 1查看 994关注 0票数 0

我的一个队友用以下方式编写了一些代码:

代码语言:javascript
复制
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听你的意见

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2018-06-07 11:31:22

在我看来,你们俩有时都是对的。这完全取决于dep1dep2改变的频率。

您的朋友是对的:尽可能缩小依赖范围是很好的。将它们作为参数传入,完全缩小了该范围。如果类很大,它确实会提高可读性。

您是对的,将这些依赖项放入私有字段可以简化代码,因为您减少了每个函数的参数数。而且,由于类不应该很大,这种方法实际上可以提高可读性。

我说的不同意你的观点是,“它们可以是静态的,而不是好的东西”。当然,这些方法可以是静态的。它们的依赖项通过参数注入,而不是全局访问,因此它们是静态的主要候选对象。

那么选择哪种方法呢?如果这些依赖关系在应用程序的整个生命周期中相当稳定,那么通过构造函数注入它们并将它们存储为字段。这样,您只需要在系统周围传递一个对象,Foo。但是,如果每次调用handle时它们都是不同的,那么每次使用这种方法都必须创建一个新的Foo。因此,相反,让它们是静态的,并在via参数中传递依赖项。

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/372236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档