Yapılandırmayı korumak için Sabitler ve Yapılandırma Dosyaları ne zaman kullanılır?


20

Sık sık kendimi web.config dosyama veya bir Constants.cs sınıfına veya bunun gibi bir şeye belirli anahtarlar koyup koymama konusunda savaşırım.

Örneğin, durum ne olursa olsun uygulamaya özel anahtarları saklamak istersem ... Saklayabilir ve özel anahtarlar aracılığıyla web yapılandırmamdan alabilir veya sabitler sınıfımdaki bir sabite başvurarak tüketebilirim.

Sabitleri yapılandırma anahtarları üzerinde ne zaman kullanmak istersiniz?

Bu soru bence herhangi bir dil için gerçekten geçerli.

Yanıtlar:


20

Şahsen sabitleri yalnızca varsayılan değerler olarak kullanır ve bunların bir yapılandırma dosyasındaki değerlerle geçersiz kılınmasına izin veririm.

Uygulama komut satırı bağımsız değişkenleri alırsa, bunlar yapılandırma dosyası parametrelerini geçersiz kılar.


3

Yapılandırma dosyasındaki değerin korunması sabitler sınıfındaki değerden daha zordur, çünkü derleyici varlığını denetlemediğinden ve doğru türde olduğundan, IDE genellikle kod yardımı sağlamaz ve aynı zamanda geçiş yapmanız gereken başka bir sözdizimi olduğundan programlama sırasında.

Bu yüzden şunu koymanızı öneririm:

  • Tüm kurulumlarda kod sabitleri ile aynı olacak değerler. Bunları bir sabit sınıfına koymanın (nasıl çalıştıklarını görmek için çeşitli değerleri kolayca deneyebilirsiniz) ve bunları kullanan modüle yerleştirmenin bazı avantajları vardır (bu modülü değiştirirken başka bir dosya açmanız gerekmez ve herkesin düzenleyeceği bir dosyadan kaçınarak sürüm kontrolünde çakışmalara neden olabilir).
  • Yapılandırma dosyası için kurulum başına değiştirilmesi gereken () değerler. Ve muhtemelen koda varsayılan olarak koymak istersiniz, bu nedenle değer config içinde ayarlanmamışsa, uygulama yine de (bir şekilde) çalışır.

ne demek istiyorsun doğru tip ... yapılandırma tuşları ... bu xml ...
WeDoTDD.com

@CoffeeAddict: Doğru tür, bir sayı gerektiren seçeneğiniz varsa ve yapılandırma dosyanızın yerinde sayısal olmayan bir dize varsa, çalışma zamanına kadar bulamayacağınız anlamına gelir. XML öğesi yolunda XML olması durumunda, yapılandırma dosyasından değeri almak için kullandığınız "yapılandırma anahtarı" dır. Tamam, bir şemaya ve ilgili sınıfa sahip olabilirsiniz ( xsddiğerinden birini oluşturmak için bir araç vardır ) ve yapılandırmayı XMLSerializer(zaten C #'da XML'yi işlemenin en mantıklı yolu) kullanabilirsiniz, böylece önceden doğrulayabilirsiniz, ancak yine de ekstra iş.
Jan Hudec

Katılmıyorum: "Yapılandırma dosyasındaki değeri korumak sabitler sınıfındaki değerden daha zordur" - yapılandırmanızı nasıl kodladığınıza ve bu yapılandırılabilir öğelerin kaç tanesine sahip olduğunuza bağlıdır: Kendinizi Tekrar Etmeyin!
Mühendis

3

Sabitlerin Değişmesi , çoğu durumda uygulamanın yeniden oluşturulmasını gerektirir. Başka bir deyişle, birisinin koda erişimi olmadığında sabitler sabit olarak kalır.

Bu nedenle, son kullanıcının sağlaması gereken (ve değiştirilmesi gereken) bilgiler yapılandırma dosyalarına gitmelidir. Diğerlerinin çoğunun sabitlerin altına girmesi gerekir. Ancak, yapılandırma dosyaları bozulursa, meşru varsayılanlar veya hata istisnası işleme gerekir.

Nesnenin soyutlamasının bir parçası olmayan elemanlar (örneğin, harici (çağıran) nesneler tarafından değiştirilmesi amaçlanmayan sabitler büyük olasılıkla gizlenirse ve esas olarak özel sabitler olarak yapılandırma dosyalarından daha iyi olacakları anlamına gelir.

Birbiriyle ilişkili olmayan farklı nesnelerle ilgili birçok yapılandırma öğesi olduğunda ve çok sayıda nesnenin yapılandırma dosyalarını (aynı veya kendi) çıkarması gerektiğinde, bunların sabit olması gerekir.


1

Basit bir kural, değişmeye gerek kalmadan belirli bir bağlam için uygulanabileceğini bildiğiniz sabit bir değer kümesiyle çalışacağınızı bildiğinizde sabitler oluşturmaktır; diğer her şey için harici yapılandırmalar sağlar.

Sabitlere iyi bir örnek, üzerinde çalıştığınız tüm şekillerin SQUAREveya olabilmesi olabilir ROUND. Çoğu dilde, bu değerin zaman içinde değişmediği gerçeğinden, yalnızca bir kez tahsis ederek ve nasıl erişildiğini optimize ederek yararlanabilirsiniz.

Harici konfigürasyonlar, değeri dinamik olarak almanız gerektiğinde gereklidir, çünkü birlikte çalışacağınız değeri önceden tahmin edemezsiniz, ancak bu herhangi bir performans ödünleşmesi yapmanız gerektiği anlamına gelmez: olmasını beklediğiniz yapılandırma değerleri için mevcut, doğru yapıldığında, sadece bir kez almanın bedelini ödersiniz ve yine de tüm faydaları elde edersiniz.



0

Tanıma göre sabit, değişmemesi gereken bir değerin (PI gibi) bir bellek konumudur.

Sanırım sabit değil, 'parametre' demek istediniz

Söylenenlere ek olarak, değişkenleri yapılandırma dosyasından kullanıcı girişine maruz bırakmanın uygulamaya zarar verebileceğini unutmayın.

Mümkün olduğunda, bir sağlık kontrolü için kodda doğrulamadan değerleri yapılandırma dosyasında göstermeyin. Ayrıca, yapılandırma dosyalarına iş kuralları parametrelerini (maks. Maaş, vb.) Koymamanızı ve bunlar için sabitler kullanmamanızı öneririm. Bu tür değerler, değiştirildiklerinde bazı güvenliklerin uygulanabilmesi ve veri değerlerinin sürümlerini (depolanan procs veya db günlüklerini kullanarak) otomatik olarak oluşturabilmeniz için uygun tablo tanımlarıyla veritabanında depolanmalıdır. Tabii ki bu, uygulamanızın ne kadar hassas olduğuna bağlıdır.

Verileri depolamak için yapılandırma dosyaları kullanırsanız, bunları sürümlendirdiğinizden emin olun.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.