@Agelios

Как реализовать большой откат с помощью паттерна команда?

Сразу перейду к примеру. Есть объект (пост, заказ и т.д., не важно) у которого есть статусы (новый, отмененый, в обработке и т.д.) и при изменение статуса обычно изменяются зависимые класы (например если заказу меняют статус на оплаченый, тогда сохраняется некая запись об этом событии). И нужно реализовать откат всего этого.

Есть пример отката на этом сайте, но есть нюанс. Тут происходит полный откат до прежнего состояния, а в моем случае если была сделана история, мне нужно ей не удалять, а отменять. + мне нужно вернуть не просто цифру в поле, какая была, а именно отминусовать то, что сделала команда execute.

Есть еще вариант, что бы писать undo для каждой команды отдельно, но тогда выходит много одинакового кода (просто в местах с + меняется на - и т.д.) так как изменение статуса в объекте, может нести изменения в многих класах и можно попросту протупить и написать не правильный undo на это все.

Не хочу костыли тулить и уверен, что есть хорошее решение, которое мне еще не попалось под руку, так как ситуация не особо уникальная. Заранее всем спасибо
  • Вопрос задан
  • 174 просмотра
Пригласить эксперта
Ответы на вопрос 1
vitali1995
@vitali1995
Можно сохранять в массив логи совершённых операций и их параметров, на основе которых вызывается нужный обработчик для совершения обратной операции
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы