Passa al contenuto principale

Configurazione

Principio

La configurazione dell'applicazione vive nel database. L'unica eccezione è la stringa di connessione al database stesso, che per ovvie ragioni non può starci.

Questo approccio centralizza la configurazione in un posto solo, la rende modificabile a runtime senza rideploy e la mantiene versionabile come qualsiasi altro dato del sistema.

Struttura

Il file appsettings.json contiene il minimo indispensabile per avviare l'applicazione:

{
"ConnectionStrings": {
"Default": "Host=localhost;Database=myapp;Username=myuser;Password=..."
}
}

Nient'altro. Nessun parametro di business, nessuna soglia, nessuna feature flag, nessuna chiave di servizi esterni.

Configurazione nel database

Tutto ciò che l'applicazione deve sapere per funzionare (al di là di come connettersi al database) è una riga o un set di righe nel database. Questo include:

  • parametri di business (soglie, limiti, valori di default)
  • feature flag (vedi tecnologie/git)
  • endpoint e credenziali di servizi esterni
  • qualsiasi impostazione che varia tra ambienti o nel tempo

Il modello di configurazione è parte del dominio a tutti gli effetti: va modellato in EF, versionato con le migration e accessibile tramite il DbContext.

Segreti

La stringa di connessione non va mai committata. In sviluppo si usa dotnet user-secrets o una variabile d'ambiente locale. In staging e produzione si usa una variabile d'ambiente o un secret manager dell'infrastruttura.

# Sviluppo locale
dotnet user-secrets set "ConnectionStrings:Default" "Host=localhost;..."

Il file appsettings.json committato nel repository non contiene valori reali, solo placeholder o valori di sviluppo non sensibili.