我为某个验证创建了私有验证方法,该验证方法在我的课程中多次发生(出于各种原因,我无法存储经过验证的数据)。现在,ReSharper建议将该功能设为静态。由于静态方法的已知问题,我有点不愿意这样做。这将是一个私有的静态方法。我的问题是,私有静态方法是否会引起类似公共静态方法的耦合和测试问题?这是不好的做法吗?我猜不会,但是我不确定这里是否有陷阱。
10
静态方法有哪些“已知问题”?
—
罗伯特·哈维,
@Ed:对。正确编写的静态方法无论如何都不应接触外部API或声明状态。对我而言,处理封装在类中的内部状态似乎完全可以,并且该方法不需要进行单元测试,因为单元测试可以测试类的外部行为。
—
罗伯特·哈维
静态方法易于修改全局状态,并且它们也会杀死继承(任何时候您想要扩展功能,都需要修改调用代码,因为您不能在派生类中覆盖该方法)。您与该实现紧密相关。无法模拟静态方法,这使它们很难进行单元测试。他们隐藏了依赖性。我敢肯定还有更多。我不只是盲目地避免它们,而是要求做出明智的决定。
—
塔玛斯·塞莱伊(TamásSzelei)2011年
@Tamás静态方法只有在以这种方式编写全局状态时才修改全局状态,而我从未这样做。一般来说,我只在实用工具类中使用静态方法,这些方法接受一个或多个对象并返回没有副作用的对象。这些方法都没有您描述的问题。
—
罗伯特·哈维
@TamásSzelei他们如何倾向于修改全局状态?除非将全局状态传递给参数,否则它们甚至无法找到全局状态。
—
CodesInChaos 2012年