В среде отмены Qt вы можете иметь стек QUndoCommand
экземпляров.Каждый из них описывает действие в пользовательском интерфейсе.В нашем приложении у нас есть набор представлений, работающих с набором моделей, некоторые из которых являются комбинациями, и у нас часто есть несколько представлений, работающих с одним и тем же набором моделей.Сейчас я смотрю на возможность отмены действий, основанных на этой платформе.
Теперь я знаком с общей схемой наличия командных классов для описания действий пользовательского интерфейса, но должны ли они представлять изменение состояния вЭлементы пользовательского интерфейса или изменение данных в базовой модели?Сколько данных и состояний должен содержать командный класс?
Пример, иллюстрирующий мою точку зрения: предположим, у вас есть QStandardItemModel
в качестве базовой модели и несколько прокси-моделей, расположенных поверх этого.Каждая модель прокси будет выполнять своего рода преобразование, такое как фильтрация по появлению определенного значения.Затем, если я создаю класс команд для конкретного изменения одного значения в одной из этих моделей прокси-серверов, и условия фильтра меняются, состояние этого класса команд становится недействительным.Поэтому я должен также включить состояние фильтра или отображение в основную базовую модель.Другой вариант - добавить команды для всех изменений состояния в пользовательском интерфейсе (например, те, которые вызывают изменение условия фильтра), но недостатком этого является то, что список отменяемых команд становится довольно большим.
Какие здесь лучшие практики?