2

私は違いについて一般的な直感を持っていますが、データベースがグローバル状態と異なる理由を正確に特定することはできません.

「グローバル状態」の単純な定義により、データベースは通常、少なくともアプリケーショングローバルです。実行中にデータベースを変更するアプリを使用することも考えられますが、一般的にはグローバルに使用されます。

状態に関しては、データベースに状態が含まれている場合について議論する必要はないと思います。

では、データベースが「悪い」種類のグローバル状態と異なるのはなぜでしょうか?

この質問は、オブジェクトがその親について知る必要がある密結合を回避しようとしているために発生しました。

たとえば、戦略ゲームをプレイしていて、ユニットの 1 つに、敵ユニットにダメージを与えると、そのユニットの所有者が x ゴールド (x は与えられたダメージの量) を失うという能力があるとします。

通常の状況では、ユニットは自分の所有者が誰であるかを知る必要はありません。所有者はユニットを制御する人なので、所有者はユニットにコマンドを発行するだけで、ユニットはその役割を果たします。

ただし、外部要因により、ユニットの所有者が誰であるかを調べる必要が生じます。この場合、攻撃しているユニットは攻撃しているユニットを知っているので問題ありません。しかし今では、攻撃しているユニットを知ることに加えて、所有者が 5 ゴールドを失うようにするために、所有者をさらに知る必要があります。

元の質問から意図した以上に逸脱してしまいましたが、ゲームの状態がリレーショナル データベースに保存されている場合、ユニットが所有者を直接知る必要なく、ターゲットの所有者を照会するのは簡単です。そのようなデータベースがオブジェクトである場合、そのデータベースはすべての状態を完全に把握しており、さらに変更可能であるという意味で、そのデータベースを神のオブジェクトと呼びます。

では、データベースがグローバルな状態と異なるのはなぜでしょうか?

4

3 に答える 3

3

異なるのは、共有グローバル状態リソースとして設計されていることです。

RDBMS はACIDを実装しますが、他のほとんどのグローバル状態には実装されていません。

于 2011-04-23T14:59:38.050 に答える
2

同様に、「オペレーティング システムがグローバルな状態の形式と見なされないのはなぜですか?」と尋ねることもできます。どのように見たいかによると思います。しかし、誰が気にしますか?ライブラリ コードのグローバル変数など、多くの問題を引き起こすのはグローバルな状態ではありません。データベースとオペレーティング システムはどちらも、多種多様なプログラムのテクノロジを実現しており、その価値は証明されています。これは、どちらにも問題がないということではありません: データベースは単体テストをより困難にし (ヒント: モックを試してみてください)、オペレーティング システムが多種多様であるため、誰もが等しく適切に使用できるプログラムを作成することが難しくなる可能性があります。

別の見方をすると、ほとんどのコードにはグローバル状態の有効な代替手段がありますが、データベースを使用する代替手段は、多くの場合、独自のコードでデータベースを効果的に実装することです (それをデータベースと呼ぶかどうかに関係なく)。

于 2011-04-23T14:57:24.307 に答える
0

dbms は、プログラミング言語に関係なく、複数のアプリケーションの同時アクセス、セキュリティ、データ整合性、および論理的および物理的データの独立性を管理します。これらの言語のほとんどは、個々のプログラマーには知られていない可能性があります。そして、手続き的な方法ではなく、一般的に単純な宣言的な方法ですべてを行います。

私が最後に働いたフォーチュン 500 では、少なくとも 25 の異なる言語で書かれたプログラムが運用データベースにヒットしました。('a' から 't' まで、アセンブラーから TCL まで。 uからzまでの文字で始まる言語は思い出せませんが、いくつかあった可能性があります。) これらのプログラムのいくつかは、1970 年代初頭に最初のリリースがありました。 .

于 2011-04-23T15:11:36.140 に答える