лучшая практика для [закрытой] реализации Восстановления Отмены

Я должен реализовать основу Отмены/Восстановления для своего приложения окна (редактор как powerpoint), что должно быть лучшей практикой для следования, как был бы дескриптор все изменения свойства моих объектов и этого отражение о UI.

17
задан Firoz 16 December 2009 в 16:35
поделиться

3 ответа

Можно использовать два классических шаблона. Первый - это шаблон памятки , который используется для хранения снимков полного состояния вашего объекта. Возможно, это более ресурсоемкая процедура, чем шаблон команды, но он позволяет очень просто выполнить откат к более раннему моментальному снимку. Вы можете хранить снимки на диске как PaintShop / PhotoShop или хранить их в памяти для небольших объектов, которые не требуют сохранения. То, что вы делаете, - это именно то, для чего был разработан этот шаблон, поэтому он должен соответствовать требованиям немного лучше, чем шаблон Command, предложенный другими.

Кроме того, дополнительное примечание заключается в том, что, поскольку это не требует от вас взаимных команд для отмены того, что было сделано ранее, это означает, что любые потенциально односторонние функции [такие как хеширование или шифрование], которые могут ' тривиально отменить его с помощью взаимных команд все же можно очень просто, просто откатившись к более старому снимку.

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

  • Существует состояние большого объекта, которое необходимо сохранить и / или
  • Не существует деструктивных методов и
  • Когда взаимные команды могут использоваться очень тривиально для отмены любого предпринятого действия

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

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

30
ответ дан 30 November 2019 в 10:58
поделиться

Классическая практика - следовать шаблону команд .

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

6
ответ дан 30 November 2019 в 10:58
поделиться

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

2
ответ дан 30 November 2019 в 10:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: