Где Хранить Пользовательские Настройки

Когда-то, во времена Вседозволенности и Хаоса, программы хранили пользовательские настройки где угодно.

Многие люди хранили одну копию настроек для всей системы.

Со временем все операционные системы обзавелись нормальными профилями пользователей, стали ограничивать доступ к системным папкам, а всех программистов с детского сада приучали хранить настройки пользователя в папке (ветке) его профиля.

Казалось бы, вот и конец сказки.

Но нет. Бывают случаи, когда этот подход не работает. Я продемонстрирую это на примере ошибки (именно архитектурной ошибки, а не банального бага из-за опечатки) в одном из приложений Google. Речь идет о сервисе Google Music. Как известно, слушать/скачивать музыку в этом сервисе можно через WEB-интерфейс, но загружать ее на сервер только из специального приложения Google Music Manager. После установки и входа в систему вам будет предложено указать папки, из которых вы хотите загрузить музыку в облако Google. Давайте выберем пару вещей:

Где хранить пользовательские настройки

Программа начнет загрузку файлов автоматически.

По завершении будет сообщено, что все успешно загружено.

Ну ок, пока все хорошо.

Теперь выйдите из системы и войдите в систему с другой учетной записью Google Music. И, обратите внимание, что мы видим:

Где хранить пользовательские настройки

В этом аккаунте уже прописаны такие же папки, и более того, песни уже скачиваются в другой аккаунт! Все это произошло само собой, без каких-либо действий с нашей стороны.

Для тех, кто еще не понял эпичности провала, приведу аналогию: вы приходите в гости к другу, просите проверить его электронную почту на его компьютере, заходите в свой аккаунт - и вдруг начинаются письма с почты вашего друга.

появиться в вашем почтовом ящике.

Прохладный? Прохладный.

Почему это случилось? Решение простое:

Где хранить пользовательские настройки

Google Music Manager хранит настройки общих папок в профиле пользователя в реестре.

При повторном входе в программу настройки не меняются.

Тот факт, что у одного пользователя может быть несколько учетных записей или ситуация «захода на чужой компьютер» вообще не учитывается.

И это ошибка.



Заключение

Если ваше приложение запрашивает у пользователя логин/пароль и куда-то подключается, стоит рассмотреть возможность хранения его настроек не в профиле пользователя ОС, а в собственных файлах профиля пользователя.

Пользователи ОС != пользователи внешних сервисов.

Теги: #настройки #программирование

Вместе с данным постом часто просматривают: