W systemie Windows domyślnym sposobem jest rejestr. Pozwala to na rozróżnienie ustawień systemowych i poszczególnych użytkowników.
W Uniksie powinieneś używać plików tekstowych w folderze / etc dla ustawień systemowych (jaka jest konwencja dla ustawień dla poszczególnych użytkowników?).
Wiele nowych programów (a zwłaszcza tych przeznaczonych do przenośności) korzysta z plików XML.
- Jaki jest najlepszy sposób (i lokalizacja) do przechowywania ustawień innych niż BLOB?
- Czy powinniśmy stosować domyślne ustawienia każdego systemu, czy mieć ujednolicone rozwiązanie?
- A jaki jest najlepszy przenośny sposób?
portability
Wizard79
źródło
źródło
Odpowiedzi:
W systemie Windows korzystanie z rejestru wydaje się dopuszczalne. Moim zdaniem rejestr był źle opracowanym systemem i zamiast tego
Users\Username\AppData
powinien być preferowany prosty plik tekstowy w katalogu. Jest to łatwiejsze do tworzenia kopii zapasowych, mniej niebezpieczne dla użytkowników do modyfikacji i łatwiejsze do czyszczenia.W systemie Linux i większości systemów uniksowych preferowaną lokalizacją są
/home/user/.config/appname
ustawienia specyficzne dla użytkownika i ustawienia/etc/
globalne (systemowe). Mniej preferowana (ale akceptowalna) lokalizacja dla ustawień użytkownika to~/.appname
, ale generalnie nie jest to przychylne. Pliki te powinny być edytowalne przez użytkownika, dlatego zawsze preferowany jest format czytelny dla człowieka.Nie zgadzam się z większością osób, że XML jest akceptowalnym formatem do przechowywania danych niepobranych. Moim zdaniem jest to przesadny i nadmiernie złożony format, który zwykle kończy się na bardzo małych fragmentach ustrukturyzowanych danych. Wolę widzieć pliki w YAML, JSON, ASN.1, pary nazwa = wartość lub podobne formaty. Zbyt duża składnia sprawia, że użytkownikowi zbyt łatwo jest zepsuć się i pozostawić plik w niepoprawnym formacie.
To zależy wyłącznie od Ciebie, ale pamiętaj o kilku rzeczach:
/var/
. Nonmutable pliki danych powinny być przechowywane w katalogu app w/usr/share/
lub/usr/local/share/
lub/opt/
/etc/
powinny być zapisywane przez aplikację podczas działania, nawet jeśli ma do nich dostęp do zapisu. powinno być repozytorium domyślnych zachowań i nic więcej./etc/
/usr/local/
,/opt/appname
, lub/home/username/appname
.Users\User\AppData
. Nigdzie indziej nie wydaje się do przyjęcia.~/Library/Preferences
wraz ze wszystkimi listami plików innych aplikacji.plist
wydaje się być preferowanym formatem, ale warto dwukrotnie sprawdzić wytyczne Apple.Szczerze mówiąc, nie ma „najlepszego”. Istnieją tylko specyficzne dla platformy ograniczenia i oczekiwania. Radzę trzymać się środków specyficznych dla platformy, nawet jeśli oznacza to pisanie większej ilości kodu.
źródło
%APPDATA%
> In my opinion, the registry was a poorly-devised system, and instead a simple text file in the Users\Username\AppData directory should be preferred.
@greyfade - Raymond Chen, wieloletni programista Windows API, rozwiązuje ten problem i wyjaśnia, dlaczego używanie plików tekstowych w rejestrze nie jest lepszym wzorcem projektowym: Dlaczego pliki INI są przestarzałe na rzecz rejestruW systemie Windows użyj
%APPDATA%\appname
. W obszarze * NIX użyj~/.appname
. Nie używaj ustalonych nazw katalogów na żadnej platformie, ponieważ katalog domowy użytkownika może różnić się od domyślnego (na przykład w sieci).Jeśli chodzi o format, użyj tego, co uważasz za najlepsze. Jest to decyzja, którą tylko Ty możesz podjąć w kontekście swojej aplikacji. Nie ma potrzeby, a wręcz nie jest wskazane, aby mieć „standardowy” sposób na zrobienie tego, jeśli ten „standardowy” sposób nie jest najlepszy dla danego programu.
Na przykład XML / JSON może być dobrym sposobem na przechowywanie danych / konfiguracji użytkownika, jeśli twoja aplikacja już używa XML / JSON do czegoś innego. Ale jeśli jest to prosty plik konfiguracyjny, po co dodawać wzdęcia do swojej aplikacji, wprowadzając zależność? W takim przypadku najlepiej jest po prostu użyć prostego pliku tekstowego z
var: value\n
liniami.EDYCJA: Nie ma „najlepszego” przenośnego sposobu, ponieważ systemy operacyjne używają do tego bardzo różnych konwencji. Nie łam standardów systemu operacyjnego bez cholernie dobrego powodu.
EDYCJA 2: Jeśli wybierzesz ustawienie systemowe dla
/etc
lubHKEY_LOCAL_MACHINE
, zapytaj siebie, czy ustawienie jest naprawdę globalne. Następnie odczekaj 5 minut i ponownie zadaj sobie pytanie. Jeśli odpowiedź nadal brzmi „tak”, to z całą pewnością dokonaj globalnego ustawienia. Pamiętaj, że zwykły użytkownik nie ma dostępu do zapisu/etc
lubHKEY_LOCAL_MACHINE
, robiąc to, masz pewność, że osoba bez uprawnień administratora nie będzie mogła zainstalować Twojej aplikacji.źródło
~/.config/applicaton
staje się coraz bardziej preferowaną lokalizacją na * nix.~
robi to około jedna czwarta aplikacji przechowujących dane konfiguracyjne~/.config/appname
.Staram się trzymać z rejestru, to jest sposób na używane. Chciałbym, żeby wszyscy to zrobili.
Lubię przechowywać pliki konfiguracyjne xml, plik bin lub czasami lokalną bazę danych (SQLite).
źródło
Moja odpowiedź jest kombinacją Chinmay Kańczi za odpowiedź i BioBuckyBall za odpowiedź .
XML / Json dla prostych konfiguracji, SQLite dla złożonych, większe konfiguracje zaparkowane w domyślnym folderze aplikacji systemu operacyjnego lub domyślnym folderze użytkownika systemu operacyjnego, gdy konfiguracje zależą od użytkownika. Oba mogą być użyte.
źródło
W systemie Windows zachowałbym ustawienie aplikacji w
AppData
folderzeźródło
Ustawienia użytkownika są zwykle w
Na przykład ustawienia irssi to /home//.irssi/config
źródło
/home/<user>/etc/application
?~/.config/application
aby pomóc w utrzymaniu konsolidacji. Jestem skłonny zgodzić się z tym ruchem.AppData
.Myślę, że najlepiej jest użyć preferowanego mechanizmu specyficznego dla platformy. Na przykład w OS X preferowanym mechanizmem jest umieszczenie listy właściwości w ~ / Library / Preferences, a interfejs API Cocoa ma naprawdę prosty interfejs do przechowywania i pobierania ustawień z tego miejsca.
Jeśli Twoja aplikacja jest wieloplatformowa, możesz ją wyodrębnić za pomocą klasy lub czegoś innego.
źródło
Jedyne, co piszę do rejestru, to lokalizacja aplikacji, aby instalatorzy i aktualizatorzy mogli ją łatwo znaleźć. Cała reszta jest przechowywana w plikach w / AppData / Company / App
źródło
W przypadku aplikacji Java myślę, że gson to dobry wybór. Utwórz obiekty ustawień i użyj gson, aby przekonwertować je na JSON i odwrotnie. Ma tę zaletę, że jest czytelny dla człowieka zamiast zserializowanego obiektu blob.
Edycja: ok, więc może nie jest tak ogólna ...
źródło
Jeśli piszesz w .NET, możesz użyć System.Environment.SpecialFolders, aby dowiedzieć się, jakich lokalizacji folderów możesz użyć do zapisania konfiguracji, a nawet niektórych danych.
źródło