• Non ci sono risultati.

Defi ia o a hitettu a di u soft a e l’o ga izzazio e asila e di u siste a, il uale app ese tato dalle sue o po e ti, dalle elazio i he esisto o t a di lo o e l’a ie te circostante, e dai principi che governano la sua progettazione ed evoluzione.

T a le olte p o le ati he da aff o ta e, ello s iluppo dell’a hitettu a di u ’appli azio e, le più importanti sono:

 La st atifi azio e dell’appli azio e, io la suddi isio e delle fu zio alità i a ee indipendenti e intercomunicanti tramite interfacce;

61  La persistenza degli oggetti attraverso un database;

 La gestione dello stato delle sessioni in un ambiente stateless;  La st uttu azio e dell’i te fa ia ute te;

 I principi di distribuzione;

Si devono inoltre considerare problemi riguardanti la validazione dei dati, la tipologia di comunicazione sincrona/asincrona, la gestione dei dati di interscambio, la sicurezza, la gestione di e o i/e ezio i, la suddi isio e dei dati e l’i teg azio e o appli ativi esterni.

4.1.1 Architetture multi-livello

La stratificazione è una tecniche basata sulla filosofia divide et impera e viene usata dai software designers per suddividere sistemi software complessi. Le architetture software basate sulla stratificazione sono dette n-tier, o multi-tier, oppure multi-strato. Un esempio pratico, e ampiamente diffuso, di questa pratica è rappresentato dallo standard ISO/OSI (Open System Interconnection), cioè il modello di pila protocollare dalla quale sono derivate le reti moderne. Internet stessa è basata sulla suite di protocolli TCP/IP, la quale può a sua volta essere rappresentata tramite il modello OSI.

Questo tipo di suddivisione in strati (altrimenti detti layers) comporta una serie di vantaggi:  ogni layer rappresenta un insieme coerente di funzionalità, le quali rispondono ad un

insieme limitato di problematiche;

 og i la e i apsula l’i ple e tazio e dei se izi fo iti, as o de do la p op ia complessità agli strati adiacenti;

 le dipendenze tra gli strati sono minimizzate, facendo sì che ogni layer sia intercambiabile, al solo costo di rispettare le interfacce degli strati adiacenti;

 la suddivisione in layer incoraggia la riusabilità, permettendo a volte, di riutilizzare gli strati in altri applicativi con una quantità minima di interventi sul codice.

L’appli azio e della st atifi azio e i t odu e a he al u e o pli azio i i e e ti le p estazio i del sistema e la possibilità di modifiche a cascata. I problemi di prestazioni sono principalmente legati alla necessità di passare da una rappresentazione dei dati, strettamente legata ad uno strato, verso u ’alt a, f ui ile da u o st ato diffe e te. “e e e tale ope azio i spesso si idu e ad u a se pli e mappatura, tra diverse istanze di oggetti, diventa onerosa al crescere della quantità di dati in t a sito dallo st ato. Il p o le a delle odifi he a as ata dipe de, i e e, dall’i possi ilità di incapsulare tutte le operazioni in modo ottimale. Il risultato che ne deriva è che modifiche, anche semplici e inerenti un singolo strato, si propagano agli strati adiacenti. Un esempio di questo è

62 l’aggiu ta, i u ’e tità della ase dati, di u a po he oglia o ost a e a he ell’i te fa ia utente, e che dovremo quindi aggiungere in tutti gli strati intermedi.

4.1.2 La stratificazione

La piattafo a p ese ta u ’a hitettu a ulti-strato, nella quale ogni livello opera indipendentemente dagli altri, incapsulando i dettagli di implementazione del servizio fornito, ed esponendo interfacce, metodi ed oggetti, tramite il quale può essere interrogato dagli altri livelli. Questa pratica favorisce la separation of concerns, cioè il principio per cui ogni componente software deve potersi concentrate sul suo obiettivo primario, senza preoccuparsi di come sono implementati i servizi dal quale dipende. Il vantaggio derivante da questa separazione è un i e e to della a ute i ilità, della odula ità, della s ala ilità e dell’i e e ta ilità del software.

L’a hitettu a a t e st ati, a he detta -tier architecture, suddivide le funzionalità del software in tre differenti unità:

 i te fa ia ute te, o UI la e , la uale si o upa dell’i te azio e o l’ute te e della presentazione dei dati;

 lo strato logico, o business layer, il quale si occupa di incapsulare la logica decisionale, i comportamenti e i calcoli sulle entità del dominio applicativo;

 lo strato di persistenza, o data layer, il quale supporta la memorizzazione e il recupero dei dati dell’appli ati o.

Il data layer è composto da un database relazionale, o RDBMS, e da un ORM (Object Relational Mappi g , io da u soft a e he fa o is e l’i teg azio e t a u data ase elazio ale e la st uttu a ad oggetti del siste a. Alt o a taggio i dotto dall’utilizzo di u ORM la possi ilità di ast a e le caratteristiche implementative dello specifico RDBMS utilizzato, rendendo di fatto, la base dati intercambiabile.

Il business layer, oltre che fornire servizi relativi alle entità del dominio verso lo strato di interfaccia, incapsula le interfacce di accesso a servizi esterni e le logiche decisionali.

L’UI la e o p e de tutte le p o edu e, i odelli dati e i se izi he pe etto o l’i te azio e o l’ute te; t atta dosi di i te fa ia e , uesto st ato ulte io e te suddi iso i : se e -side, cioè l’i sie e di o po e ti soft a e ela o ati dall’i f ast uttu a se e , e lie t-side, cioè

63 La piattaforma comprende infine uno strato verticale, detto common layer, che contiene una serie di classi, le quali funzionalità sono condivise tra tutti gli altri layer. Questo strato implementa fu zio alità di uso o u e o e l’i f ast uttu a di loggi g, etodi di utilità pe la a ipolazio e dei dati, e ezio i pe so alizzate, ed u a se ie di lassi pe l’i teg azio e di plugi s e oduli aggiuntivi. Il common layer comprende infine un insieme di oggetti leggeri, detti Data transfer o je ts o DTO, utili pe il t asfe i e to di e tità o plesse all’i te o e all’este o dell’appli ati o. Ognuno di questi layer è compilato come componente indipendente ed espone agli altri layer solamente i metodi pubblici che gli permettono di interfacciarsi con essi.