Kapan menggunakan Konstanta vs. File Konfigurasi untuk memelihara Konfigurasi

20

Saya sering bertengkar dengan diri saya sendiri apakah akan meletakkan kunci tertentu di web.config saya atau di kelas Constants.cs atau sesuatu seperti ini.

Sebagai contoh jika saya ingin menyimpan kunci khusus aplikasi untuk kasus apa pun mungkin .. Saya bisa menyimpannya dan mengambilnya dari konfigurasi web saya melalui kunci kustom atau mengkonsumsinya dengan referensi konstanta di kelas konstanta saya.

Kapan Anda ingin menggunakan Konstanta di atas kunci konfigurasi?

Pertanyaan ini benar-benar berlaku untuk bahasa apa pun yang saya pikir.

WeDoTDD.com
sumber

Jawaban:

20

Secara pribadi saya hanya akan menggunakan konstanta sebagai nilai default, dan membiarkan mereka ditimpa oleh nilai-nilai dari file konfigurasi.

Jika aplikasi mengambil argumen baris perintah, maka itu pada gilirannya akan menimpa parameter file konfigurasi.

Beberapa programmer Bung
sumber
3

Nilai dalam file konfigurasi lebih sulit untuk dipertahankan daripada nilai di kelas konstanta, karena kompiler tidak memeriksanya ada dan memiliki tipe yang benar, IDE biasanya tidak memberikan bantuan kode untuk itu dan juga karena itu adalah sintaks lain yang harus Anda alihkan ke saat pemrograman.

Jadi saya sarankan menempatkan:

  • Nilai yang akan sama di semua instalasi sebagai konstanta dalam kode. Ada beberapa keuntungan untuk menempatkan mereka dalam satu kelas konstanta (Anda dapat dengan mudah mencoba berbagai nilai untuk melihat bagaimana mereka bekerja) dan menempatkannya dalam modul yang menggunakannya (Anda tidak perlu membuka file lain saat memodifikasi modul itu dan menghindari satu file yang semua orang akan edit menyebabkan konflik dalam kontrol versi).
  • Nilai yang (mungkin) perlu diubah per instalasi untuk mengonfigurasi file. Dan Anda mungkin ingin tetap menempatkan default dalam kode, jadi jika nilainya tidak diatur dalam konfigurasi, aplikasi masih (entah bagaimana) berfungsi.
Jan Hudec
sumber
apa maksudmu ketik yang benar ... kunci konfigurasi ... ini xml ...
WeDoTDD.com
@CoffeeAddict: Jenis yang benar berarti, bahwa jika Anda memiliki opsi yang memerlukan nomor dan file konfigurasi Anda memiliki string non-numerik di tempat itu, Anda tidak akan menemukan sampai runtime. Dan "kunci config" adalah apa pun yang Anda gunakan untuk mengambil nilai dari file config, jika XML elemen path. Oke, Anda dapat memiliki skema dan kelas yang sesuai (ada xsdalat untuk menghasilkan satu dari yang lain) dan menggunakan konfigurasi dengan XMLSerializer(cara yang paling masuk akal untuk menangani XML di C #), sehingga Anda dapat memvalidasi di muka, tetapi masih ada beberapa tambahan kerja.
Jan Hudec
Disagree: "Nilai dalam file konfigurasi lebih sulit dipertahankan daripada nilai di kelas konstanta" - tergantung pada cara Anda membuat kode konfigurasi dan berapa banyak item yang dapat dikonfigurasi yang Anda miliki: Jangan Ulangi Diri Anda!
Insinyur
3

Mengubah Konstanta memerlukan membangun kembali aplikasi sebagian besar kasus. Dengan kata lain, konstanta tetap konstan ketika seseorang tidak memiliki akses ke kode.

Jadi setiap informasi yang harus disediakan pengguna akhir (dan perlu diubah) harus masuk dalam file konfigurasi. Kebanyakan yang lain harus berada di bawah konstanta. Namun, harus ada penanganan default atau kesalahan yang sah jika file konfigurasi rusak.

Elemen yang bukan bagian dari abstraksi objek (yaitu jika konstanta yang tidak dimaksudkan untuk dimodifikasi oleh objek eksternal (memanggil) cenderung disembunyikan dan pada dasarnya berarti mereka akan lebih baik sebagai konstanta pribadi daripada file konfigurasi.

Ketika ada banyak elemen konfigurasi yang berkaitan dengan objek yang berbeda, tidak terkait satu sama lain, dan ketika begitu banyak objek perlu mengeluarkan file konfigurasi (sama atau sendiri), kemungkinan hal-hal ini seharusnya adalah konstanta.

Dipan Mehta
sumber
1

Aturan praktis yang sederhana adalah membuat konstanta ketika Anda tahu Anda akan bekerja dengan seperangkat nilai-nilai tetap yang Anda tahu dapat diterapkan untuk konteks tertentu tanpa perlu mengubah; menyediakan konfigurasi eksternal untuk yang lainnya.

Contoh konstanta yang baik adalah jika semua bentuk yang Anda kerjakan dapat berupa SQUAREatau ROUND. Dalam sebagian besar bahasa, Anda akan dapat memanfaatkan fakta bahwa nilai ini tidak berubah seiring waktu, dengan mengalokasikannya hanya sekali dan mengoptimalkan cara mengaksesnya.

Konfigurasi eksternal diperlukan ketika Anda harus mengambil nilai secara dinamis karena Anda tidak dapat mengasumsikan sebelumnya nilai yang akan Anda kerjakan, tetapi itu tidak berarti Anda harus melakukan tradeoff kinerja: untuk nilai konfigurasi yang Anda harapkan hadir, ketika dilakukan dengan benar, Anda hanya membayar harga pengambilan mereka sekali dan masih mendapatkan semua manfaatnya.

Filip Dupanović
sumber
0

Konstanta menurut definisi adalah lokasi memori untuk nilai yang tidak boleh berubah (seperti PI).

Saya berasumsi Anda berarti 'parameter' dan bukan konstanta

Selain apa yang telah dikatakan, perhatikan bahwa mengekspos variabel ke input pengguna dari file konfigurasi dapat membahayakan aplikasi.

Jika memungkinkan, jangan memaparkan nilai dalam file konfigurasi tanpa memvalidasi mereka dalam kode untuk melakukan pemeriksaan kewarasan. Juga, saya sarankan Anda tidak menempatkan parameter aturan bisnis (seperti gaji maksimum, dll.) Dalam file konfigurasi dan jangan gunakan konstanta untuk itu juga. Nilai-nilai tersebut harus disimpan dalam database dengan definisi tabel yang sesuai sehingga beberapa keamanan ditegakkan ketika mereka diubah dan Anda dapat secara otomatis membuat versi nilai data (menggunakan procs yang disimpan atau log db). Tentu saja, ini tergantung pada seberapa sensitif aplikasi Anda.

Jika Anda pernah menggunakan file konfigurasi untuk menyimpan data, pastikan Anda membuat versinya.

Tidak ada kesempatan
sumber