Разработка шаблонов для облегчения такого поведения (поведение в журнале аудита и отмена) - PullRequest
7 голосов
/ 03 августа 2011

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

  1. Контрольный журнал
  2. Отмена / возврат к определенной версии (такое действие само будет записано в журнал аудита)

Я видел немного похожий вопрос здесь , но он касается только части того, что я пытаюсь сделать.Более того, я хочу захватить весь жизненный цикл объекта (например, CRUD).

Способ, которым я намереваюсь реализовать это следующим образом:

  1. Основан на классе ChangeManagerв шаблоне наблюдателя
  2. Извлечение моих объектов из базового объекта, который «оборачивает» изменения в шаблоне команды
  3. Уведомление ChangeManager с помощью объекта команды о любом из событий CRUD

Примечание. Команда 'change' будет состоять из:

  • (упорядоченного) набора из двух кортежей, подробно описывающих изменение поля (prev, new)
  • idпользователя, который внес изменение
  • отметка времени изменения

Это просто "от макушки головы" - и могут быть дыры в подходе, о котором я думаюпринятие - я был бы признателен за некоторую помощь от людей, которые ранее реализовывали такого рода поведение, а также за общие советы, плюсы и минусы в отношении подхода, который я обрисовал в общих чертах выше, - или, возможно, лучший / альтернативный подход.Фрагмент или два, которые укажут мне правильное направление, также будут с благодарностью!.

Я буду использовать C # в качестве языка реализации.

1 Ответ

5 голосов
/ 03 августа 2011

Это довольно сложная тема.Существует ряд формальных подходов.

С моей точки зрения, я бы подумал об использовании "Event Sourcing".Для получения дополнительной информации см. Здесь:

http://martinfowler.com/eaaDev/EventSourcing.html

. Он позаботится о заполнении журнала изменений и поддержании текущего состояния и даст вам возможность воспроизвести события для отмены изменений.Есть основанные на событиях архитектуры, основанные на этом, такие как CQRS:

http://martinfowler.com/bliki/CQRS.html

Другой альтернативой является шаблон команды, который позволяет отменить, но не использует все вышеуказанные требования, такие как отслеживание аудита,Пример шаблона команды с отменой приведен здесь:

http://mattberther.com/2004/09/16/using-the-command-pattern-for-undo-functionality

Надеюсь, что это полезно.

Редактировать: предоставить ссылку на CQRS.

...