Отмена всех изменений и возврат к исходным данным с помощью глубокой копии

В моем приложении я храню все данные в статическом списке AllData, он унаследован от;

public class GenericList<T> : BindingList<T>, IList<T> 

Я установил изменения пользователя в выбранный элемент AllData, и моя проблема заключается в отмене изменений. Если пользователь отменяет изменения, я снова извлекаю все данные из базы данных. Это бесполезное решение; требуется время, создается новое соединение с базой данных и т. д.

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

public static T Clone<T>(T source)

, и получил ошибку вроде

Тип «Класс XYZ» не помечен как сериализуемый.

Да, у меня есть несколько сериализованных классов, а другие не сериализованы. Выбранный элемент AllData, который я пытаюсь клонировать, содержит все типы данных, которые я создал.

Должен ли я разделить все классы? Если да; может ли это вызвать какие-либо проблемы (безопасность, производительность и т. д.)? или есть какой-нибудь полезный способ отмены операции?


person Furkan Ekinci    schedule 28.05.2013    source источник
comment
Если вам нужна обобщенная undo функция, взгляните на структуру CSLA Rockford Lhotka.   -  person Robert Harvey    schedule 28.05.2013