我在 WCF 服务后面有一个 C# 类库。该库包含声明为静态的 ClassA。这个静态类有一个 MethodA 方法,它接受一个字符串并使用 LINQ 查询数据库以获取字符串的翻译,然后通过 web 服务将其发送回客户端。
我的问题是在这种情况下使用静态类和静态方法是否是糟糕的设计。类和方法是否应该是非静态的,以便每个客户端出于性能、争用或其他原因获取自己的类实例?谢谢。
我在 WCF 服务后面有一个 C# 类库。该库包含声明为静态的 ClassA。这个静态类有一个 MethodA 方法,它接受一个字符串并使用 LINQ 查询数据库以获取字符串的翻译,然后通过 web 服务将其发送回客户端。
我的问题是在这种情况下使用静态类和静态方法是否是糟糕的设计。类和方法是否应该是非静态的,以便每个客户端出于性能、争用或其他原因获取自己的类实例?谢谢。
我个人对静态方法和类比某些人更宽容,所以我会说这取决于。静态方法可重入和线程安全吗?那么可能就没事了。否则它可能会严重扩展。
我看到的一个问题是数据上下文。使用静态方法,您可能无法对数据库连接的生命周期进行细粒度控制?另一种方法可能是使其成为非静态类和方法,并在 WCF 服务的静态构造函数中对其进行初始化。这样,如果需要,您以后可以更轻松地修改行为。
实际上,WCF 服务中的静态构造函数很糟糕,如果它们有任何失败的机会,比如数据库暂时处于 AWOL 状态。关键是它将允许对服务本身进行更细粒度的控制。
我同意 Thorarin 已经回答的内容。我通常看不到静态类有任何危害,尤其是。当它只包含做某事并返回结果而不接触任何静态字段或属性的静态方法时。但是,一旦对其中任何一个进行了修改,这可能意味着麻烦。(例如在 SO 上搜索关于单例和并发的任何讨论。)
性能方面,调用静态方法理论上应该比调用非静态方法稍快(尽管出于所有实际目的,这可能永远不会产生任何显着差异),因为运行时不必传递this
/Me
指针,因为使用静态方法,虚拟方法调用肯定不会产生任何开销。