我将提供一些意见:
是的,数据库是全局状态。
实际上,正如您所指出的,这是一个超级全局状态。这是普遍的!它的范围要求连接到数据库的任何事物或任何事物。而且,我怀疑许多有多年经验的人会告诉您有关数据中“奇怪的事物”如何导致一个或多个相关应用程序中的“意外行为”的恐怖故事...
使用全局变量的潜在后果之一是,两个不同的“模块”将出于各自不同的目的使用该变量。从这个意义上说,数据库表没有什么不同。它可能成为同一问题的受害者。
嗯...这是东西:
如果某个模块没有以某种方式外部运行,则它什么也不做。
可以给有用的模块数据,也可以找到它。并且,它可以返回数据或可以修改状态。但是,如果它不以某种方式与外部世界互动,那么它可能什么也不做。
现在,我们的首选是接收数据并返回数据。如果大多数模块完全不用考虑外界在做什么,那么它们就更容易编写。但最终,需要一些东西来查找数据并修改外部全局状态。
此外,在实际应用中,存在数据,以便可以通过各种操作读取和更新数据。锁和事务可以防止某些问题。但是,防止这些操作从相互冲突的原则,在这一天结束,只是涉及到思维缜密。(还有犯错...)
而且,我们通常不直接与全球国家合作。
除非应用程序位于数据层(使用SQL或其他方式)中,否则我们的模块使用的对象实际上是共享全局状态的副本。我们可以做任何我们想做的事情,而不会影响实际的共享状态。
并且,在需要更改该全局状态的情况下,在假定给定的数据没有更改的情况下,我们通常可以执行与对本地全局变量相同的锁定。
最后,我们平时做不同的事情与数据库进行比我们不妨用顽皮的全局。
一个顽皮的,破碎的全局看起来像这样:
Int32 counter = 0;
public someMethod() {
for (counter = 0; counter < whatever; counter++) {
// do other stuff.
}
}
public otherMethod() {
for (counter = 100; counter < whatever; counter--) {
// do other stuff.
}
}
我们根本不使用数据库来处理诸如此类的过程/操作中的东西。可能是数据库的缓慢特性和简单变量的相对便利性阻止了我们:我们与数据库的呆滞,笨拙的交互作用使它们成为了我们过去对变量犯下的许多错误的不佳之选。