Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Отмена действия

#c_sharp #aspnet_mvc #ui


Доброго времени суток.
Есть задача: возможность отмены собственных действий на сайте/форуме, например удалил
сообщение/коммент(не смотря на предварительно подтверждёный вопрос подтверждения) и
пожалел о содеяном, тогда подобная функция отмены будет очень кстати.
На данном ресурсе есть возможность отмены голоса ЗА и/или ПРОТИВ, которая достаточно
полезна.
Собственно вопрос: как реализовывать подобный функционал? Когда выполнять запрос
удаления записи(или любой другой операции) из базы? Или просто помечать запись определённым
флагом "deleted"? 
Какой метод решения является самым оптимальным? Просто придумать какой-нибудь велосипедо-костыль
не составит труда, хотелось бы всё сделать правильно.
Буду рад словесному описанию алгоритмов или ссылок на чтиво касающегося данной темы.
Зарание благодарю.
UPD: ответ тов. @wind хорош, но хотелось бы узнать по данной теме по-больше    


Ответы

Ответ 1



Для реализации отмены каких-либо действий однозначно нужно их где-то хранить, чтобы иметь возможность откатиться к прежней версии или восстановить удаленное. И так как мы говорим о веб-разработке, то у нас как обычно встает два варианта: клиент и сервер. Но выдумывать хранение данной информации на клиенте в куках или прям на странице или хз где еще, как по мне, как раз описанный вами "велик" (еще и не "секьюрно"). Следовательно нужно хранить на сервере, а раз мы выбираем сервер, то почему бы не юзать ту же БД, в которой итак все хранится. Поэтому я считаю, что оптимально использовать именно схему "с флагами в БД". Судя по вопросу вы вкурсе, как ее реализовать, да это и вовсе не сложно. Единственное, что хочу еще добавить, так это версионность, которая, как пример, реализована при редактировании вопросов на данном форуме. То есть можно в БД не только помечать запись какую-либо, как удаленную, а реализовать некую структуру для хранения версий постов, комментариев и тд. Имея данную структуру в БД, можно отменить не только одно действие, а вернуться к любому предыдущему, но это уже во многом зависит от задачи, нужно ли оно вообще вам или достаточно всего лишь отмены удаления. К тому же, если рассматривать какую-либо соц. сеть, то при удалении например профайла юзера, насколько я знаю, опять же используется данная схема, ну и было бы странно, если удалив юзера, со всего портала пропала оставленная им информация, хотя иногда это требуется по ТЗ и тогда "каскады" в БД или ОРМ сама подчистит все связанные с сущностью данные.

Ответ 2



Хранить в сессии историю команд. Интерфейс команды должен иметь методы Undo и Redo.

Комментариев нет:

Отправить комментарий