Panoramica della gestione delle funzionalità

Di norma, per distribuire una nuova funzionalità di un'applicazione, è necessario ridistribuire completamente l'applicazione stessa. Il test di una funzionalità richiede spesso più distribuzioni dell'applicazione. Ogni distribuzione può modificare la funzionalità o esporre la funzionalità a clienti diversi per i test.

La gestione delle funzionalità è una moderna procedura di sviluppo di software che separa il rilascio di una funzionalità dalla distribuzione del codice e consente di modificare rapidamente la disponibilità on demand. Usa una tecnica denominata flag di funzionalità (noti anche come interruttori di funzionalità e opzioni di funzionalità) per amministrare dinamicamente il ciclo di vita di una funzionalità.

La gestione delle funzionalità consente agli sviluppatori di risolvere i problemi seguenti:

  • Gestione dei rami di codice: usare i flag di funzionalità per eseguire il wrapping delle nuove funzionalità dell'applicazione attualmente in fase di sviluppo. Tali funzionalità sono "nascoste" per impostazione predefinita. È possibile distribuirle senza problemi, anche se non completate, perché rimarranno inattive nell'ambiente di produzione. Con questo approccio, chiamato dark deployment, è possibile rilasciare tutto il codice alla fine di ogni ciclo di sviluppo. Non è più necessario gestire rami di codice in più cicli di sviluppo perché per completare una determinata funzionalità è necessario più di un ciclo.
  • Test in produzione: usare i flag di funzionalità per concedere l'accesso anticipato alle nuove funzionalità nell'ambiente di produzione. Ad esempio, è possibile limitare l'accesso ai membri del team o ai tester beta interni. Questi utenti sperimenteranno l'esperienza di produzione con massima fedeltà anziché un'esperienza simulata o parziale in un ambiente di test.
  • Anteprima: usare i flag di funzionalità per implementare in modo incrementale nuove funzionalità agli utenti finali. È possibile impostare come destinazione prima una piccola percentuale della popolazione di utenti e aumentare tale percentuale gradualmente nel tempo.
  • Interruttore di terminazione immediata: i flag di funzionalità forniscono una rete di sicurezza intrinseca per il rilascio di nuove funzionalità. È possibile attivare e disattivare le funzionalità dell'applicazione senza ridistribuire codice. Se necessario, è possibile disabilitare rapidamente una funzionalità senza ricompilare e ridistribuire l'applicazione.
  • Attivazione selettiva: usare i flag di funzionalità per segmentare gli utenti e distribuire un set specifico di funzionalità a ogni gruppo. Potrebbe essere disponibile una funzionalità che funziona solo in un determinato Web browser. È possibile definire un flag in modo che solo gli utenti di tale browser possano visualizzare e usare la funzionalità. Usando questo approccio, è possibile espandere facilmente l'elenco di browser supportato in un secondo momento senza dover apportare modifiche al codice.

Concetti fondamentali

Ecco alcuni nuovi termini relativi alla gestione delle funzionalità:

  • Flag di funzionalità: è una variabile con uno stato binario on oppure off. Ha anche un blocco di codice associato. Lo stato del flag di funzionalità viene attivato se il blocco di codice viene eseguito.
  • Gestione funzionalità: un gestore funzionalità è un pacchetto di applicazioni che gestisce il ciclo di vita di tutti i flag di funzionalità in un'applicazione. Gestione funzionalità offre anche funzionalità aggiuntive, inclusi i flag di funzionalità di memorizzazione nella cache e l'aggiornamento dei relativi stati.
  • Filtro: è una regola per valutare lo stato di un flag di funzionalità. I potenziali filtri includono gruppi di utenti, tipi di dispositivo o browser, posizioni geografiche e finestre temporali.

Un'implementazione efficace della gestione funzionalità prevede almeno due componenti che operano congiuntamente:

  • Un'applicazione che usa i flag di funzionalità.
  • Un repository separato che archivia i flag di funzionalità con gli stati correnti.

Uso dei flag di funzionalità nel codice

Il modello di base per l'implementazione dei flag di funzionalità in un'applicazione è semplice. Un flag di funzionalità è una variabile di stato booleana che controlla un'istruzione condizionale nel codice:

if (featureFlag) {
    // Run the following code
}

È possibile impostare il valore di featureFlag in modo statico:

bool featureFlag = true;

È possibile valutare lo stato del flag in base a determinate regole:

bool featureFlag = isBetaUser();

È possibile estendere il comportamento condizionale per impostare il comportamento dell'applicazione per uno stato:

if (featureFlag) {
    // This following code will run if the featureFlag value is true
} else {
    // This following code will run if the featureFlag value is false
}

Repository di flag funzionalità

Per usare i flag di funzionalità in modo efficace, è necessario esternalizzare tutti i flag di funzionalità usati in un'applicazione. È possibile usare questo approccio per modificare gli stati dei flag di funzionalità senza modificare e ridistribuire l'applicazione stessa.

Configurazione app di Azure fornisce un repository centralizzato per i flag di funzionalità. È possibile usarlo per definire diversi tipi di flag di funzionalità e modificarne gli stati rapidamente e in tutta sicurezza. È quindi possibile usare le librerie di Configurazione app per diversi framework di linguaggi di programmazione per accedere con facilità a questi flag di funzionalità dall'applicazione.

I flag di funzionalità in un'app ASP.NET Core illustrano come vengono usate insieme il provider di Configurazione app .NET Core e le librerie di gestione delle funzionalità per implementare i flag di funzionalità per l'applicazione Web ASP.NET. Per altre informazioni sui flag di funzionalità in Configurazione app di Azure, vedere gli articoli seguenti:

Passaggi successivi