Aplikasi file konfigurasi

OK, jadi saya don't ingin memulai kudus-perang di sini, tapi kami're dalam proses mencoba untuk mengkonsolidasikan cara kita menangani file konfigurasi aplikasi dan kami're berjuang untuk membuat keputusan tentang pendekatan terbaik untuk mengambil. Pada saat ini, setiap aplikasi yang kami distribusikan adalah menggunakan it's sendiri ad-hoc file-file konfigurasi, apakah itu's file (ini gaya), XML atau JSON (penggunaan internal hanya pada saat ini!).

Sebagian besar dari kode Java pada saat ini, sehingga kita've telah mencari di Apache Commons Config, tapi kami've ditemukan untuk menjadi cukup verbose. Kami've juga tampak di XMLBeans, tapi sepertinya banyak faffing sekitar. Saya juga merasa seolah-olah saya'm didorong menuju XML sebagai format, tapi klien saya dan rekan-rekan khawatir tentang mencoba sesuatu yang lain. Saya bisa memahami itu dari klien's perspektif, semua orang's mendengar XML, tapi pada akhir hari, seharusnya't harus menggunakan alat yang tepat untuk pekerjaan itu?

Apa format dan perpustakaan adalah orang-orang yang menggunakan sistem produksi hari ini, apakah ada orang lain yang mencoba untuk menghindari angle bracket pajak?

_Edit: benar-benar perlu untuk menjadi solusi lintas platform: Linux, Windows, Solaris dll. dan pilihan dari perpustakaan yang digunakan untuk antarmuka dengan file-file konfigurasi adalah sama pentingnya dengan pilihan format._

Mengomentari pertanyaan (1)

YAML, untuk alasan sederhana bahwa itu membuat sangat mudah dibaca file konfigurasi dibandingkan dengan XML.

XML:


    Bob
    Abooey
    adv
    555-1212
    ahunter@example1.com
    babooey@example2.com

YAML:

    babooey:
        computer : cpu1
        firstname: Bob
        lastname: Abooey
        cell: 555-1212
        addresses:
            - address: babooey@example1.com
              password: xxxx
            - address: babooey@example2.com
              password: xxxx

Contoh-contoh yang diambil dari halaman ini: http://www.kuro5hin.org/story/2004/10/29/14225/062

Komentar (6)

Pertama: Ini adalah benar-benar besar perdebatan masalah, tidak cepat Q+A.

Favorit saya sekarang adalah untuk hanya mencakup Lua, karena

  • Saya dapat mengizinkan hal-hal seperti lebar=tinggi*(1+1/3)
  • Saya dapat membuat fungsi kustom yang tersedia
  • Saya bisa melarang apa-apa lagi. (mungkin, misalnya, Python (termasuk acar.))
  • I'll mungkin ingin sebuah bahasa scripting yang di tempat lain dalam proyek pula.

Pilihan lain, jika ada's banyak data adalah dengan menggunakan sqlite3, karena mereka're hak untuk mengklaim

  • Kecil.
  • Cepat.
  • Dapat diandalkan.

Memilih tiga.

Untuk yang ingin saya tambahkan:

  • backup adalah snap. (hanya copy file db.)
  • lebih mudah untuk beralih ke yang lain db, ODBC, apapun. (dari lebih dari fugly-file)

Tapi sekali lagi, ini adalah masalah yang lebih besar. "besar" jawaban ini mungkin melibatkan beberapa jenis fitur matrix atau daftar situasi seperti:

Jumlah data, atau pendek runtime

  • Untuk data dalam jumlah besar, anda mungkin ingin penyimpanan yang efisien, seperti db.
  • Untuk berjalan singkat (sering), anda mungkin ingin sesuatu yang anda don't perlu melakukan banyak parsing untuk, mempertimbangkan sesuatu yang dapat mmap:ed secara langsung.

Apa konfigurasi berhubungan dengan?

  • Host:
  • Saya suka YAML di /etc. Adalah bahwa reimplemented di windows?
  • Pengguna:
  • Apakah anda mengizinkan pengguna untuk mengedit config dengan teks editor?
  • Harus dikelola secara terpusat? Registry / gconf / remote db?
  • Dapat pengguna memiliki beberapa yang berbeda profil?
  • Proyek:
  • File(s) di proyek direktori? (Version control biasanya mengikuti model ini...)

