c# - 全局静态类和方法不好吗?

标签 c# .net language-agnostic oop

人们普遍认为,应避免严重依赖全局资源。使用静态类和方法不是一回事吗?

最佳答案

全局数据不好。然而,使用静态方法可以避免许多问题。

我将担任 Rich Hickey 的职务在这一点上并这样解释:

要使用 C# 构建最可靠的系统,请使用静态方法和类,而不是全局数据。例如,如果您将一个数据对象传递给一个静态方法,并且该静态方法不访问任何静态数据,那么您可以放心,给定输入数据,函数的输出将始终相同。这是 Erlang、Lisp、Clojure 和所有其他语言所采取的立场 Functional Programming language .

使用静态方法可以大大简化多线程编码,因为如果编程正确,一次只有一个线程可以访问一组给定的数据。归根结底就是这样。拥有全局数据是不好的,因为它是一种可以随时被知道什么线程更改的状态。然而,静态方法允许非常干净的代码,可以以较小的增量进行测试。

我知道这会引起激烈的争论,因为它与 C# 的 OOP 思维过程背道而驰,但我发现我使用的静态方法越多,我的代码就越清晰可靠。

This video比我更好地解释了它,但展示了不可变数据和静态方法如何产生一些极其线程安全的代码。


让我再澄清一下有关全局数据的一些问题。常量(或只读)全局数据不像可变(读/写)全局数据那么大。因此,如果拥有全局数据缓存有意义,请使用全局数据!在某种程度上,每个使用数据库的应用程序都会有它,因为我们可以说所有 SQL 数据库都是一个保存数据的庞大全局变量。

所以像我上面那样做一个笼统的声明可能有点强烈。相反,假设拥有全局数据会引入许多问题,而这些问题可以通过拥有本地数据来避免。

某些语言(如 Erlang)通过将缓存放在一个单独的线程中来解决这个问题,该线程处理对该数据的所有请求。这样您就知道对该数据的所有请求和修改都是原子的,并且全局缓存不会处于某种未知状态。

关于c# - 全局静态类和方法不好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3151768/

相关文章:

c# - Task.Factory.StartNew 中的方法(操作)调用未立即调用

c# - 设计 : Website calling a webservice on the same machine

.net - 我如何确定构建服务器上失败的测试出了什么问题?

language-agnostic - 在 Wolfram Alpha 上显示为加载屏幕的元胞自动机是什么?

language-agnostic - 以后国际化真的更昂贵吗?

c# - 将 XML 数据读入 C# 应用程序

c# - 在 bot 框架中使用文本转语音

c# - DataGridView.Clear()

.net - 如何下载正确版本的 mscordacwks 和 mscorwks?

algorithm - 约会调度算法