Выход из однопользовательской программы не так прост...
От: Shmj Ниоткуда  
Дата: 18.04.25 06:33
Оценка:
Допустим есть программа, в которой может быть залогинен только один пользователь, т.е. нет переключения между аккаунтами — только Вася или Петя, но не оба одновременно.

Вроде все просто — вошли, загрузили данные, отображаем.

При выходе — просто удаляем данные и все тут.

Но дьявол как всегда в деталях...

Во-первых, если пользователь не нажимал явно "выйти" но по каким-либо причинам доступ данным не возможен (пользователь изменил пароль или удалил приложение из доверенных) — данные удалять не стоит, но при этом нужно перейти на страницу повторного входа. Данные же нужно сохранить, т.к. скорее всего пользователь просто перезайдет.

И тут сразу нюансы... Если мы данные не удаляем — то пользователь ведь может зайти под другим аккаунтом. Уже сразу нужно сравнить его данные или новый пользователь.

Далее...

При выходе нужно отписаться от оповещений как минимум. Иначе оповещение придет а пользователь не вошел. Глупо.

Еще далее. Фоновые задачи. Пользователь мог выйти, но при этом фоновую задачу вы не остановили. Данные удалили — а фоновая задача об этом не знает, т.к. исполняется в отдельном изоляте — она подумает что ничего не изменилось и сохранит некие новые данные для текущего пользователя. Значит обязательно остановить все фоновые задачи, дождаться остановки — и уже тогда удалять.

Но и еще. Остановили фоновые задачи — а если это не фоновая а запрос пользователя, который выполнялся дольше обычного? При этом он удалил базу, потом пришел ответ на запрос. Ну ок, можно блокировать запись в базу. Но! А что если вы создали новую базу (сняли блокировку) — и тут приходит старый ответ на запрос? Опаньки...

Или же умнее не смотря на то что пользователь может быть только один — делать вид как будто приложение поддерживает много-пользовательский режим — для каждого пользователя создавать свою базу данных а в общей конфигурации только указывать какой пользователь активен?

Казалось бы мелочь — но на практике как всегда множество нюансов...
Отредактировано 18.04.2025 6:42 Shmj . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.