организация undo-redo
От: waddayamin  
Дата: 05.06.06 08:20
Оценка:
Требуется организовать механизм undo-redo. Для каких именно объектов — я сам толком не знаю, и вообще это коммерческая тайна =)
Соответственно у меня встаёт вопрос: существует ли в .NET или C# готовое решение, позволяющее легко организовать undo-redo для каких-то абстрактных объектов (не в смысле abstract, а в смысле заранее неизвестной структуры =)? (как пример того, что мне нужно, могу вспомнить сериализацию Serialize, которая позволяет сохранять/загружать данные объектов сложной структуры)
И какие вообще есть способы организации undo-redo, непривязанные к конкретным языкам-платформам-библиотекам?
Спасибо за внимание =)
Re: организация undo-redo
От: pt4h Беларусь http://dzmitryhuba.blogspot.com/
Дата: 05.06.06 08:29
Оценка:
Здравствуйте, waddayamin, Вы писали:

W> Требуется организовать механизм undo-redo. Для каких именно объектов — я сам толком не знаю, и вообще это коммерческая тайна =)

W> Соответственно у меня встаёт вопрос: существует ли в .NET или C# готовое решение, позволяющее легко организовать undo-redo для каких-то абстрактных объектов (не в смысле abstract, а в смысле заранее неизвестной структуры =)? (как пример того, что мне нужно, могу вспомнить сериализацию Serialize, которая позволяет сохранять/загружать данные объектов сложной структуры)
W> И какие вообще есть способы организации undo-redo, непривязанные к конкретным языкам-платформам-библиотекам?
W> Спасибо за внимание =)

К сожалению не знаю, есть ли стандартные средства реализации undo-redo.

Можно воспользоваться паттерном Command. Логику undo-redo придется реализовать в самой команде (при первом приближении). То есть, в этом случае команды будут знать об этой функциональности.
Re: организация undo-redo
От: IB Австрия http://rsdn.ru
Дата: 05.06.06 08:29
Оценка:
Здравствуйте, waddayamin, Вы писали:

W> Соответственно у меня встаёт вопрос: существует ли в .NET или C# готовое решение, позволяющее легко организовать undo-redo для каких-то абстрактных объектов (не в смысле abstract, а в смысле заранее неизвестной структуры =)? (как пример того, что мне нужно, могу вспомнить сериализацию Serialize, которая позволяет сохранять/загружать данные объектов сложной структуры)

W> И какие вообще есть способы организации undo-redo, непривязанные к конкретным языкам-платформам-библиотекам?
Back/Forward и Undo/Redo в .NET-приложениях
Автор(ы): Андрей Мартынов
Дата: 06.12.2002
Статья рассказывает об операциях Undo/Redo и Back/Forward в WinForms-приложениях в среде .NET — логике работы, проектировании и реализации этих операций, а также о механизмах, облегчающих их реализацию.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Мы уже победили, просто это еще не так заметно...
Re: организация undo-redo
От: adontz Грузия http://adontz.wordpress.com/
Дата: 05.06.06 08:35
Оценка:
Здравствуйте, waddayamin, Вы писали:

Берём алгоритм diff и два Stack<IList<PatchOperation>> для Undo и для Redo. Каждое состояние сериализуем в массив байт и прогоняем diff по этому массиву и предыдущему два раза в обе строны. Соответсвенно Undo/Redo реализуются как patch текущего состояния и IList<PatchOperation> из вершины стека. Способ совершенно не зависит от природы объектов, в теории хранит только необходимую разницу. Но, в зависимости от качества сериализации, может напротив приводить к перерасходу памяти.

P.S. diff'ом и patch'ем могу поделится если подход устраивает.
A journey of a thousand miles must begin with a single step © Lau Tsu
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.