辅助函数作为静态函数还是程序函数?

时间:2010-05-03 09:54:07

标签: static-methods helper-functions

我想知道是否应该在类中创建一个辅助函数作为静态函数或者只是将它声明为一个过程函数?

我倾向于认为静态辅助函数是正确的方法,因为我可以看到它是什么样的辅助函数,例如。 Database :: connect(),File :: create()。

什么是最佳做法?

2 个答案:

答案 0 :(得分:1)

IMO它取决于它是什么类型的辅助函数。静态/单身人士很难单独测试事物,因为它们传播了具体的依赖关系。因此,如果帮助方法是我可能想要在单元测试中伪造的东西(并且您创建文件和连接到数据库的示例肯定会属于该类别),那么我将在常规类中将它们创建为实例方法。用户可以根据需要实例化助手类来调用方法。

有了这个,就可以更容易地使用Inversion of Control / Dependency Injection / Service Locator模式在您想要测试代码时伪装,并且您想伪造数据库访问或文件系统访问等。 / p>

这当然有一个缺点,理论上是辅助类的多个实例,但在大多数系统中这不是一个真正的问题。拥有这些实例的开销很小。

如果帮助方法非常简单,我从不想要伪造出来进行测试,那么我可能会考虑使用静态。

答案 1 :(得分:0)

Singleton解决了混乱。

MyHelper.Instance.ExecuteMethod();

实例将是一个静态属性。好处是你在调用方法中得到简单的一行代码,它重用以前创建的实例,这可以防止在不同的内存位置创建实例的开销并处理它们。