Всем привет, как грамотно реализовать Undo и Redo в программе, где много различных параметров меняется, я думал отслеживать каждый шаг пользователя и записывать в историю, для каждого пункта истории сделать функции Undo и Redo, но тут получается для каждого определенного действия придется наследовать общий класс какой-то, например для удаления объекта, наследуем класс BaseHistoryElement и переписываем функции Undo, Redo в Undo меняем флаг deleted = false; ну и для Redo собственно наоборот. Но с таким подходом очень много кода выйдет для каждого действия, вот и интересно, может есть какой-то более правильный подход?