何时将参数作为构造函数参数或方法参数传递
When to pass a parameter as a constructor parameter or as a method parameter
我目前有这个 class 在 class 方法中使用服务 class。目前我正在我的方法中创建服务 class 的实例,如下所示。我想知道的问题是,当涉及到测试时,我使用的是 spock,当在方法中创建 class 的新实例而不是作为构造函数传入时,似乎很难测试依赖注入的参数。我想知道将 Service class 的实例作为构造函数参数传递给 Handler 是否是执行此操作的正确方法?谢谢
public class Handler{
private Service service;
public Handler(){}
public void someMethod(ObjectNeededForService object){
service = new Service(object);
}
}
这是一个棘手的问题,您会找到不同的答案。
如果我理解正确,您基本上是在问构造函数注入是否优于 setter 注入,反之亦然,对吗?
显然,当您 class 中的字段数量有限时,构造函数注入很简洁。带有 20 个参数的构造函数可读性不佳,绝对应该避免。在那种情况下,您将不得不使用 setter 注入并为各个字段一一调用 setters。
但也许如果你有一个 class 有很多需要注入的字段,那么重构并将你的依赖项减少到更小的数量会很好。
我个人更喜欢构造器注入,但也有人反对它。
我目前有这个 class 在 class 方法中使用服务 class。目前我正在我的方法中创建服务 class 的实例,如下所示。我想知道的问题是,当涉及到测试时,我使用的是 spock,当在方法中创建 class 的新实例而不是作为构造函数传入时,似乎很难测试依赖注入的参数。我想知道将 Service class 的实例作为构造函数参数传递给 Handler 是否是执行此操作的正确方法?谢谢
public class Handler{
private Service service;
public Handler(){}
public void someMethod(ObjectNeededForService object){
service = new Service(object);
}
}
这是一个棘手的问题,您会找到不同的答案。 如果我理解正确,您基本上是在问构造函数注入是否优于 setter 注入,反之亦然,对吗?
显然,当您 class 中的字段数量有限时,构造函数注入很简洁。带有 20 个参数的构造函数可读性不佳,绝对应该避免。在那种情况下,您将不得不使用 setter 注入并为各个字段一一调用 setters。
但也许如果你有一个 class 有很多需要注入的字段,那么重构并将你的依赖项减少到更小的数量会很好。
我个人更喜欢构造器注入,但也有人反对它。