【发布时间】:2011-02-28 08:31:30
【问题描述】:
我真的很喜欢使用静态方法(尤其是帮助类)。但是由于静态方法不是可存根的,最终它们是一种不好的做法,不是吗?所以我必须在静态方法的使用便利性和可测试性之间做出选择。有什么妥协吗?
【问题讨论】:
标签: c# static-methods instance-methods
我真的很喜欢使用静态方法(尤其是帮助类)。但是由于静态方法不是可存根的,最终它们是一种不好的做法,不是吗?所以我必须在静态方法的使用便利性和可测试性之间做出选择。有什么妥协吗?
【问题讨论】:
标签: c# static-methods instance-methods
这取决于静态方法的作用。
它真的必须是可存根的吗?像数据访问,长时间运行的操作等,还是你的意思是像.ToSlug()这样的辅助方法?
如果是前一种情况,我会让它们成为实例方法以提高可测试性/测试速度。
如果是后者,我会让它们保持静态并验证它们的正确性。
【讨论】:
如果您可以保证静态方法总是为给定的输入返回相同的结果,并且它们存在的唯一原因是辅助方法(转换或转换输入 -> 没有副作用的输出),我认为没有问题。对于额外的踢球,您可以使它们成为扩展方法(从 c#3.0 开始)。
【讨论】: