Architectural Patterns per Applicazioni di tipo Enterprise Jürgen Assfalg 17 marzo 2004 1 Alcune domande ● Cos'è un'architettura? ● Cos'è un'applicazione di tipo enterprise? 2 Cos'è l'architettura? Anche nel suo contesto originario, il termine “architettura” non ha un significato ben definito. Infatti, può essere inteso come – L'architettura di un particolare edificio i disegni che ne descrivono il progetto – Uno stile architettonico es. “architettura gotica” – Lo studio dell'architettura es. “Luigi ha conseguito la laurea in architettura” 3 Cos'è un'architettura software? Analogamente, non esiste una definizione chiara, precisa, ed universalmente accettata di “architettura software” Questo, nonostante i numerosi sforzi profusi nell'individuare una definizione del termine, anche a livello normativo 4 Cos'è un'architettura software? Perry+Wolf, 1992: Insieme di elementi architetturali (processing elements, data elements, connecting elements), che hanno una forma particolare (proprietà e relazioni dell'elemento, cioè i vincoli), spiegati da una serie di motivazioni. Si noti come, questa definizione, a differenza di altre che vedremo, prende esplicitamente in considerazione i dati. 5 Cos'è un'architettura software? Garlan+Swan, 1993: Insieme di componenti computazionali, insieme ad una descrizione delle interconnessioni tra componenti (connectors). L'architettura si occupa di aspetti che vanno oltre gli algoritmi e le strutture dati. L'architettura si riguarda aspetti macroscopici, mentre algoritmi e strutture dati si riferiscono ad aspetti microscopici. 6 Cos'è un'architettura software? Abowd et al., 1995: Descrizione di un sistema in termini di 3 classi di base: componenti, connettori e configurazioni. – – Configurazioni: insiemi di componenti e connettori che caratterizzano una determinata topologia attiva L'architettura rappresenta quindi un'astrazione del comportamento in fase di esecuzione. 7 Cos'è un'architettura software? Booch+Rumbaugh+Jacobson, 1999: L'architettura è un insieme di decisioni significative circa l'organizzazione di un sistema, la selezione degli elementi strutturali e delle loro interfacce, circa il comportamento specificato dall'interazione tra gli elementi, circa la composizione di questi aspetti in sistemi di dimensione crescente, e lo stile architetturale che guida quest'organizzazione. 8 Cos'è un'architettura software? ANSI/IEEE Std 1471-2000: L'architettura è definita come l'organizzazione fondamentale del sistema, materializzata nei suoi componenti, le relazioni tra di loro e con l'ambiente, e i principi che ne governano il suo progetto e la sua evoluzione. 9 Cos'è un'architettura software? Bass+Clements+Kazman, 2003: L'architettura software di un programma o di un sistema di elaborazione è la struttura (o le strutture) del sistema, che comprende gli elementi software, le loro proprietà visibili all'esterno, e le loro reciproche relazioni. 10 Un'architettura software è... Architettura software: astrazione del comportamento a run-time di un sistema software durante una qualche fase operativa. Consiste di componenti, dati, una configurazione, e un insieme di proprietà architetturali 11 Un'architettura software è... Componente: unità software astratta che fornisce una trasformazione di dati attraverso la sua interfaccia Connettore: meccanismo astratto che media la comunicazione, coordinazione o cooperazione tra componenti Dato: unità d'informazione ricevuto o inviato da un componente 12 Un'architettura software è... Configurazione: struttura delle relazioni architetturali tra componenti, connettori e dati durante un periodo di esecuzione Proprietà architetturali: sono quelle proprietà che derivano dalla selezione e dalla composizione di componenti, connettori e dati 13 Obiettivi delle architetture L'utilizzo sistematico delle architetture software può avere ricadute positive su: – Comprensione, in quanto consentono la descrizione di un sistema ad un livello di astrazione elevato – Riuso, a diversi livelli – Evoluzione, in quanto può identificare le dimensioni lungo le quali ci si attende che un sistema evolva – Analisi 14 Architectural styles Uno stile architetturale caratterizza una famiglia di sistemi che condividono proprietà strutturali e semantiche [Monroe et al., 1997] Rappresenta un'astrazione dei tipi degli elementi e degli aspetti formali di diverse specifiche architetture [Perry+Wolf, 1992] È un modello di interazione fra componenti tipizzati [Garlan+Swan, 1993] – Lo stile definisce i vincoli, il vocabolario dei componenti e dei connettori che possono essere utilizzati nelle sue istanze. 15 Architectural patterns Dallo stile al pattern, il passo è breve... Un pattern architetturale esprime un'organizzazione fondamentale della struttura o lo schema di un sistema software. Definisce un insieme di sotto-sistemi predefiniti, specifica le loro responsabilità, e include regole e linee guida per organizzare le relazioni tra di loro. [Buschmann+al., 1996] 16 Architectural patterns Sono utilizzati per risolvere risolvere problemi quali: – Persistenza – Concorrenza – Distribuzione – Presentazion – Sessioni 17 Architectural patterns Volendo semplificare: un architectural pattern sta alla comprensione del sistema come un design pattern sta alla comprensione di un componente. AP : sistema = DP : componente Arch. Styles vs Patterns: v. PoSA 1, pp. 39518 Layers Descrizione: il pattern architetturale layers (livelli) aiuta a strutturare le applicazioni che possono essere scomposte in gruppi di sotto-compiti, in cui ogni gruppo rappresenta un livello di astrazione Problema: sistema la cui caratteristica dominante è un insieme di problematiche di basso ed alto livello, e in cui le operazioni di alto livello ne richiedono altre di basso livello 19 Layers alto livello richiesta risposta dati notifica evento basso livello Forces: – – – – Minimizzare gli effetti dei cambiamenti del codice in uno stato avanzato dello sviluppo Stabilità delle interfacce Intercambiabilità di parti del sistema Raggruppamento di funzioni simili per agevolare comprensione e manutenzione 20 Layers Soluzione: definizione di un numero appropriato di livelli (dal basso verso l'alto il livello di astrazione cresce) Classe Collaboratori Livello J Livello J-1 Responsabilità ●fornisce servizi al livello J+1 ●delega servizi al livello J-1 21 Layers Implementazione: v. Buschmann et al. Varianti – Relaxed layered system il livello J non maschera i livelli sottostanti, e quindi sono possibili scorciatoie) – Layering through inheritance Usi conosciuti – – – Virtual Machines (VMs) Application Programming Interfaces (APIs) Sistemi operativi 22 Layers Vantaggi: – unità coerenti – riutilizzo dei livelli – supporto alla standardizzazione – località delle dipendenze – interscambiabilità Svantaggi: – propagazione a cascata dei cambiamenti – riduzione dell'efficienza – difficoltà nello stabilire il livello di granularità 23 Progetto di un'architettura Numerosi fattori condizionano la progettazione dell'architettura: il compito da svolgere (requisiti funzionali) – il contesto (utenti, sistemi ed infrastruttura esistenti) – le tecnologie che si intendono utilizzare – i requisiti qualitativi – ... La scelta dipende molto dal contesto. – Si devono inoltre individuare metodi/strumenti per valutare le diverse alternative. 24 Applicazioni di tipo enterprise Applicazioni aziendali, o anche sistemi informativi, oppure ancora elaborazione dati – – – – – – Molti dati persistenti Accesso concorrente da parte di più utenti Molte maschere di immissione dati Integrazione con altre applicazioni Dissonanza concettuale Logica applicativa complessa e “illogica” 25 Applicazioni di tipo enterprise Diverse tipologie: – Business to consumer (B2C) utilizzata da soggetti esterni all'organizzazione es. commercio elettronico, prenotazione voli, ... – Business to business (B2B) scambio dati senza intervento umano es. gestione magazzino, pagamento elettronico – Back-end eseguita periodicamente senza input diretto es. telecomunicazioni, invio newletter 26 Applicazioni di tipo enterprise Evoluzione delle architetture – monolitiche incorporano tutte le routine per la gestione e la manipolazione dei dati – client/server, o a 2 livelli ● ● client: presentazione server: sorgente dati (DBMS) Client GUI ClientBusiness logic GUI Database logic Business logic Database Server SQL Database logic 27 Applicazioni di tipo enterprise Vantaggi – architettura semplice Svantaggi – ridotta scalabilità ● – richiede elevata larghezza di banda difficoltà di manutenzione ● logica applicativa distribuita (fat client) ● logica applicativa nel DBMS (stored procedures) 28 Model View Controller Pattern architetturale che suddivide applicazione interattiva in 3 componenti – modello: racchiude funzionalità e dati – vista: mostra le informazioni all'utente – controllore: gestisce l'input dell'utente Vista e controllore insieme formano l'interfaccia utente. Meccanismo di propagazione dei cambiamenti assicura consistenza di modello e vista. 29 Model View Controller separazione di elaborazione, ingresso e uscita – separa interfaccia utente dal modello – separa controllore dalla vista consistenza assicurata mediante pattern Observer, che non viola separazione View Controller Model 30 Model View Controller Classe Model Collaboratori ●View ●Controller Responsabilità funzioni centrali ●registra componenti dipendenti ●notifica cambiamenti ● Classe View Responsabilità crea e inizializza controllore ●presenta dati ●implementa procedura aggiornamento ●recupera dati da modello ● Collaboratori ●Controller ●Model Classe Controller Responsabilità Collaboratori ●View ●Model accetta eventi in ingresso ●trasforma eventi in richieste di servizio ●implementa procedura di aggiornamento ● 31 Model View Controller : Controller : Object : Model registra( v ) crea v : View gestisci evento servizio notifica aggiorna visualizza leggi dati 32 Model View Controller N. Libri Libro Titolo Autore Titolo N. pagine Autore N. pagine Aggiungi Controllore Modello 33 Model View Controller Vantaggi – più viste di uno stesso modello – viste sincronizzate – viste e controllori interscambiabili (pluggable) – look&feel interscambiabili – potenzialità per framework 34 Model View Controller Svantaggi – maggiore complessità – rischio di elevato numero di aggiornamenti – accoppiamento stretto tra viste e controllori – accoppiamento stretto (delle interfacce) di viste e controllori al modello (v. Command Processor) – possibile inefficienza nell'accesso ai dati – migrazione rende necessarie modifiche a viste e codice – difficoltà di utilizzo con strumenti visuali per GUI 35 Architetture a 3 livelli Quando la complessità della logica applicativa (regole, validazione, calcoli) è cresciuta, si sono identificati 3 livelli: – Presentazione dei dati all'utente, ma anche ad un programma – Dominio incorpora la logica applicativa – Sorgente dati gestisce la persistenza dei dati 36 Architetture a 3 livelli Solo lo sviluppo del web, e quindi la necessità di evitare la replicazione della logica di dominio in diverse interfacce, ha fatto decollare lo sviluppo delle architetture a 3 livelli In generale, si possono concepire applicazioni a N livelli. Tuttavia, le architetture a 2 o 3 livelli coprono la maggior parte delle applicazioni 37 Architetture a 3 livelli Collocando i diversi livelli su diverse macchine connesse in rete, si realizza un'architettura distribuita Si può distinguere tra – layer: indica il livello di un'architettura software – tier: indica la collocazione fisica Problema: collocazione fisica dei livelli – reattività, operazioni non in linea 38 Architetture a 3 livelli Client Middle-tier server GUI Database Business logic Client Server Database logic GUI RPC, DCOM, … SQL 39 Integrazione di applicazioni • • • • CORBA JTAPI (interfaccia a IVR) JTA JMS • ASP, COM/DCOM, DBMS, M$ • Servlet/JSP, EJB o CORBA, DBMS, Unix/M$ • CGI, CORBA, Unix 40 Esempio: 35mm Esaminiamo alcune problematiche legate alla distribuzione, con riferimento ad un'applicazione per la consultazione di spettacoli cinematografici 41 Esempio: 35mm Logica di dominio: rappresentazione degli oggetti di interesse Regista nome * Programma giorno cinema Spettacolo inizio * sala Film titolo 1 anno durata * Attore nome 42 Esempio: 35mm Logica applicativa: visualizzazione delle informazioni (es. in una pagina JSP) Programma p = ... ; for ( Iterator i = p.spettacoli(); i.hasNext; ) { Spettacolo s = (Spettacolo) i.next(); Film f = s.film(); out.print( “inizio: ” + s.inizio() + “; film:” + film.titolo() + “\n cast: “ ); for ( Iterator j = f.attori(); j.hasNext(); ) { Attore a = (Attore) j.next(); out.print( a.nome() + “ ” ); } } 43 Esempio: 35mm La soluzione proposta non presenta particolari problemi se la logica dell'applicazione viene eseguita nello stesso spazio di indirizzamento in cui si trovano tutti gli oggetti della logica di dominio Logica di dominio Logica applicativa 44 Esempio: 35mm In un contesto distribuito, la logica applicativa che si trova sul client, mantiene riferimenti agli oggetti remoti della logica di dominio Si ha un deterioramento delle prestazioni Ogni invocazione di un metodo su oggetti remoti della logica di dominio comporta notevoli ritardi (marshalling dei parametri, latenza di rete, ...) Logica applicativa Logica di dominio 45 Data Transfer Object È un oggetto che trasporta dati tra processi, in maniera tale da ridurre il numero di chiamate di metodi. In genere trasporta più dati di quanti siano effettivamente richiesti in un dato istante, ma che potrebbero essere sufficienti per un po' di tempo (principio di località?) 46 Data Transfer Object Può essere anche utilizzato per aggregare dati provenienti da più oggetti remoti Utilizzando i DTO non è necessario replicare l'intero Domain Model sul client ProgrammaDTO giorno cinema spettacoli fromXML( : String) : self toXML() : String SpettacoloDTO inizio sala * registaFilm titoloFilm castFilm fromXML( : String) : self toXML() : String 47 Data Transfer Object ProgrammaDTO p = ... ; for ( Iterator i = p.spettacoli(); i.hasNext; ) { SpettacoloDTO s = (SpettacoloDTO) i.next(); out.print( “inizio: ” + s.inizio() + “; film:” + s.titoloFilm() + “\n cast: “ ); for ( Iterator j = s.castFilm(); j.hasNext(); ) { Attore a = (String) j.next(); out.print( a } + “ ” ); } 48 Data Transfer Object Questo pattern richiede meccanismi di serializzazione, necessari per realizzare un passaggio dei parametri per valore (aniziché per riferimento) Ci sono due possibilità – formato testuale (es. XML) – formato binario, più efficiente ma più “fragile” 49 Data Transfer Object L'adozione di un DTO è consigliata, indipendentemente dal protocollo usato (es. RMI, CORBA, SOAP, ...) Possibili alternative: – Utilizzare metodi get/set con molti parametri non è sempre possibile, perché alcuni linguaggi (es. Java) consentono la restituzione di un solo parametro di ritorno – Utilizzare direttamente una rappresentazione sotto forma di stringa, senza alcun oggetto d'interfaccia no incapsulamento: più errori, manutenzione difficile 50 Data Transfer Object Un elevato numero di invocazioni metodi su un oggetto remoto è anche conseguenza della granularità fine con cui vengono progettate le classi Film Questo è una diretta conseguenza delle buone prassi di OOD e OOP: piccoli pezzi, ricombinabili e ridefinibili in vario modo getTitolo() : String setTitolo( : String) attori() : Iterator addAttore( : Attore ) removeAttore( : Attore ) registi() : Iterator addRegista( : Regista ) removeRegista( : Regista ) ... 51 Remote Façade Definisce una facciata a grana grossa su un oggetto a granularità fine, per migliorare l'efficienza in un contesto distribuito Consente di non dover dotare di un'interfaccia remota i singoli oggetti della logica di dominio Non contiene alcuna logica di dominio Può essere definita anche su un insieme di oggetti a granularità fine, anziché su uno solo 52 Remote Façade Nei casi più semplici, la Remote Façade sostituisce un insieme di metodi get/set a grana fine con pochi metodi get/set a grana grossa (bulk accessors) FilmFacade GetDatiFilm( : Id ) : Film setDatiFilm( : Id, : Titoli, : Attori, : Registi, ...) 53 Remote Façade : FilmFacade : Film GetDatiFilm( id ) getTitolo() attori() registi() public FilmDTO getDatiFilm( int id ) { return writeDTO( database.find( id ) ); } 54 Remote Façade Se le classi della logica di dominio sono presenti FilmFacade ad entrambi gli estremi, GetDatiFilm( : Id ) : Film setDatiFilm( : Id, : Film) per trasferire i dati in blocchi, è sufficiente che siano serializzabili Altrimenti è necessario ricorrere ai DTO FilmFacade getDatiFilm( : Id ) : FilmDTO setDatiFilm( : Id, : FilmDTO ) 55 Esempio: 35mm «interface» Remote Logica di dominio Remote Façade 35mmFacade getProgramma() : ProgrammaDTO getDatiFilm( : Id ) : FilmDTO Logica applicativa 56 Esempio: 35mm Grazie ad Internet, nella realizzazione di un'applicazione ci si può avvalere di servizi offerti da altri 35mm ? MovieDB Problemi: – individuare i servizi – integrarli senza “sporcare” la logica di dominio 57 Gateway Un oggetto che incapsula l'accesso ad un sistema o ad una risorsa esterni Patterns analoghi – Facade, semplifica un'API complessa, ma in genere è scritto da chi fornisce l'API stessa – Adapter, adatta l'implementazione di un'interfaccia ad un'altra interfaccia. Nel caso del Gateway, in genere non c'è un'interfaccia preesistente – Mediator, accoppia più oggetti, senza che questi si debbano conoscere. 58 Esempio: 35mm Logica di dominio Gateway MovieDB Remote Façade DTO Logica applicativa 59 Service Stub Quando si sviluppa un sistema, è necessario verificarne anche il corretto funzionamento (testing). Tuttavia, in certi casi, durante le sviluppo del sistema alcuni dei servizi cui si appoggia possono non essere disponibili (interruzione di servizio, in fase di sviluppo, a pagamento) Service Stub rimuove la dipendenza da servizi problematici durante i test 60 Service Stub Logica di dominio Gateway MovieDB Remote Façade DTO Logica applicativa MovieDB Stub «interface» MovieDB 61 Registry Un oggetto noto, che altri oggetti possono utilizzare per individuare oggetti comuni e servizi Registry register( : Key, : Server ) unregister( : Key, : Server ) lookup( : Key) : Server 62 Broker e/o Client-Dispatcher-Server/Service Service Layer: - semplificare la vita ad utenti esterni - ottimo tra presentation e domain model, se in processi diversi - non è necessario renderlo remoto - stateful/stateless 63