← Барлық мақалаларға оралу

.NET-та proactive configuration validation: қателерді алдын ала болдырмау

Жарияланды

Robust .NET applications жасағанда жақсы practices-тің бірі - configuration-ды startup кезінде validate ету. Бұл critical parameters, мысалы feature flags, appsettings.json ішінен жоғалып кеткен жағдайларды болдырмауға көмектеседі: merge conflict немесе accidental deletion кейін.

Егер value жоқ болса, app бәрібір start жасап, silently defaults қолдануы мүмкін, мысалы bool үшін false. Hidden әрі hard-to-trace production bugs осылай пайда болады. Оның орнына fail-fast approach таңдаған дұрыс: configuration invalid болса, app start жасаудан бас тартуы керек.

Problem example

{
  "FeatureManagement": {
    //"NewDashboard": true  // Missing parameter will default to false
  }
}

Бұл жағдайда app NewDashboard = false болып start жасайды, тіпті сіз true күткен болсаңыз да.

1-қадам - Configuration class анықтау

Configuration section көрсететін class жасаңыз, мысалы FeaturesConfig.

public class FeaturesConfig
{
    public bool NewDashboard { get; set; }
}

Мұның өзі жеткіліксіз, өйткені key жоқ кезде NewDashboard default false болады.

2-қадам - Validation attributes қосу

Required fields белгілеу үшін standard DataAnnotations қолданыңыз. Binder “missing” және “false” мәндерін ажырата алуы үшін property nullable болсын.

using System.ComponentModel.DataAnnotations;

public class FeaturesConfig
{
    [Required]
    public bool? NewDashboard { get; set; }
}

3-қадам - Startup кезінде validation қосу

Program.cs ішінде options тіркегенде .ValidateDataAnnotations() және .ValidateOnStart() қосыңыз.

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddOptions<FeaturesConfig>()
    .Bind(builder.Configuration.GetSection(nameof(FeaturesConfig)))
    .ValidateDataAnnotations()
    .ValidateOnStart();

var app = builder.Build();
app.Run();

Ескерту: .ValidateOnStart() .NET 6 ішінде енгізілді. Ол app startup кезінде options validate етеді және required fields жоқ болса, OptionsValidationException тастайды.

Бұл configuration problem-ді бірден көрсетіп, system-ді production ішіндегі unpredictable behavior-дан қорғайды.

image

Бұл simple mechanism stable және predictable applications жасау жолындағы маңызды қадам.