3

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

4

2 回答 2

1

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

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

希望这可以帮助。

于 2013-08-29T08:59:17.107 回答
0

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

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

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

于 2013-08-29T08:46:27.690 回答