Как использовать sqlite для отмены / повтора функций? - PullRequest
4 голосов
/ 31 марта 2009

Я пишу настольное приложение для векторного рисования на C ++ и рассматриваю возможность использования sqlite для поддержки функции отмены / возврата.

Кто-нибудь использовал sqlite для отмены / повтора функций? Как это у вас получается?

Пояснение:

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

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

Это была идея, и мне было интересно, может ли это сработать.

Ответы [ 3 ]

10 голосов
/ 01 апреля 2009

Имеет смысл использовать SQLite для поддержки отмены / повтора, когда база данных SQLite является форматом файла данных приложения. См. веб-сайт SQLite для объяснения того, как сделать это с помощью триггеров SQLite.

2 голосов
/ 31 марта 2009

По существу, функция отмены / возврата может быть реализована с использованием стека: когда пользователь выполняет операцию, вы помещаете в стек объект, который представляет собой дельту между состоянием до и после операции, и когда вы отменяете, вы " разверните "дельту". Поскольку каждая операция, которую выполняет пользователь, создает новый дельта-объект в стеке, это может быть связано с тем, что sqlite не является вашим выбором технологии, поскольку она может быть слишком медленной. Я бы порекомендовал рассмотреть возможность простого хранения информации об отмене / восстановлении в памяти и линеаризации ее на диске только в том случае, если вы действительно хотите сохранить историю отмены / восстановления.

0 голосов
/ 31 марта 2009
...