Scegli il tuo software: le transazioni
PADOVA – Supponiamo di gestire un’azienda che produce penne e di voler permettere ai nostri clienti di ordinare le penne dal nostro sito web; a tal fine chiediamo a qualcuno di realizzare una pagina web dove i nostri clienti potranno inserire un ordine.
La cosa sembra a prima vista semplice e lineare: basta un modello da compilare con i dati del cliente e l’elenco degli articoli da ordinare. Chiaramente per questo tipo di funzionalità ci basterebbe dire ai nostri clienti di spedirci una mail contenente i loro ordini ed il gioco sarebbe fatto!
Se però volessimo cominciare ad offrire ai nostri clienti un po’ di supporto in più durante la compilazione dell’ordine le cose comincierebbero a farsi più interessanti. Per esempio potremmo volere che l’applicazione comunichi al nostro cliente se la merce da lui ordinata è disponibile a magazzino oppure no e magari vorremmo anche dare la possibilità di effettuare pagamenti on-line con carta di credito.
In questo caso il ‘click’ con cui il cliente conferma l’ordine scatena una serie non indifferente di operazioni:
- Ovviamente i dati dell’ ordine devono essere salvati da qualche parte;
- Viene verificato se a magazzino abbiamo la merce ordinata;
- Viene verificato l’ importo e il pagamento con carta di credito;
- Viene confermato l’ordine e scaricato il magazzino.
Tutto molto semplice (in realtà ognuno degli step precedenti potrebbe essere a sua volta suddiviso in parecchi altri step più specifici), ma ognuna delle precedenti operazioni richiede un tempo non nullo per essere effettuata e, nel momento in cui altri utenti sono collegati contemporaneamente al nostro sito per effettuare la stessa operazione potrebbero sorgere i primi problemi.
Facciamo finta che il cliente ‘Pippo’ stia ordinando 200 penne nere e 400 penne rosse e che contestualmente il cliente ‘Paperino’ ordini 150 penne nere e 300 penne rosse; inoltre nel nostro magazzino sono presenti, prima dei due ordini, 500 penne nere e 500 penne rosse e ne verranno prodotte altre solamente il mese prossimo.
‘Pippo’, che risiede nella città di Topolinia effettua un click sulla conferma d’ordine e scatena le operazioni di cui sopra. Nella fase 2 il sistema verifica che l’ ordine può essere evaso e procede a collegarsi con l’ ente che gestisce le carte di credito per verificare la validità del pagamento.
Durante questa operazione ‘Paperino’, che risiede nella città di Paperopoli effettua un click sulla conferma d’ordine e il sistema verifica che l’ ordine può essere evaso in quanto il magazzino non è ancora stato scaricato del quantitativo di penne ordinate da ‘Pippo’, per poi procedere con il resto della procedura.
Alla fine ci ritroviamo ad aver venduto 200 penne rosse in più di quelle che avevamo, in magazzino ci ritroviamo quindi con -200 penne rosse e, quando uno dei 2 clienti si vedrà recapitare meno penne di quelle pagate avremo anche un po’ di grattacapi in più. Cosa che il sistema informatizzato degli ordini avrebbe dovuto evitarci.
Proprio per ovviare a quanto esposto bisognerebbe che le operazioni venissero effettuate, come si dice in gergo, ‘sotto transazione’ ovvero qualsiasi richiesta verso il magazzino effettuata mentre si sta compiendo un’ altra operazione sul magazzino stesso dovrebbe essere messa in attesa fino al completamento delle operazioni precedenti.
In questo caso l’ operazione effettuata da ‘Paperino’, essendo successiva a quella effettuata da ‘Pippo’ sarebbe rimasta in attesa del completamento di quest’ultima e il nostro sito avrebbe potuto dire a ‘Paperino’ che al momento non ci sono sufficienti penne rosse per evadere il suo ordine.
La maggior parte dei DataBase utilizzati per i siti web ha,per nostra fortuna, al suo interno un meccanismo di gestione delle transazioni. Ma gestirle in modo corretto (al di là di casi totalmente banali come quelli che si usano negli esempi) da parte di chi realizza un’ applicativo non è sempre facile. Inoltre, nel caso sia utilizzato un DataBase che non dispone del meccanismo di gestione delle transazioni dovrebbe essere cura di chi realizza l’ applicazione gestirle autonomamente all’ interno dell’ applicazione stessa, cosa ancora meno facile.
Qualcuno potrebbe anche tirare in ballo argomentazioni del tipo: ‘è quasi impossibile che capiti che 2 o più utenti facciano click nello stesso momento’. In effetti è un caso abbastanza raro, ma se non viene gestito opportunamente rischia di mettere in crisi applicazioni che altrimenti potrebbero funzionare perfettamente senza darci alcun grattacapo e dovrebbe essere compito proprio degli sviluppatori prevedere e prevenire queste situazioni.
In conclusione un’ ottima domanda da fare al nostro sviluppatore di fiducia, prima di assegnare un lavoro potrebbe essere: ‘come si intendono gestire le transazioni?’. Tra l’ altro da questa domanda potrebbe scaturire un’ interessante discussione sull’ analisi dei processi da implementare nella nostra applicazione, utile tanto a noi quanto allo sviluppatore stesso.
Stefano Padovan