Как только вы, как вы говорите "обратимость", я думаю, Команда Шаблон.
Типичным примером является поддержка поведения в стиле отмены, но я думаю, что это также подойдет для возможности проверки - особенно потому, что отдельные «шаги» (из-за отсутствия лучшего слова) настолько малы и их легко представить(например, {Merged "Rocky I" -> "Rocky" }
).
Как бы заставить шаблон Command для на самом деле работать для вашего сценария?
Что ж, сохранить это очень много на арене СУБД, а не на ОО моделировании, если вы 'у нас уже есть таблицы USER_FAVORITE
и MOVIE
, я бы добавил новую таблицу USER_FAVORITE_MOVIE_MERGE_COMMAND
со столбцами:
id
date
user_id
old_favorite_movie_title
new_favorite_movie_title
Итак, ваш сценарий ночной очистки (или что-то еще) выполняется по таблице USER_FAVORITE
в поискахнестандартные названия фильмов.Каждый раз, когда он находит его, он исправляет его и записывает соответствующие факты в таблицу USER_FAVORITE_MOVIE_MERGE_COMMAND
.
Ваш контрольный журнал находится прямо там, и если вам когда-либо понадобится отменить задание очистки, «воспроизведите»строки в обратном хронологическом порядке, заменив new
на old
.
Обратите внимание на то, что вы получаете как обратимость, так и возможность аудита как в временном смысле (например, пакетный прогон прошлой ночью стал страннымв 2.12 утра давайте откатим все проделанную после этого работу) и в смысле на пользователя .
Это такойчто вы ищете?