为什么数据库不被视为全球状态的一种形式?

时间:2011-04-23 14:50:42

标签: database decoupling global-state

我对这种差异有一种普遍的直觉,但我无法确切地指出数据库与全局状态的不同之处。

对于“全局状态”的简单定义,数据库通常至少是应用程序全局的。你可以想象有一个应用程序在执行中改变数据库,但在一般情况下它是全局使用的。

至于州,我认为我不需要争论数据库包含状态的情况。

那么是什么让数据库与“糟糕”的全局状态不同呢?

这个问题出现了,因为我试图避免在对象需要了解其父级的情况下进行紧耦合。

例如,假设您正在玩一个策略游戏,并且您的某个单位有能力说明当它对敌方单位造成伤害时,该单位的所有者将失去x金,其中x是所造成的伤害量。< / p>

嗯,在正常情况下,一个单位不应该知道它的主人是谁。所有者是控制该单元的所有者,因此所有者只是向该单元发出命令并且它做了它的事情。

然而,由于外部因素,需要找出单位所有者是谁。在这种情况下,攻击单位知道它攻击的单位,这很好。但是现在除了知道它攻击的单位之外,还必须进一步知道它的拥有者才能让所有者失去5金。

我已经比原来的问题偏离了我想要的更多,但是如果游戏的状态存储在关系数据库中,那么查询目标的所有者将是微不足道的,而无需单位需要直接知道他们的老板是。如果这样的数据库是一个对象,我会将该数据库称为一个神对象,因为它知道所有事物的整个状态,并且还是可变的。

什么使数据库与全局状态不同?

3 个答案:

答案 0 :(得分:2)

它的不同之处在于它是设计的作为共享的全局状态资源。

RDBMS实现ACID,大多数其他全局状态都没有。{/ p>

答案 1 :(得分:1)

你可以同样问,“为什么操作系统不被认为是一种全球状态?”我想根据你想看的方式,它是。但谁在乎?它不是导致如此多问题的全局状态,即库代码中的全局变量。数据库和操作系统都是各种程序的支持技术 - 它们已经证明了它们的价值。这并不是说要么没有它的问题:数据库可以使单元测试更加困难(提示:尝试模拟),而且各种各样的操作系统可能使制作一个每个人都可以同样使用的程序变得困难。

另一种看待它的方法:在大多数代码中有全局状态的有效替代方法,而使用数据库的替代方法通常是在您自己的代码中有效地实现数据库(无论您是否将其称为数据库)

答案 2 :(得分:0)

dbms管理多个应用程序的并发访问,安全性,数据完整性以及逻辑和物理数据独立性,无论其编程语言如何,其中大多数可能是单个程序员所不知道的。它通常以简单的声明方式完成所有这些,而不是以程序的方式。

在我工作的最后一个财富500强中,用至少25种不同语言编写的程序进入我们的运营数据库。 (从'a'到't',汇编程序到TCL。我不记得任何以 u z 开头的语言,但可能有一些。)其中一些程序在20世纪70年代初期首次发布。