Почему база данных не считается формой глобального состояния? - PullRequest
1 голос
/ 23 апреля 2011

У меня общее представление о разнице, но я не могу точно определить, что именно отличает базу данных от глобального состояния.

При наивном определении «глобального состояния» база данных обычнонаименьшее приложение-глобальное.Возможно, вы могли бы иметь приложение, которое изменяет базы данных в середине исполнения, но в общем случае оно используется глобально.

Что касается состояния, я не думаю, что мне нужно спорить о том, что база данных содержит состояние.

Так что же отличает базу данных от "плохого" типа глобального состояния?

Этот вопрос возник, потому что я пытаюсь избежать тесной связи, когда объект должен знать о своем родителе.

Например, скажем, вы играете в стратегическую игру, и один изу ваших юнитов есть способность, которая говорит, что когда они наносят урон вражескому юниту, владелец этого юнита теряет х золота, где х - количество нанесенного урона.

Ну, при нормальных обстоятельствах юнит не должензнать, кто его владелец.Владелец - тот, кто управляет устройством, поэтому владелец просто дает команды устройству, и он делает свое дело.

Однако из-за внешних факторов возникает необходимость выяснить, кто является владельцем подразделения.В этом случае атакующий юнит знает юнит, на который он атакует, это нормально.Но теперь, в дополнение к знанию отряда, на которого он нападает, он должен также знать своего владельца, чтобы заставить его потерять 5 золотых.

Я уже отклонился от первоначального вопроса больше, чем предполагал, но еслисостояние игры сохранялось в реляционной базе данных, было бы тривиально запрашивать владельца цели без юнитов, которым нужно было бы напрямую знать, кем был их владелец.Если бы такая база данных была объектом, я бы назвал эту базу данных божественным объектом в том смысле, что она знает все состояние всего и, кроме того, является изменчивой.

Чем же тогда база данных отличается от глобального состояния?

Ответы [ 3 ]

2 голосов
/ 23 апреля 2011

Отличительной особенностью является то, что он предназначен как общий ресурс общего состояния.

СУБД реализует ACID , чего нет в большинстве других глобальных состояний.

1 голос
/ 23 апреля 2011

Вы также можете спросить: «Почему операционная система не считается формой глобального состояния?»Я думаю, в зависимости от того, как вы хотите посмотреть на это, это так.Но кого это волнует?Это не тот тип глобального состояния, который вызывает так много проблем, а именно глобальные переменные в коде библиотеки.И базы данных, и операционные системы предоставляют технологии для самых разных программ - они доказали свою ценность.Нельзя сказать, что и без проблем: базы данных могут усложнить модульное тестирование (подсказка: попробуйте макеты), а разнообразие операционных систем может затруднить создание программы, которую каждый может использовать одинаково хорошо.

Другой способ взглянуть на это: в большинстве кодов есть действительные альтернативы глобальному состоянию, тогда как альтернативой использованию базы данных часто будет эффективное внедрение базы данных в ваш собственный код (называете ли вы ее базой данных или нет).

0 голосов
/ 23 апреля 2011

DBMS управляет одновременным доступом, безопасностью, целостностью данных, а также логической и физической независимостью данных для нескольких приложений, независимо от языка их программирования, большинство из которых могут быть неизвестны отдельному программисту.И он делает все это, как правило, простым, декларативным способом, а не процедурным образом.

В последней Fortune 500, над которой я работал, программы, написанные как минимум на 25 разных языках, попали в нашу операционную базу данных.(От 'a' до 't', от ассемблера до TCL. Я не помню языков, которые начинались с букв u до z , но их могло быть несколько.)Некоторые из этих программ были выпущены в начале 1970-х годов.

...