【问题标题】:Using dependecy injection without setter is bad or good practise?在没有 setter 的情况下使用依赖注入是坏的还是好的做法?
【发布时间】:2020-12-31 08:54:39
【问题描述】:

如果我的班级只有由容器注入的私有字段怎么办?是好还是坏?在这种情况下,我必须在测试中使用 DI 框架(也许这还不错),但另一方面,没有设置器,没有不必要的代码。这是不好的做法吗?

【问题讨论】:

  • 通常我会使用构造函数而不是让容器直接设置字段...使用构造函数可以很容易地测试,并允许字段是最终的,而不会受到编译器的影响。

标签: java dependency-injection


【解决方案1】:

Setter 方法是实现抽象的方式,这是 OOP 最重要的原则之一。理想情况下,代码不应依赖于容器。我认为 setter 方法将提供使用 DI 的标准方法以及良好的代码可读性。我一直认为 setter DI 是一种很好的做法,除非我的类实例化依赖于其他一些依赖项(为此我将使用基于构造函数的 DI)。

我认为你不应该依赖容器来执行 DI。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    strong text**首先,通过setter方法替代DI的方法是什么? Martin Fowler 区分three ways:**接口、setter 和构造函数注入。因此,根据定义,这些方式都没有好坏之分,这取决于您如何使用它们以及最适合您的系统的方式。如果您希望您的字段在对象创建后不可变,请使用带有私有字段的构造函数注入。 尽管如此,Setter 注入是最常见的 DI 方式,并且有几个框架依赖它。如果你不确定就用这种方式。您还会发现很多关于它的信息。

    如果您的问题完全针对 setter 的使用,那么问题是您的类是否是数据结构(有关详细信息,请参阅 Martin 的 Clean Code 第 6 章)。换句话说,如果您的课程除了保存一些数据之外没有其他目的,您可以将您的字段公开(*)。如果它包含业务逻辑,请使用私有字段和 getter/setter。

    (*) 我个人不同意这一点,但这只是我自己。 :-)

    【讨论】:

      猜你喜欢
      • 2020-12-08
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 2018-07-12
      • 1970-01-01
      • 2020-04-25
      • 1970-01-01
      相关资源
      最近更新 更多