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