I singleton sono una delle caratteristiche principali di 4D 20 R5. In precedenza, gli sviluppatori potevano sfruttare due tipi di singleton:
- il singleton di processo, che è unico per ogni processo ma diverso tra i vari processi,
- e il singleton condiviso, che è unico per l’intera applicazione.
Con 4D 20 R7, stiamo rilasciando un nuovo tipo di singleton: il singleton di sessione!
Cosa sono i singleton di sessione?
I singleton di sessione sono condivisi all’interno di un’intera sessione, ma variano tra le sessioni. Sono particolarmente utili negli ambienti Web, dove le richieste di un utente vengono gestite ogni volta da processi diversi. Negli ambienti client-server, i singleton di sessione semplificano la creazione di un singleton per utente sul server, eliminando i dubbi su quale processo lo stia utilizzando.
Le sessioni in 4D
In 4D esistono 4 tipi di sessioni:
- Lesessioni client-server vengono create sul server 4D ogni volta che un nuovo utente si connette con un telecomando 4D.
- Lesessioni Web, create dal server Web per gestire le richieste HTTP dell’utente, sono disponibili solo se sono state attivate le sessioni scalabili.
- Sessioni REST, create dal server REST per gestire le richieste REST di un utente.
- La sessione di stored procedure è una sessione del server 4D che gestisce l’esecuzione di tutte le stored procedure.
Un quinto caso limite si verifica quando non esiste alcuna sessione. Si verifica solo se si esegue 4D Mono e si esegue codice al di fuori di qualsiasi richiesta web/REST.
Un caso d’uso classico: l’inventario degli oggetti
I singleton di sessione brillano in casi d’uso come i carrelli della spesa, gli elenchi di elementi: l’inventario degli articoli. Ad esempio, si consideri un inventario di oggetti in cui l’inventario di ogni utente è unico:
//class ItemInventory
property itemList : Collection:=[]
session singleton Class constructor()
shared function addItem($item:object)
This.itemList.push($item)
Definendo la classe ItemInventory come singleton di sessione, ogni sessione, e quindi ogni utente, ha il proprio ItemInventory. Accedere all’ItemInventory dell’utente è semplice come con qualsiasi altro tipo di singleton:
$myItemInventory:=cs.ItemInventory.me
Questo restituirà l’ItemInventory della sessione corrente da qualsiasi punto dell’applicazione. La modifica di questo ItemInventory, ad esempio aggiungendo o rimuovendo oggetti, modificherà solo l’inventariodella sessione corrente equindi dell’utente corrente.
Considerazioni chiave per i singleton di sessione
Classi condivise:
La cosa più importante da capire è che le singleton di sessione sono classi condivise, in quanto utilizzate da più processi.
Sessioni condivise:
Ultimo ma non meno importante: Se si riutilizza lo stesso cookie per una connessione web e per una connessione REST, si accederà alla stessa sessione (che passerà da una sessione web a una sessione REST) e quindi allo stesso singleton di sessione.
Conclusione
In sintesi, i singleton di sessione forniscono un modo semplice ed efficiente per gestire i dati specifici dell’utente in diverse sessioni in 4D. Questa nuova funzionalità offre una soluzione semplice e scalabile per costruire applicazioni organizzate che gestiscono in modo efficiente i dati tra le sessioni.
Se avete domande o bisogno di assistenza, non esitate a partecipare alla discussione sul forum di 4D.