В настоящее время я разрабатываю сложный веб-сайт, который должен поддерживать отмену и уведомления для операций CRUD.
Под Отменить я подразумеваю, что пользователь может создать/изменить/удалить элемент, а затем решить отменить то, что он сделал (таким образом, удалив созданный элемент, восстановив предыдущее состояние измененного элемента или вернув удаленный элемент). Он может сделать это в течение короткого времени после выполнения этой операции (время ожидания составляет 2 минуты, потому что система довольно сложна, и пользователю может потребоваться некоторое время, чтобы заметить, что модификация была неправильной).
Под Уведомлениями я подразумеваю, что при создании/изменении/удалении элемента другие пользователи, заинтересованные в этом элементе, получат уведомление на сайте (при следующей загрузке новой страницы) и будут также получать уведомления по электронной почте или SMS, если они просили об этом.
Реализовать любую функцию очень просто: отмена включает в себя сохранение информации об отмене (в основном старая версия измененных или удаленных элементов), в то время как уведомления так же просты, как вставка объекта уведомления в соответствующие таблицы и отправка электронной почты/SMS на лету.
Их совместная работа создает много дополнительных сложностей, потому что уведомления должны оставаться в стазисе до тех пор, пока отмена не станет невозможной, и у меня недостаточно ретроспективного взгляда на этот вопрос, чтобы спроектировать его разумным образом.
Каких шаблонов, рекомендаций или ошибок следует избегать при создании такой системы?