Ana içeriğe geç

Dynamic Configuration: Kötü ve İdeal Kullanım

Dynamic configuration, uygulamanızın yapılandırma ayarlarını çalışma zamanında değiştirme yeteneği sağlar. Yanlış kullanılan dinamik yapılandırmalar, veri tutarsızlıklarına ve beklenmedik davranışlara yol açabilir.


1. Sabit Kodlanmış Yapılandırmalar

Yanlış Kullanım: Yapılandırmaları sabit kodlamak.

public class AppConfig
{
    public const string ConnectionString = "Server=localhost;Database=MyApp;User=admin;Password=1234;";
}

İdeal Kullanım: Yapılandırmaları bir dosya veya çevresel değişkenlerde tutarak dinamik hale getirin.

appsettings.json:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Database=MyApp;User=admin;Password=1234;"
  }
}

Kullanım:

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");


2. Hassas Bilgileri Güvenli Bir Şekilde Yönetmemek

Yanlış Kullanım: Hassas bilgileri yapılandırma dosyalarında düz metin olarak saklamak.

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Database=MyApp;User=admin;Password=1234;"
  }
}

İdeal Kullanım: Hassas bilgileri güvenli bir şekilde yönetmek için bir secret management aracı kullanın.

HashiCorp Vault Kullanımı:

builder.Configuration.AddVault(options =>
{
    options.Address = "https://vault.example.com";
    options.Token = Environment.GetEnvironmentVariable("VAULT_TOKEN");
});

Azure Key Vault Kullanımı:

builder.Configuration.AddAzureKeyVault(
    new Uri("https://mykeyvault.vault.azure.net/"),
    new DefaultAzureCredential()
);

3. Dinamik Yapılandırmayı İzlememek

Yanlış Kullanım: Yapılandırma değişikliklerini izlememek.

İdeal Kullanım: Dinamik yapılandırma değişikliklerini izlemek için yapılandırma sağlayıcılarını kullanın.

Azure App Configuration Örneği:

builder.Configuration.AddAzureAppConfiguration(options =>
{
    options.Connect("ConnectionString")
           .ConfigureRefresh(refresh =>
           {
               refresh.Register("AppSettings:Sentinel", refreshAll: true);
           });
});


4. Performans Üzerindeki Etkileri Göz Ardı Etmek

Yanlış Kullanım: Yapılandırmaların sürekli olarak okunması.

var setting = builder.Configuration["AppSettings:SettingKey"]; // Sürekli çağrılar

İdeal Kullanım: Yapılandırmaları bir cache mekanizması ile optimize edin.

public class MyService
{
    private readonly IConfiguration _configuration;
    private string _cachedSetting;

    public MyService(IConfiguration configuration)
    {
        _configuration = configuration;
        _cachedSetting = _configuration["AppSettings:SettingKey"];
    }
}