【发布时间】:2015-03-04 00:06:10
【问题描述】:
假设我有一个相对复杂的类,需要通过分解成几个较小的辅助类来简化它。一种建议的重构解决方案是:
public class RefactoredComplexClass {
private final Helper1 h1;
private final Helper2 h2;
// Helper1 and Helper2 will be injected by spring IoC
public RefactoredComplexClass(Helper1 h1, Helper2 h2) {
this.h1 = h1; this.h2 = h2;
}
}
public class Helper1 {// no state class
public int add(int x, int y) { return x + y ; }
}
上述建议背后的原因主要是为了简化基于mockito的测试。
我的问题是: 1. 对于那些没有状态的辅助类,应该使用静态方法而不是实例方法吗? 2.注入那些Helper对象是个好主意吗?
我自己的想法是应该使用静态方法,因为这些助手类/方法没有需要维护的状态。并且没有必要注入这些帮助类的实例。但我确实同意上述解决方案使基于 mockito 的测试更容易,因为静态方法很难模拟。
有什么建议吗?
【问题讨论】:
-
将操作的管理者/用户与操作(帮助)类分离似乎是个好主意。您说这些操作实例没有状态,但这是您的实现的选择。我可以很容易地想象出许多场景,您将实例化具有相应状态的多个版本。
标签: java spring refactoring mockito static-methods