如果我的班级只有通过容器注入的私人字段怎么办?好还是坏?在那种情况下,我必须在测试中使用DI框架(并且可能并不坏)但在另一方面,没有setter没有不必要的代码。是不好的做法?
答案 0 :(得分:1)
Setter方法是实现抽象的方式,这是OOP最重要的原则之一。理想情况下,代码不应该依赖于容器。我认为setter方法将提供使用DI的标准方式以及良好的代码可读性。我总是认为setter DI是一个很好的做法,除非我的类实例化依赖于其他依赖项(我将使用基于构造函数的DI)。
我认为你不应该依靠容器来进行DI。
希望这有帮助。
答案 1 :(得分:0)
强文**首先,通过setter方法有哪些替代DI? Martin Fowler区分three ways:**接口,setter和构造函数注入。因此,根据定义,这些方式都不是好的或坏的,而是您如何使用它们以及最适合您系统的方式。如果您希望在创建对象后您的字段不可变,请使用带有私有字段的构造函数注入。 尽管如此,Setter注入是DI的最常见方式,并且有几个框架依赖它。如果你不确定是这样走的话。你也会找到很多关于它的信息。
如果您的问题完全针对使用setter,那么问题是如果您的类是数据结构(有关详细信息,请参阅Martin的Clean Code第6章)。换句话说,如果您的课程没有其他目的,只能保留一些数据,您可以将您的字段公开(*)。如果它包含业务逻辑,请使用私有字段和getter / setter。
(*)我个人不同意这一点,但那只是我。 : - )