Presentazione di PowerPoint
Transcript
Presentazione di PowerPoint
Pattern Architetturali e Analisi Architetturale Ingegneria del Software – parte II Andrea Bei Pattern Architetturali Pattern Architetturale Descrive il modello organizzativo strutturale di un sistema software in termini di Sottosistemi e loro responsabilità Linee guida per organizzare le relazioni tra tali sottosistemi Si trova al massimo livello di astrazione in un sistema che comprende design pattern più specializzati (es: Grasp, Gof, J2EE Pattern …) La selezione di un pattern architetturale è una decisione fondamentale nella progettazione di un sistema software Layer Il pattern Layer aiuta a strutturare applicazioni le cui funzioni possono essere decomposte in gruppi di sottoattività con responsabilità a diversi livelli di astrazione Layer Problema Minimizzare l’impatto dei cambiamenti Massimizzare l’intercambiabilità di alcune parti Dare la possibilità di costruire altri sistemi con le stesse caratteristiche di basso livello Massimizzare la coesione delle responsabilità per aumentare manutenibilità e comprensibilità Soluzione Strutturare il sistema in un appropriato numero di layer posti l’uno sull’altro. Il livello al più basso livello di astrazione è il Layer 1 ed è la base del sistema A partire da questo sono posti gli altri Layer a livelli di astrazione via via più alti fino ad arrivare al Layer N che espone le funzionalità del sistema Layer Scheda CRC e Struttura Layer Scenari di comunicazione tra livelli 1. 2. 3. 4. 5. Comunicazione top-down: Un Client inoltra una request al Layer N, questo la inoltra al Layer N-1, e via di seguito fino al Layer 1. Una request a Layer i può produrre più request a Layer i-1 Comunicazione bottom-up: Un device driver a Layer 1 riceve un input, lo formatta (notification) e lo inoltra al Layer 2, e via di seguito fino al Layer N Comunicazione top-down: Le request possono viaggiare attraverso un sottinsieme di Layer senza arrivare al Layer 1 (es: Layer N-1 è una cache) Comunicazione bottom-up: Le notification possono viaggiare attraverso un sottoinsieme di Layer senza arrivare al Layer N (es: re-send notification nei protocolli di comunicazione) Protocolli di comunicazione a stack MVC Model-View-Controller (MVC) divide una applicazione interattiva in 3 componenti Il Model contiene funzionalità e dati Le Views mostrano le informazioni all’utente I Controller gestiscono l’input utente e la comunicazione Model-View La consistenza tra UI e Model è garantita da un meccanismo di propagazione dei cambiamenti MVC Problema Forze Realizzare una applicazione interattiva La stessa informazione è presentata in modo diverso (es: bar o pie chart). Le modifiche della UI devono poter essere eseguite semplicemente La possibilità di supportare diversi standard 'look and feel' o la necessità di effettuare un porting della UI non dovrebbe aver impatto nel core della applicazione Soluzione Dividere l’applicazione in Componenti Model: incapsulano data e funzionalità e sono indipendenti dalla specifica rappresentazione dell’output o dal comportamento di input Componenti View: mostrano le informazioni all’utente. Una View ottiene I dati dal Model. (possono esserci più View di uno stesso Model) Ogni View ha associato un componente Controller. I componenti Controller ricevono l’input che di solito codifica un evento come il movimento del mouse o un input da tastiera Gli eventi sono tradotti in service request per il Model Il meccanismo di propagazione dei cambiamenti è basato sul pattern Observer MVC Schede CRC e Struttura MVC Scenario 1: un input modifica il modello e innesca il meccanismo di propagazione dei cambiamenti Il Controller accetta un input utente codificato come evento e lo traduce in una service request inoltrata al Model Il Model esegue la service request che provoca un cambiamento nei dati Il Model notifica tutte le View che sono registrate mediante il meccanismo di propagazione degli eventi (Observer) invocando il loro metodo update Ogni View richiede un aggiornamento dei dati che mostra Ogni Controller registrato esegue il retrieve dei dati per abilitare/disabilitare alcune funzioni utente (per esempio abilitare la funzione “Save” può essere una conseguenza del fatto che idati sono cambiati) Il Controller originale guadagna nuovamente il controllo MVC Scenario 2: inizializzazione dell’MVC Il Model viene creato Una View viene creata prendendo come parametro il Model La View esegue un subscribe al meccanismo di propagazione dei cambiamenti invocando la funzione attach La View prosegue la sua inizializzazione creando un Controller a cui passa se stessa e il Model Il Controller esegue un subscribe al meccanismo di propagazione dei cambiamenti invocando la funzione attach L’applicazione inizia a processare gli eventi Analisi Architetturale Obiettivo: progettare l’architettura applicativa development ciclo di sviluppocycle UP iterazione iteration ide. inc phase fase costruzione construction transizione transition elaborazione incremento release finale milestone release Fase: prima iterazione della fase di elaborazione (UP), inizio fase di progettazione (waterfall). In ogni caso prima di iniziare lo sviluppo Deliverable: Documento della architettura applicativa SAD (Software Architecture UnAsottoinsieme stabile The La difference differenza E’ la fine una Andiiteration endstable executable A questo punto il Document) contenente: (delta ) between the eseguibile tra due iterazione in when cui si some edsubset point of thedel final Tabelle di fattori architetturali releases of2 iterazioni verificasignificant una decisione decision prodotto productfinale. . The end of Promemoria tecnici che descrivono le decisioni architetturali subsequent Rappresenta una successive importante o una or evaluation each iteration is a iterations. release occurs . minor minore release. valutazione significativa At this point , the sistema viene system isereleased rilasciato for production consegnato ai use. clienti Analisi Architetturale E’ una specializzazione della analisi dei requisiti. Il focus è sui requisiti che hanno un influenza maggiore sulla architettura (es: sicurezza, manutenibilità, ..) Le principali attività sono: Identificare i fattori architetturali (o guide architetturali). Sono i requisiti non funzionali che influenzano l’architettura. (es: tempo di risposta) Identifcare per ciascuno priorità, variabilità, rischi e scenari di qualità che rendano misurabile il fattore con affermazioni di tipo <stimolo>,<risposta misurabile>. (es: click, tempo di risposta < 3 sec) Risolvere i fattori architetturali. Identificare le soluzioni alternative e descriverle in promemoria tecnici. Le soluzioni possono comprendere ad esempio: Soluzioni ad-hoc Adozione di pattern (architetturali o di design), Adozione di framework o librerie di terze parti o open source Analisi Architetturale Identificare i fattori architetturali Creare una tabella dei fattori architetturali: Gerarchia di priorità Vincoli e normative (es: politica fiscale nel caso di studio POS) Obiettivi di business (es: data di consegna) Altri: (es: estendibilità, manutenibilità, ..) Analisi Architetturale Risolvere i fattori architetturali Principi di base Si applicano su larga scala (a livello architetturale di sottosistemi) gli stessi principi descritti dai pattern GRASP e validi su piccola scala (a livello di oggetti) Low Coupling High Cohesion Protected Variation (Indirezioni, Interfacce, Adapter, ..) Adottare Separation Of Concerns (Separazione degli interessi) Massimizzare la modularità: progettare l’architettura in modo modulare facendo si che ogni sottosistema sia focalizzato solo su una specifica responsabilità (es: persistenza, sicurezza, …). E’ un modo per ottenere high cohesion & low coupling Usare i Decorator per aggiungere responsabilità ad un sottosistema Usare la programmazione orientata agli aspetti Usare i Pattern Architetturali Usare Framework Commerciali o Open Source Nei punti di variazione/evoluzione nella logica di business Usare meccanismi per rendere “inseribili” algoritmi e strategie (es: IoC, Strategy Pattern, approcci Data Driven,…) trovare il giusto equilibrio tra ingegnerizzazione insufficiente ed eccessiva Analisi Architetturale I Promemoria Tecnici (o Schede dei problemi, Documenti degli approcci architetturali) contengono: Problema, Riepilogo della soluzione, Fattori, Soluzione, Motivazione, Problemi irrisolti,, Alternative considerate Promemoria tecnico: Adattabilità Servizi di Terze Parti Riepilogo dela soluzione: Sostenere Protected Variation usando il pattern Adapter per rendere il sistema adattabile a servizi di terze parti variabili Fattori: Adattabilità a servizi di terze parti variabili (calcolatori imposte, autorizzazione credito, inventario,…) Soluzione: Ottenere Protected Variation nel modo seguente: Analizzare diversi calcolatori delle imposte commerciali e creare una interfacce comune per le funzionalità minime comuni. Applicare Indirection utilizzando il pattern Adapter Motivazione Semplice ed economico. Garantisce una comunicazione puù veloce rispetto ad un servizio di messaging. Quest’ultimo non potrebbe essere utilizzato per il servizio di autorizzazione del credito Problemi non risolti Creare un interfaccia comune per i servizi comuni potrebbe limitare l’adattabilità Alternative considerate Applicare Indirection usando un sistema di messaging basato sul meccanismo publish subscribe (es: code JMS) E’ costoso e garantisce una affidabilità nella consegna dei messaggi maggiore di quanto non sia necessaria.