静态类或接口

时间:2014-11-26 14:46:19

标签: asp.net design-patterns

什么时候应该使用静态类和接口?

我有一个处理字符串操作的类。我应该将它设为静态类还是应该使其实现接口并引用接口?

3 个答案:

答案 0 :(得分:2)

静态类是放置一堆实用函数的有用位置(字符串操作非常适合这里)。您也可以考虑将字符串操作方法设置为extension methods

您可能对When to Use Static Classes in C#感兴趣,它涵盖了使用静态类和方法的一些优缺点。我的一般看法是,对于简单的情况,它是“好的”,但对于更成熟的架构,您可能会考虑更高级的设计(这并不一定意味着接口。)

如果您想要某些功能的多个实现,那么接口很有用。接口通常用于dependency injection,因为它允许您在测试时交换不同类型的对象。它们是苹果和橘子。

你问“我应该使用X还是Y”。答案是X(静态类)有时候适合这种情况,Y(接口)不适合这种情况,你忘了考虑W和Z(在我链接的其他SO问题中提到的替代方案)。

答案 1 :(得分:0)

如果它处理非特定字符串操作,您可能会想到使用扩展方法(for 串)。你可以在任何地方使用它,就像它属于字符串类一样。

使用非特定的字符串操作,我的意思是它可以用于通用目的,例如反转它,大写(这些函数已经存在,但也许你的字符串函数在这个类中)。我指的是不属于您的域名的方法。

扩展方法更易于使用。而不是说:SomeStaticClassName.YourFunction(yourString)你可以写:yourString.YourFunction()。

通常,只有在您确定需要静态类时才应使用静态类。如果你需要它,它通常是一个设计问题,但也有例外,比如实用程序类:类似辅助类的类,不包含任何状态(因此不需要实例)。

接口来自完全其他类别,您可以使用接口定义类应该具有某些行为(并且专门为该类实现)。

答案 2 :(得分:0)

如果操纵的结果是确定性的,那么我会考虑将其设为静态。否则,我将它隐藏在界面后面,因为我可能想要提供假的测试。