Tim*_*dge 46
全球数据不好.但是,使用静态方法可以避免许多问题.
我将把Rich Hickey的位置放在这个位置并解释如下:
要在C#中构建最可靠的系统,请使用静态方法和类,而不是全局数据.例如,如果您将数据对象交给静态方法,并且该静态方法不访问任何静态数据,那么您可以放心,给定输入数据,函数的输出将始终相同.这是Erlang,Lisp,Clojure以及其他所有函数式编程语言所采取的立场.
使用静态方法可以大大简化多线程编码,因为如果编程正确,一次只有一个线程可以访问给定的数据集.而这正是它归结为的.拥有全局数据是不好的,因为它是一个可以由谁知道什么线程,任何时候都可以改变的状态.然而,静态方法允许非常干净的代码,可以以较小的增量进行测试.
我知道这会引起激烈的争论,因为它面对C#的OOP思维过程,但我发现我使用的静态方法越多,我的代码越干净,越可靠.
这个视频比我能更好地解释它,但展示了不可变数据和静态方法如何产生一些极其线程安全的代码.
让我澄清一下全球数据的一些问题.常量(或只读)全局数据并不像可变(读/写)全局数据那样大.因此,如果拥有全局数据缓存是有意义的,请使用全局数据!在某种程度上,使用数据库的每个应用程序都会有这个,因为我们可以说所有SQL数据库都是一个保存数据的大型全局变量.
所以像我上面那样做一个全面的陈述可能有点强.相反,让我们说拥有全局数据会引入许多问题,而这些问题可以通过使用本地数据来避免.
某些语言(如Erlang)通过将缓存放在一个处理该数据所有请求的单独线程中来解决此问题.这样您就知道对该数据的所有请求和修改都将是原子的,并且全局缓存不会处于某种未知状态.
Jan*_*net 11
static并不一定意味着全球化.类和成员可以是static private,因此仅适用于特定类.也就是说,拥有太多public static成员而不是使用适当的方法来传递数据(方法调用,回调等)通常是糟糕的设计.
| 归档时间: |
|
| 查看次数: |
21709 次 |
| 最近记录: |