为什么使用 static 类 共享全局数据不是一个好习惯?

Why using static classes to share global data is not a good practice?

我听说使用静态 class 属性共享数据不是一个好习惯。虽然我还没有看到任何人使用这种方法,但我无法找出这种方法的缺点是什么! 更清楚地说,让我们考虑一个 WPF 应用程序,该应用程序由许多在特定流程中共享数据和参数的 UserControl 组成;使用静态引用将使 access/share 这些数据变得容易,但似乎没有人喜欢这种方法,为什么?

我期待一个与反模式相关的答案,我只是不确定它是什么。

我不认为这一定是一种不好的做法,我只是认为它有可能被滥用。

在您的情况下,您需要在用户控件之间共享状态,这可能不是一个好的用途,因为您希望在屏幕上共享状态,而静态 classes 及其属性在整个应用程序中共享.

但是,静态 class 在功能上是单例模式的 .NET 版本,在类似情况下很有用。

http://en.wikipedia.org/wiki/Singleton_pattern

如果只是关于参数设置,在应用程序的不同部分之间共享它们没有任何问题,而不是拥有相同数据的多个副本。它仍然站在 SOLID 原则的肩膀上,因为 class 的责任是持有 parameter/configuration 选项。

如果你也有数据,那就有点复杂了。对此没有一个最佳答案。将数据放在一个地方违反了 SOLID 原则,

  • 编写单元测试会更难
  • 查找错误
  • 在多线程环境中更难管理。

注意"harder"这个词,但并非不可能。

积极的一面

  • 在现代计算机体系结构中,计算比将数据从一个地方移动到另一个地方要便宜得多。因此,如果您有计算密集型应用程序,创建一次数据并从不同的地方访问它通常是更好的选择,然后将它传递给所有地方。

  • 如果您有多线程、计算密集型应用程序,并且通过设计您的数据可以保证在数据方面没有引发条件,它仍然是一个比拥有多份副本更好的选择。创建,copy/move 内存很昂贵。

这么说。如果您只担心控件和 UI 东西,我建议 至

  • 配置参数保持在一个静态class(考虑到您需要在单个运行期间设置单个配置)
  • 数据信息移动到每个class,由它负责。