Kompleksitas

  • Ada hanya beberapa flat nilai-nilai? Mempertimbangkan YAML.
  • Adalah data yang bersarang, atau bergantung dalam beberapa cara? (Ini adalah di mana ia mendapat menarik.)
  • Mungkin ini menjadi sebuah fitur yang diinginkan untuk mengizinkan beberapa bentuk scripting?
  • Template dapat dilihat sebagai jenis file konfigurasi..
Komentar (0)
Larutan

XML XML XML XML. Kami're berbicara config file di sini. Tidak ada "angle bracket pajak" jika anda're tidak serialisasi objek dalam kinerja-intens situasi.

Config file harus mudah dibaca dan dimengerti manusia, selain mesin yang dapat dibaca. XML adalah kompromi yang baik antara keduanya.

Jika toko anda memiliki orang-orang yang takut bahwa baru-ketinggalan jaman teknologi XML, saya merasa buruk bagi anda.

Komentar (2)

Tanpa memulai sebuah perang suci, sentimen dari 'angle bracket pajak' post adalah salah satu daerah di mana saya majorly tidak setuju dengan Jeff. Ada's tidak ada yang salah dengan XML, it's cukup dibaca manusia (sebanyak YAML atau JSON atau INI file) tapi ingat tujuannya adalah untuk dapat dibaca oleh mesin. Kebanyakan bahasa/kerangka combo datang dengan XML parser dari beberapa macam secara gratis yang membuat XML pilihan yang cukup baik.

Juga, jika anda're menggunakan baik IDE seperti Visual Studio, dan jika XML datang dengan skema, anda bisa memberikan skema untuk DIBANDINGKAN dan ajaib anda mendapatkan intellisense (anda bisa mendapatkan satu untuk NHibernate misalnya).

Ulimately yang anda butuhkan untuk berpikir tentang seberapa sering anda're akan menyentuh file-file ini sekali dalam produksi, tetapi tidak sering.

Ini masih mengatakan itu semua untuk saya tentang XML dan mengapa hal itu's masih berlaku sempurna untuk config file (dari Tim Bray):

"Jika anda ingin memberikan tujuan umum data penerima mungkin ingin melakukan yang tak terduga aneh dan hal-hal gila dengan, atau jika anda ingin menjadi benar-benar paranoid dan pilih-pilih tentang i18n, atau jika apa yang anda mengirim lebih seperti sebuah dokumen dari sebuah struct, atau jika urutan data penting, atau jika data yang berpotensi berumur panjang (seperti dalam, lebih dari detik) XML adalah cara untuk pergi. Hal ini juga tampaknya bagi saya bahwa kombinasi XML dan XPath adalah sweet spot untuk format data yang perlu extensible, yang mengatakan, itu cukup mudah untuk menulis XML-kode pengolahan yang tidak akan gagal di hadapan perubahan format pesan yang tidak menyentuh bagian yang anda sayangi."

Komentar (1)

@Pria

Tapi aplikasi config isn't selalu hanya pasangan kunci/nilai. Melihat sesuatu seperti tomcat konfigurasi untuk apa port mendengarkan pada. Berikut ini's contoh:



Anda dapat memiliki jumlah konektor. Mendefinisikan lebih dalam file dan banyak lagi konektor yang ada. Don't menentukan lagi dan tidak ada lagi ada. Ada's tidak ada cara yang baik (imho) untuk melakukan itu dengan polos tua pasangan kunci/nilai.

Jika aplikasi anda's config sederhana, maka sesuatu yang sederhana seperti INI file yang's baca menjadi sebuah kamus adalah mungkin baik-baik saja. Tapi untuk sesuatu yang lebih kompleks seperti konfigurasi server, aplikasi INI file akan menjadi sakit besar untuk mempertahankan, dan sesuatu yang lebih struktural seperti XML atau YAML akan lebih baik. Itu semua tergantung pada masalah yang ditetapkan.

Komentar (0)

