Я создаю приложение по следующим критериям:
- рабочие элементы: элементы, которые пользователи должны обрабатывать вручную через Интернет (короткая одностраничная форма)
- Несколько пользователей, работающих «рабочие элементы»
- У каждого пользователя есть очередь «рабочих элементов»
- Существует поиск, который позволяет пользователям просматривать «рабочие элементы» и назначать «рабочие элементы» своим очередям
- Пользователи могут извлекать «рабочие элементы» из очередей других людей, назначая их себе
Примечание: «рабочие элементы» обрабатываются только один раз. Это не вики-страница, это скорее совместимое упражнение, которое должен выполнять только один пользователь. Как только «рабочий элемент» обработан, он исчезает из системы (за исключением некоторого аудита / отчетности), что-то вроде системы отслеживания ошибок
Какой вариант вы считаете лучшим? Можете ли вы привести какие-либо основные приложения, которые поддерживают ваше мнение?
Вариант 1:
- Когда пользователь А просматривает или обрабатывает «рабочий элемент», «рабочий элемент» блокируется.
- Когда другие пользователи переходят к «рабочему элементу» после того, как пользователь А открывает «рабочий элемент», они могут видеть только «рабочий элемент». Они не могут писать.
- Срок действия блокировки истекает через n минут, после чего другой пользователь может заблокировать «рабочий элемент».
Вариант 2:
- Любой пользователь может открыть «рабочий элемент», не блокируя его.
- Если пользователь A работает с «рабочим элементом», отправив форму, а пользователь B работает с тем же «рабочим элементом», то работа пользователя A вступит в силу в базе данных, и пользователь B будет проинформирован о том, что его изменения не были приняты влияет, потому что другой пользователь изменил «рабочий элемент».
Мне лично нравится вариант 2. Мысли, пожалуйста?