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
regole/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.