XML, JSON, INI. Mereka semua memiliki kekuatan dan kelemahan mereka. Dalam konteks aplikasi, saya merasa bahwa lapisan abstraksi adalah hal yang penting. Jika anda dapat memilih cara untuk struktur data yang merupakan jalan tengah yang baik antara manusia yang dibaca dan bagaimana anda ingin mengakses/abstrak data dalam kode, anda're emas.

Kami biasanya menggunakan XML di mana saya bekerja, dan saya tidak benar-benar percaya bahwa konfigurasi file dimuat ke cache sebagai objek ketika pertama kali membaca atau setelah itu telah tertulis, dan kemudian disarikan dari sisa program, benar-benar adalah bahwa banyak hit baik pada CPU maupun ruang disk. Dan itu cukup mudah dibaca juga, asalkan anda struktur file yang tepat.

Dan semua bahasa di semua platform yang mendukung XML melalui beberapa perpustakaan umum.

Komentar (0)

Kami menggunakan gaya ini config file. Kami menggunakan Nini perpustakaan untuk mengelola mereka. Nini membuatnya sangat mudah untuk digunakan. Nini orignally untuk .NET tetapi telah porting ke platform lain menggunakan Mono.

Komentar (1)

@Herms

Apa yang saya maksudkan adalah untuk tetap pada cara yang dianjurkan perangkat lunak harus menyimpan konfigurasi nilai-nilai yang diberikan untuk setiap platform.

Apa yang sering anda dapatkan kemudian adalah juga cara yang dianjurkan ini harus/dapat dimodifikasi. Seperti menu konfigurasi dalam sebuah program atau konfigurasi panel di "sistem prefs" aplikasi (untuk layanan sistem software ie). Tidak membiarkan pengguna akhir memodifikasi mereka secara langsung melalui RegEdit atau NotePad...

Mengapa?

  1. Pengguna akhir (=pelanggan) yang digunakan untuk platform mereka
  2. Sistem backup lebih baik dapat menyimpan "aman setup" dll

@ninesided

Tentang " choice dari library ", cobalah untuk link (tautan statis) apapun yang dipilih perpustakaan untuk menurunkan risiko masuk ke sebuah versi-konflik-perang pada pengguna akhir mesin.

Komentar (1)

Jika anda konfigurasi file write-once, read-only-di-bootup, dan data anda adalah sekelompok nama pasangan nilai, pilihan terbaik anda adalah salah satu pengembang anda bisa mendapatkan bekerja dulu.

Jika data anda adalah sedikit lebih rumit, dengan bersarang dll, anda mungkin lebih baik dengan YAML, XML, atau SQLite.

Jika anda membutuhkan bersarang data dan/atau kemampuan untuk query data konfigurasi setelah bootup, menggunakan XML atau SQLite. Keduanya telah cukup baik bahasa query (XPATH dan SQL) untuk terstruktur/bersarang data.

Jika anda konfigurasi data adalah sangat normal (misalnya 5th normal form) anda lebih baik dengan SQLite karena SQL lebih baik untuk berurusan dengan sangat normalisasi data.

Jika anda berencana untuk menulis konfigurasi set data selama operasi program, maka anda lebih baik pergi dengan SQLite. Misalnya, jika anda men-download data konfigurasi dari komputer lain, atau jika anda mendasarkan masa depan program eksekusi keputusan pada data yang dikumpulkan dalam program sebelumnya eksekusi. SQLite mengimplementasikan sangat kuat penyimpanan data mesin yang sangat sulit untuk korup ketika anda memiliki listrik padam atau program yang digantung dalam keadaan yang tidak konsisten karena kesalahan. Yaitu data yang mengarah ke tinggi bidang dukungan biaya, dan SQLite akan melakukan jauh lebih baik daripada rumah-tumbuh solusi atau bahkan perpustakaan yang terkenal di seluruh XML atau YAML.

Check out halaman saya untuk informasi lebih lanjut tentang SQLite.

Komentar (0)

Saya pikir satu-satunya hal yang penting adalah untuk memilih format yang anda sukai dan dapat menavigasi dengan cepat. XML dan JSON berdua baik-baik saja format untuk konfigurasi dan didukung secara luas--pelaksana teknis isn't pada inti dari masalah ini, pikirku. It's 100% tentang apa yang membuat tugas config file lebih mudah bagi anda.

