Database 为什么不是';数据库不被认为是一种全局状态吗?

Database 为什么不是';数据库不被认为是一种全局状态吗?,database,decoupling,global-state,Database,Decoupling,Global State,我对这种差异有一种普遍的直觉,但我无法准确地指出是什么使数据库不同于全局状态 对于“全局状态”的简单定义,数据库通常至少是应用程序全局的。你可以想象有一个在执行过程中更改数据库的应用程序,但在一般情况下,它是在全球范围内使用的 至于状态,我不认为我需要论证数据库包含状态的情况 那么,是什么让数据库不同于“糟糕”的全局状态呢 出现这个问题是因为我试图避免对象需要了解其父对象的紧密耦合 例如,假设你在玩一个战略游戏,你的一个单位有一个技能,当它对一个敌人单位造成伤害时,该单位的拥有者损失x黄金,其中

我对这种差异有一种普遍的直觉,但我无法准确地指出是什么使数据库不同于全局状态

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

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

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

出现这个问题是因为我试图避免对象需要了解其父对象的紧密耦合

例如,假设你在玩一个战略游戏,你的一个单位有一个技能,当它对一个敌人单位造成伤害时,该单位的拥有者损失x黄金,其中x是造成的伤害量

嗯,在正常情况下,一个单位不应该知道它的主人是谁。所有者是控制该单元的人,因此所有者只需向该单元发出命令,它就可以完成它的任务

然而,由于外部因素,有必要查明谁是一个单位的所有者。在这种情况下,攻击单位知道它正在攻击的单位,这很好。但是现在除了知道它攻击的单位外,它还必须进一步了解它的所有者,以便使所有者损失5枚金牌

我已经偏离了最初的问题,超出了我的预期,但是如果游戏状态存储在一个关系数据库中,那么在不需要单位直接知道其所有者是谁的情况下查询目标的所有者将是微不足道的。如果这样一个数据库是一个对象,我会称它为上帝对象,因为它知道所有事物的整个状态,而且是可变的

那么,是什么使数据库不同于全局状态呢?

你同样可以问,“为什么操作系统不被视为全局状态的一种形式?”我想这取决于你想如何看待它。但谁在乎呢?并不是那种全局状态导致了这么多问题,即库代码中的全局变量。数据库和操作系统都为各种各样的程序提供了技术支持——它们已经证明了它们的价值。这并不是说两者都没有问题:数据库会使单元测试变得更加困难(提示:try mock),而且操作系统的多样性会使制作一个人人都能同样好地使用的程序变得困难


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

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


RDBMS实现了其他大多数全局状态所不具备的功能。

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


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

我是否正确地解释为“是的,这是一种全球状态,但它是一种经过严格审查的形式,解决的问题比它产生的问题多。”我想,这取决于观众和你的目的。啊,很有趣。那么,您是否会声称,大多数全球州都存在缺乏ACID合规性的问题?或者这是一个过于强烈的要求?@Davy8-这是一个过于强烈的要求。大多数全局状态的问题在于它没有得到正确的管理。