Nota: Quello che segue è una riflessione sull’architettura delle applicazioni Java Enterpise ed è frutto dei miei anni di esperienza nel settore. Non deve essere considerato didattico ma spero possa comunque essere utile a qualcuno nella compresione di questo bellissimo mondo! 😉
Moltissime (se non tutte) le moderne applicazioni sono costruite con paradigmi noti e ben strutturati, frutto di anni di sperimentazioni, esperienza e intuito. Uno dei più famosi (e antico!) è il divide et impera, noto già agli antichi romani per governare il popolo e l’impero. 😉
Ebbene, una strategia simile a quella degli antichi conquistatori viene oggi applicata alla costruzione di applicazioni software: le applicazioni vengono scomposte in diversi strati o moduli comunicanti ma indipendenti, ciascuno con le proprie competenze. Questo serve a rendere l’architettura generale più snella, comprensibile e il software più manutenibile.
Fra i tanti strati in cui un’applicazione può essere scomposta ne riconosciamo 4 fondamentali (vari ed eventuali possono essere aggiunti secondo le necessità). Esse sono: Presentazione, Logica, Accesso ai Dati, Modelli. In sintesi:
Queste 4 parti non sono sempre visibili e chiare, ma se osservate un software con attenzione potrete sempre riconoscerle. Può sembrare secondario, invece è molto importante che queste 4 parti siano il più possibile indipendenti l’una dall’altra in modo da poter essere sostituite o modificate senza intaccare l’intera applicazione.
La parte di Presentazione, per esempio, è quella che cambia più spesso. Negli ultimi 20 anni abbiamo assistito prima ad applicazioni installate sui nostri computer, poi sul web ed infine sugli smartphone, senza però che il cuore dell’applicazione cambiasse notevolmente. Si pensi alla suite Microsoft Office o a moltissimi giochi passati dalla versione arcade allo smartphone (pac-man, tetris…), tanto per fare esempi alla portata di tutti.
Questo modello in un certo senso si affianca ed estende, se me lo permettete, il classico paradigma MVC, che dovrebbe essere già noto ai lettori. Vediamo nel dettaglio le 4 parti:
- Presentazione: è lo strato che si occupa di presentare i dati all’utente. Possono essere le pagine html di un sito web o la l’interfaccia grafica di un’applicazione stand-alone. Di solito è materia per grafici più che per sviluppatori e soprattutto questo livello non dovrebbe contenere alcuna logica! Nel classico paradigma MVC questo è il livello della View.
- Logica: Questo è lo strato preposto all’elaborazione particolare dei dati che l’applicazione svolge. In altri termini è il core-business. E’ qui che dovrebbero finire gli speciali algoritmi che rendono un’applicazione unica!
- Accesso ai dati: Il 99,9% delle applicazioni esistenti si appoggia su un qualche tipo di database o di altra “persistenza” dei dati. Può capitare che si usino database non-relazionali (oggi molto in voga) o un semplice accesso a file o alla rete, ma ogni applicazione si trova a dover fare i conti con la memoria a lungo termine, quindi alla necessità di salvare delle informazioni e di poterle rileggere o interrogare. Questo è uno strato che deve rimanere indipendente, poiché cambia nel tempo (anche se con minor frequenza della Presentazione): si potrebbe passare per esempio da un database ad un altro, o ancora ad un accesso alla rete con persistenza dei dati remota.
- Modelli: i Modelli sono la chiave per “disaccoppiare”, come si dice in gergo, le diverse parti. Essi rappresentano il “dominio di conoscenza” di un’applicazione e sono il più possibile semplici ed astratti. Vengono usati dalla Logica, dai Dati e dalla Presentazione per rappresentare degli stati e scambiarsi dati internamente. In altri termini: la Presentazione mostra dei Modelli all’utente, i Dati salvano/leggono lo stato dei Modelli nel tempo, la Logica manipola i Modelli per portarli da uno stato ad un altro.
Se, per esempio, la vostra applicazione si occupasse di gestire le prenotazioni su un sito di un tour-operator, i vostri Modelli potrebbero essere: Viaggio, Prenotazione, Cliente, Destinazione, Biglietto, Prezzo, Sconto, Promozione, ecc.. La Logica manipolerebbe i dati calcolando l’importo di Biglietti in Prezzi per determinate Destinazioni… (anche la Logica cambia! Pensate a quanto spesso cambia la politica di sconti e promozioni in un negozio…!!) informazioni rese accessibili dal livello Data e rese accessibili all’utente dallo strato della Presentazione che mostrerà, per esempio, maschere da cui prenotare Viaggi, modificare Prezzi, Biglietti, creare nuovi Sconti, Promozioni e quant’altro.
Nell’ambito J2EE le 4 parti possono essere riassunte come segue:
N.B. ho aggiunto al disegno il componente JMS, anche se non ne ho parlato mai in questo blog.