Saya sudah mulai menggunakan JSON, karena saya bekerja sedikit dengan itu sebagai data transportasi format, dan serializers membuatnya mudah untuk memuat ke dalam kerangka pembangunan. Saya menemukan JSON lebih mudah untuk dibaca daripada XML, yang membuat penanganan beberapa layanan, masing-masing menggunakan file konfigurasi yang dimodifikasi cukup sering, yang banyak easer untuk saya!

Komentar (0)

Sejauh yang saya tahu, Windows registry adalah tidak ada lagi cara yang lebih disukai untuk menyimpan konfigurasi jika anda menggunakan .NET - sebagian besar aplikasi sekarang menggunakan Sistem.Konfigurasi [1, 2]. Karena ini juga berbasis XML tampaknya bahwa segala sesuatu adalah bergerak dalam arah menggunakan XML untuk konfigurasi.

Jika anda ingin tetap cross-platform saya akan mengatakan bahwa menggunakan semacam file teks akan menjadi rute terbaik untuk pergi. Adapun format dari file tersebut, anda mungkin ingin mempertimbangkan jika manusia akan memanipulasi atau tidak. XML tampaknya menjadi sedikit lebih ramah untuk manipulasi manual dari file INI karena terlihat struktur dari file.

Adapun sudut braket pajak - I don't khawatir tentang hal itu terlalu sering karena XML perpustakaan mengurus abstrak itu. Hanya waktu yang bisa menjadi pertimbangan adalah jika anda memiliki ruang penyimpanan yang sangat sedikit untuk bekerja dengan dan setiap bita.

[1] Sistem.Konfigurasi Namespace - http://msdn.microsoft.com/en-us/library/system.configuration.aspx

[2] dengan Menggunakan Aplikasi File Konfigurasi di .NET - http://www.developer.com/net/net/article.php/3396111

Komentar (0)

Kami menggunakan properties file, hanya karena Java mendukung mereka secara native. Beberapa bulan yang lalu saya melihat bahwa SpringSource Platform Aplikasi menggunakan JSON untuk mengkonfigurasi server mereka dan terlihat sangat menarik. Saya dibandingkan berbagai konfigurasi notasi dan datang ke kesimpulan bahwa XML tampaknya menjadi yang paling cocok saat ini. Ini memiliki dukungan alat dan agak platform independen.

Komentar (0)

Re: epatel's komentar

Saya pikir pertanyaan awal bertanya tentang konfigurasi aplikasi yang admin akan lakukan, tidak hanya menyimpan preferensi pengguna. Saran-saran yang anda berikan tampak lebih untuk pengguna prefs dari aplikasi config, dan tidak't biasanya sesuatu bahwa pengguna akan pernah berurusan dengan langsung (aplikasi harus menyediakan pilihan konfigurasi di UI, dan kemudian memperbarui file). Saya benar-benar berharap anda'a tidak pernah membuat pengguna harus melihat/mengedit Registri. :)

Adapun pertanyaan yang sebenarnya, aku'd mengatakan XML adalah mungkin OK, karena banyak orang-orang yang akan digunakan untuk menggunakan untuk konfigurasi. Selama anda mengatur konfigurasi nilai-nilai yang mudah untuk menggunakan cara yang kemudian "angle bracket pajak" tidak't menjadi terlalu buruk.

Komentar (0)

Mungkin sedikit singgung di sini tapi pendapat saya adalah bahwa file konfigurasi yang harus dibaca dalam nilai kunci kamus/tabel hash ketika aplikasi pertama kali dijalankan dan selalu diakses melalui objek ini kemudian dari pada kecepatan. Biasanya kunci/nilai tabel dimulai sebagai string ke string tapi fungsi pembantu di objek melakukan hal-hal seperti DateTime GetConfigDate(string key) dll...

Komentar (0)

Platform apa yang sedang kau kerjakan? I'd sarankan mencoba untuk menggunakan pilihan/metode umum untuk itu.

  1. MacOSX - plists
  2. Win32 - Registry (atau ada yang baru di sini, sejak lama saya kembangkan di atasnya)
  3. Linux/Unix - ~/.apprc (nama-nilai yang mungkin)
Komentar (1)