Di Windows cara standarnya adalah registri. Ini memungkinkan Anda untuk membedakan pengaturan sistem dan per pengguna.
Di Unix Anda harus menggunakan file teks di folder / etc untuk pengaturan seluruh sistem (apa konvensi untuk pengaturan per-pengguna?).
Banyak program baru (dan terutama yang dirancang untuk portable) menggunakan file XML.
- Apa cara terbaik (dan lokasi) untuk menyimpan pengaturan non-BLOB?
- Haruskah kita mengikuti setiap sistem default atau memiliki solusi terpadu?
- Dan apa cara portabel terbaik ?
portability
Wizard79
sumber
sumber
Jawaban:
Pada Windows, tampaknya dapat diterima untuk menggunakan registri. Menurut pendapat saya, registri adalah sistem yang dirancang dengan buruk, dan sebagai gantinya file teks sederhana dalam
Users\Username\AppData
direktori harus lebih disukai. Ini lebih mudah untuk dicadangkan, lebih sedikit berbahaya bagi pengguna untuk dimodifikasi, dan lebih mudah untuk dibersihkan.Di Linux dan sebagian besar Unix, Lokasi yang dipilih adalah
/home/user/.config/appname
untuk pengaturan spesifik pengguna dan/etc/
untuk pengaturan global (seluruh sistem). Lokasi yang kurang disukai (tetapi dapat diterima) untuk pengaturan pengguna adalah~/.appname
, tetapi ini umumnya tidak disukai. File-file ini harus dapat diedit pengguna, jadi format yang dapat dibaca manusia selalu lebih disukai.Saya tidak setuju dengan kebanyakan orang bahwa XML adalah format yang dapat diterima untuk menyimpan data non-gumpalan. Menurut saya, ini adalah format yang terlalu rumit dan terlalu rumit untuk apa yang biasanya hanya berupa data terstruktur yang sangat kecil. Saya lebih suka melihat file dalam YAML, JSON, ASN.1, name = pasangan nilai, atau format serupa. Memiliki terlalu banyak sintaks membuatnya terlalu mudah bagi pengguna untuk mengacaukan dan meninggalkan file dalam format yang tidak valid.
Itu sepenuhnya terserah Anda, tetapi ingatlah beberapa hal:
/var/
. File data yang tidak dapat diubah harus disimpan di direktori aplikasi Anda di/usr/share/
atau/usr/local/share/
atau/opt/
/etc/
harus tidak pernah ditulis oleh aplikasi ketika sedang berjalan, bahkan jika memiliki akses tulis kepada mereka./etc/
harus menjadi repositori untuk perilaku default dan tidak ada yang lain./usr/local/
,/opt/appname
, atau/home/username/appname
.Users\User\AppData
. Tidak ada tempat lain yang bisa diterima.~/Library/Preferences
bersama dengan semua file plist aplikasi lain.plist
tampaknya merupakan format yang disukai, tetapi Anda ingin memeriksa ulang dengan pedoman Apple.Tidak ada yang "terbaik", jujur saja. Hanya ada batasan dan harapan spesifik platform. Rekomendasi saya adalah tetap menggunakan sarana khusus platform, bahkan jika itu berarti menulis lebih banyak kode.
sumber
%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 - Pengembang Windows API lama, Raymond Chen, membahas ini, dan menjelaskan mengapa menggunakan file teks pada registri bukanlah pola desain yang lebih baik: Mengapa file INI tidak digunakan lagi karena registriDi bawah Windows, gunakan
%APPDATA%\appname
. Di bawah * NIX, gunakan~/.appname
. Jangan menggunakan nama direktori tetap di bawah platform mana pun, karena direktori home pengguna dapat berbeda dari default (misalnya di jaringan, misalnya).Adapun format, gunakan apa pun yang menurut Anda terbaik. Itu adalah keputusan yang hanya dapat Anda buat dalam konteks aplikasi Anda. Tidak perlu, dan memang, tidak disarankan, untuk memiliki cara "standar" untuk melakukannya, jika cara "standar" itu bukan yang terbaik untuk program khusus Anda.
Misalnya, XML / JSON mungkin merupakan cara yang baik untuk menyimpan data / konfigurasi pengguna jika aplikasi Anda sudah menggunakan XML / JSON untuk hal lain. Tetapi jika itu adalah file konfigurasi yang sederhana, mengapa menambahkan mengasapi ke aplikasi Anda dengan memperkenalkan ketergantungan? Dalam hal ini, mungkin lebih baik menggunakan file teks sederhana dengan
var: value\n
baris saja.EDIT: Tidak ada cara portabel "terbaik", karena OS menggunakan konvensi yang sangat berbeda untuk ini. Jangan melanggar standar OS tanpa alasan yang jelas.
EDIT2: Jika Anda menemukan diri Anda membuat pengaturan seluruh sistem dalam
/etc
atauHKEY_LOCAL_MACHINE
, tanyakan pada diri sendiri apakah pengaturan tersebut benar - benar global. Kemudian tunggu 5 menit dan tanyakan pada diri Anda lagi. Jika jawabannya masih ya, maka tentu saja, buatlah pengaturan global. Ingat, pengguna normal tidak memiliki akses tulis ke/etc
atauHKEY_LOCAL_MACHINE
dan dengan melakukan ini, Anda memastikan bahwa seseorang tanpa hak admin tidak dapat menginstal aplikasi Anda.sumber
~/.config/applicaton
semakin menjadi lokasi pilihan di * nix.~
melakukannya~/.config/appname
.Aku mencoba dan menjaga dari registri, itu cara yang lebih digunakan. Saya berharap semua orang mau.
Saya suka menyimpan file konfigurasi xml atau file bin atau kadang-kadang database lokal (SQLite).
sumber
Jawaban saya adalah kombinasi dari Chinmay Kanchi ini jawaban dan BioBuckyBall ini jawabannya .
XML / Json untuk konfigurasi sederhana, SQLite untuk konfigurasi kompleks, lebih besar diparkir di folder aplikasi OS default atau folder pengguna OS default ketika konfigurasi bergantung pada pengguna. Keduanya bisa digunakan.
sumber
Di Windows, saya akan menyimpan pengaturan aplikasi di
AppData
foldersumber
Pengaturan pengguna biasanya dalam
Jadi misalnya untuk pengaturan irssi adalah /home//.irssi/config
sumber
/home/<user>/etc/application
?~/.config/application
untuk membantu menjaga hal-hal terkonsolidasi. Saya cenderung setuju dengan gerakan ini.AppData
.Saya pikir yang terbaik adalah menggunakan mekanisme spesifik platform yang disukai. Sebagai contoh, pada OS X, mekanisme yang disukai adalah menempatkan daftar properti di ~ / Library / Preferences, dan Cocoa API memiliki antarmuka yang sangat sederhana untuk menyimpan dan mengambil pengaturan dari sana.
Jika aplikasi Anda adalah lintas-platform, Anda bisa mengabstraksi ini dengan kelas atau yang lainnya.
sumber
Satu-satunya hal yang saya tulis ke registri adalah lokasi aplikasi, sehingga installer dan updaters dapat menemukannya dengan mudah. Segala sesuatu yang lain disimpan dalam file di / AppData / Company / App
sumber
Untuk aplikasi Java, saya pikir gson adalah pilihan yang baik. Buat objek pengaturan Anda dan gunakan gson untuk mengubahnya menjadi JSON dan sebaliknya. Memiliki keuntungan menjadi manusia yang dapat dibaca, bukan gumpalan serial.
Sunting: ok, jadi mungkin tidak terlalu umum ...
sumber
Jika Anda menulis di .NET, Anda dapat menggunakan System.Environment.SpecialFolders untuk mengetahui lokasi folder apa yang dapat Anda gunakan untuk menyimpan konfigurasi atau bahkan beberapa data.
sumber