Отменить / повторить + сохранить - PullRequest
1 голос
/ 13 апреля 2011

Я занимаюсь разработкой приложения на C #, которое соответствует следующим двум требованиям:

  1. пользователь должен иметь возможность отменить / повторить команды, такие как вставка, редактирование и удаление учетных записей, транзакций и т. Д.
  2. эти команды должны сохраняться в базе данных SQL CE только тогда, когда пользователь нажимает сохранить.

Есть ли лучшие практики для этого? Я прочитал, что реализация шаблона команды полезна для требования отмены / повтора. Проблема для меня заключается в сохранении изменений в базе данных. Я использую бизнес-объекты, а не наборы данных, и я не могу использовать Linq to SQL или Entity Framework, поэтому я не уверен, как отследить изменения, внесенные в эти объекты, чтобы сохранить их в базе данных, когда пользователь нажимает сохранить.

Мой вопрос:

Желательно ли внедрить шаблон «Единица работы» для отслеживания изменений или есть лучший способ? Я не уверен, как это будет сочетаться с шаблоном команды, например передается ли единица работы команде, которая помечает объект как грязный / новый / удаленный, и что происходит при выполнении метода отмены команды? Объект снова помечен как грязный / новый / удаленный или его можно как-то удалить из единицы работы?

Ответы [ 2 ]

2 голосов
/ 13 апреля 2011

http://en.wikipedia.org/wiki/Memento_pattern

Команда изменит ваши бизнес-объекты, они сохранят текущее состояние в объектах состояния, а также список предыдущих записей состояния, сохранить - сохранить текущее состояние, откат восстановит предыдущее состояние.

0 голосов
/ 14 апреля 2011

Используйте шаблон команд со следующим изменением (в обычном шаблоне команд у вас есть метод invoke. В этой специализации вы используете диспетчер для вызова команды).

Создать класс Dispatcher, через который вызываются все команды. Создайте событие в этом классе, которое вызывается для всех команд. Создайте класс, который прослушивает это событие. Пусть этот класс сохранит сериализацию всех изменений в вашей базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...