Я уже провел некоторое исследование относительно того, как я могу достичь названия этого вопроса.Приложение, над которым я работаю, разрабатывалось пару лет или около того (хотя медленный прогресс, вы все знаете, как это происходит в реальном мире).Теперь я должен добавить в Undo / Redo многоуровневую функциональность.Немного поздно сказать «ты должен был подумать об этом, прежде чем начать» ... ну, мы действительно думали об этом - и мы ничего не делали с этим, и вот оно.Из поиска по SO (и внешним ссылкам) я вижу, что два наиболее распространенных метода выглядят так: *
Шаблон команды
Шаблон Memento
Шаблон команды выглядит так, как будто это было бы чертовски много работы, я могу только представить, что в процессе он тоже выбрасывает тысячи ошибок, поэтому мне это не очень нравится.
Шаблон Memento на самом деле очень похож на то, что я имел в виду для этого.Я думал, что если бы был какой-то способ быстро сделать снимок объектной модели, находящейся в данный момент в памяти, я бы мог сохранить ее где-нибудь (возможно, также в памяти, может быть, в файле).Кажется, это отличная идея, единственная проблема, которую я вижу в этом, заключается в том, как она интегрируется с тем, что мы уже написали.Вы видите приложение в том виде, в котором оно есть у нас: оно рисует изображения на большой панели (возможно, сотнях), а затем позволяет пользователю манипулировать ими либо через пользовательский интерфейс, либо через пользовательскую сетку свойств.Все приложение связано с большим шаблоном наблюдателя.Второе что-то меняется, события запускаются, и все, что нужно обновить, делает.Это хорошо, но я не могу не думать, что если пользователь вводит текст в текстовое поле в сетке свойств, то перед тем, как пользовательский интерфейс будет задерживаться, будет небольшая задержка (кажется, что каждый раз, когда пользователь нажимает клавишу, будет добавлен новый снимок).в список отмены).Поэтому мой вопрос к вам ...
- Знаете ли вы какие-либо хорошие альтернативы шаблону Memento, которые могут сработать.
- Как вы думаете, шаблон Memento подойдет здесь?или это слишком сильно замедлит работу приложения.
- Если шаблон Memento - это то, что нужно, то каков наиболее эффективный способ сделать снимок объектной модели (я думал, сериализацию или что-то в этом роде)
- Должны ли снимки храниться в памяти или их можно поместить в файлы?
Если у вас все получилось, спасибо за чтение.Любой ваш вклад будет ценным и очень ценным.