Laravel Pennant memorizza e recupera i valori del flag di funzionalità utilizzando un sistema di archiviazione flessibile che supporta due driver principali: un driver per array in memoria e un driver di database persistente.
Meccanismi di stoccaggio:
- Array Driver: questo driver memorizza i valori del flag di funzionalità risolti in un array in memoria. È veloce ma transitorio, il che significa che i valori di flag di funzionalità memorizzati esistono solo durante il ciclo di vita della richiesta corrente e vengono persi in seguito. Ciò è utile per casi d'uso semplici o temporanei in cui non è richiesta la persistenza.
- Driver del database (impostazione predefinita): Pennant può persistere ai valori del flag di funzionalità in un database relazionale, in particolare in una tabella "Feature" creata dall'esecuzione delle migrazioni di Pennant. Questo driver memorizza persistentemente i valori di flag di funzionalità risolti, consentendo di condividere i valori su più richieste e server. È ideale per le applicazioni in esecuzione su più server o ambienti senza server. Il driver di database utilizza anche una cache in memoria durante una singola richiesta per evitare ripetute query di database per lo stesso flag di funzionalità, migliorando le prestazioni [1] [2] [5].
Come vengono definiti e risolti i flag di funzionalità:
- I flag di funzionalità sono definiti utilizzando chiusure che contengono la logica per determinare se una funzione è attiva o meno. Queste chiusure possono accettare parametri come l'utente autenticato, consentendo flag di funzionalità con ambito (ad esempio, consentendo una funzione solo per gli utenti di amministrazione).
- Quando un flag di funzionalità viene controllato per la prima volta per un determinato ambito (come un utente), Pennant esegue la chiusura per risolvere il valore della funzione. Questo valore risolto viene quindi archiviato nel driver di archiviazione configurato (array o database).
- Nei controlli successivi per la stessa funzionalità e portata, Pennant recupera il valore memorizzato dal driver di archiviazione invece di ricalcolarlo, che ottimizza le prestazioni [2] [3].
Recuperando i valori del flag di funzionalità:
-È possibile recuperare il valore di un singolo flag di funzionalità utilizzando metodi come `Feature :: Active ('Feature-Name')` Per verificare se è abilitato (booleano) o `Feature :: Value ('Feature-Name')` per ottenere il suo valore, che può essere booleano o qualsiasi altro tipo di dati (flag di valore ricco).
- Pennant fornisce anche metodi per recuperare più valori di flag di funzionalità contemporaneamente, come `Feature :: Values (['Feature1', 'Feature2'])` o `Feature :: All ()` Per ottenere tutte le funzionalità definite per un determinato ambito.
- Le classi di funzionalità possono essere scoperte e registrate dinamicamente per assicurarsi che siano incluse durante il recupero di tutte le flag di funzionalità [1] [2].
Riepilogo:
Laravel Pennant risolve i valori del flag di funzionalità eseguendo chiusure logiche definite dall'utente e quindi memorizza temporaneamente questi valori risolti in un array in memoria o persistentemente in una tabella di database. Questo meccanismo di archiviazione consente a Pennant di recuperare in modo efficiente gli stati di flag di funzionalità su richieste successive senza ricalcolarsi, supportando casi d'uso sia semplici e complessi, tra cui flag ampliati per utente. L'approccio predefinito e consigliato consiste nell'utilizzare il driver di database per l'archiviazione persistente, in particolare in ambienti multi-server o di produzione, mentre il driver dell'array si adatta a scenari transitori o di test [1] [2] [5].
Citazioni:
[1] https://laravel.com/docs/11.x/pennant
[2] https://www.honeybadger.io/blog/a-guide-to-feature-flags-in-laravel/
[3] https://www.reddit.com/r/laravel/comments/10yto7q/laravel_pennant_simple_and_lightweight_feature/
[4] https://redberry.international/laravel-pennant-feature-flagging-made-easy/
[5] https://wpwebinfotech.com/blog/laravel-pennant-guide/
[6] https://dev.to/saurabh-dhariwal/how-to-manage-fature-flags-with-laravel-pennant-in-2024-1phb
[7] https://stackoverflow.com/questions/77751003/laravel-pennant-store-against-session-for-a-b-test
[8] https://laracasts.com/series/whats-new-in-laravel-10/episodes/5