Почему база данных не считается формой глобального состояния?

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

При наивном определении "глобального состояния" база данных, по крайней мере, глобальна для приложения. Можно предположить, что у вас есть приложение, которое изменяет базы данных в середине исполнения, но в общем случае оно используется глобально.

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

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

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

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

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

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

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

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

3 ответа

Решение

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

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

Его отличает то, что он разработан как общий ресурс общего состояния.

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

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

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

Другие вопросы по тегам