undo/redo - как лучше сделать в своей программе?

by Темных Сергей 26.03.2009 20:23:00
В независимости от модели данных, используется только два чистых подхода:
1. сохранение состояние всей программы, при undo/redo восстановление состояния на каждом шаге
2. преобразование каждого действия в команду и антикоманду. А далльше при U/R последовательное исполнение либо команд, либо антикоманд.

1 подход в чистом виде редко применяется, обычно его оптимизируют — сохранение только измененных частей программы и т.д, как-то совмещают со вторым подходом и т.д.

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

На практике, начинают U/R делать с двух сторон:
1. Реализуют первый подход, благо его писать быстро.
2. Далее реализуется второй подход: те действия, которые легко перевести в команды-антикоманды переводятся,
те действия, которые не получилось быстро перевести, оформляются в виде команды-антикоманды (каждая их которых восстанавливает все состояние).
3. Далее делается движение с двух сторон: все больше делается "честных" команд-антикоманд,
а при сохранение состояния пытаются сохранять только часть программы. Например, для команды "отсортировать массив" — можно сохранять только состояние самого массива.

Полностью сохранение состояния не убирают, а используют для сохранения контрольных точек (например, каждые 10-50 действий пользователя) для того, чтобы уменьшить проблему "антикоманда не полностью соответствует команде"

Оценок нет

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

Похожие записи

Powered by BlogEngine.NET 1.3.1.0
Theme by Mads Kristensen

Сергей Темных

Модулятор


Calendar

<<  Август 2017  >>
повтсрчепясуво
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

View posts in large calendar

Страницы

    Последние комментарии

    Категории

    None


    Disclaimer

    The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

    © Copyright 2017

    Sign in