Persistenza di oggetti
Transcript
Persistenza di oggetti
A PS Luca Cabibbo Analisi e Progettazione del Software Persistenza di oggetti Luca Cabibbo aprile 2004 1 A PS Persistenza di oggetti Luca Cabibbo Motivazioni e contenuti Contesto § applicazioni sviluppate mediante le moderne tecniche di OOA/OOD/OOP § che devono gestire dati persistenti/condivisi/transazionali Linguaggi e modelli di riferimento § UML e Java § basi di dati relazionali Contenuti § alcune tecnologie per la gestione di oggetti persistenti/condivisi/transazionali § alcuni problemi metodologici rilevanti 2 Persistenza di oggetti Luca Cabibbo 1 A PS Premessa – sviluppo iterativo del software Discipline (attività) nello sviluppo del software § analisi dei requisiti § analisi § progettazione § implementazione § test § altre – rilascio, manutenzione, gestione del progetto, … Organizzazione delle attività § in fasi, iterazioni e discipline (UP) 3 A PS Persistenza di oggetti Luca Cabibbo Analisi e progettazione (OO) Analisi § investigazione del problema – che cosa § analisi OO – identificazione e descrizione degli oggetti (concetti) nel dominio del problema Progettazione § identificazione di una soluzione concettuale che soddisfa i requisiti – come § progettazione OO – definizione e caratterizzazione degli oggetti software e delle loro collaborazioni Programmazione 4 Persistenza di oggetti Luca Cabibbo 2 A PS 5 A PS 6 Architettura a tre livelli ed enfasi dell’OOA/D Persistenza di oggetti Luca Cabibbo Analisi – modello di dominio Persistenza di oggetti Luca Cabibbo 3 A PS 7 A PS 8 Progettazione – diagramma delle classi di progetto Persistenza di oggetti Luca Cabibbo Progettazione – design patterns (regole di sconto) Persistenza di oggetti Luca Cabibbo 4 A PS 9 A PS 10 Progettazione – design patterns (collegamento con la UI) Persistenza di oggetti Luca Cabibbo Architettura a strati Persistenza di oggetti Luca Cabibbo 5 A PS Gestione della persistenza I sistemi informatici richiedono solitamente di gestire alcuni dati in modo persistente – nonché condiviso e transazionale § in una applicazione a oggetti, è necessario rendere persistenti alcuni oggetti di alcune classi § chiamiamo classi persistenti le classi i cui oggetti vanno resi persistenti § spesso, classi della logica applicativa ispirate alle classi concettuali Diversi modi per realizzare la persistenza degli oggetti § una base di dati a oggetti, una base di dati relazionale o un insieme di file § siamo interessati principalmente persistenza di oggetti mediante basi di dati relazionali 11 A PS Persistenza di oggetti Luca Cabibbo Alcuni problemi Ci sono alcuni problemi legati al voler gestire oggetti persistenti mediante una basi di dati relazionale § impedance mismatch § differenza tra modello relazionale e modello a oggetti § “disaccoppiamento” nelle competenze degli sviluppatori e nelle metodologie § sviluppatore OO – una applicazione, sviluppo iterativo e incrementale, uso di skill dell’OOA/D, oggetti persistenti e oggetti transienti, … § sviluppatore BD – dati persistenti, transazionali e condivisi (tra più applicazioni), normalizzazione, … 12 Persistenza di oggetti Luca Cabibbo 6 A PS Il punto di vista degli sviluppatori Lo sviluppatore OO Lo sviluppatore BD 13 A PS Persistenza di oggetti Luca Cabibbo Il problema in esame Consideriamo questo problema § ci sono alcune classi persistenti § c’è una base di dati relazionale § dove devo scrivere il codice per realizzare la persistenza degli oggetti? 14 Persistenza di oggetti Luca Cabibbo 7 A PS Una possibile soluzione Una prima soluzione – rendere persistente una classe scrivendo direttamente il codice SQL (JDBC) dentro la classe stessa Prodotto SQL base di dati Vendita SQL logica applicativa § contro: coesione, accoppiamento, separazione degli interessi, riuso 15 A PS Persistenza di oggetti Luca Cabibbo Separazione degli interessi Il principio di progettazione per la separazione degli interessi suggerisce § la logica applicativa va realizzata, per quanto possibile, in modo indipendente dalla gestione della persistenza dei dati § per Layers: accoppiamento basso dalla logica applicativa al gestore della persistenza § la persistenza dei dati va realizzata mediante un modulo apposito § possibilmente di uso generale e indipendente dalla logica applicativa 16 Persistenza di oggetti Luca Cabibbo 8 A PS Una seconda soluzione Una seconda soluzione – scrivere il codice SQL in apposite classi di supporto (data classes) alle classi persistenti Prodotto ProdottoDB SQL base di dati Vendita VenditaDB SQL logica applicativa data classes § Pure Fabrication, 17 Indirection, PV Persistenza di oggetti A PS Luca Cabibbo Soluzione basata su un persistence layer Una ulteriore soluzione – delegare la gestione della persistenza degli oggetti ad un modulo apposito – un persistence layer (PL) § un PL nasconde i dettagli della persistenza (nonché della condivisione e della transazionalità) al programmatore Prodotto Persistence Manager SQL base di dati Vendita persistence layer logica applicativa 18 Persistenza di oggetti Luca Cabibbo 9 A PS Uso di un persistence layer Esistono diversi persistence layer che possono essere utilizzati mediante delle API standard § ad es., compatibili con le API ODMG – utilizzate per accedere le basi di dati a oggetti § in pratica, il programmatore vede il gestore della persistenza come una base di dati a oggetti, anche se l’implementazione della persistenza è diversa PersistenceManager pm = new PersistenceManager(...); Transaction tx = pm.currentTransaction(); PersonaID pID = new PersonaID("1"); Persona p = (Persona) pm.getObjectByID(pID); p.setStipendio(1000); tx.commit(); 19 A PS Persistenza di oggetti Luca Cabibbo Gestione trasparente della persistenza Un persistence layer nasconde al programmatore i dettagli di come gli oggetti vengono resi persistenti § due approcci principali § O/R mapping – forward engineering § R/O mapping – reverse engineering § un terzo approccio § meet in the middle 20 Persistenza di oggetti Luca Cabibbo 10 A PS O/R mapping – forward engineering Nell’O/R mapping § il programmatore indica in un file di configurazione quali sono le classi che vanno rese persistenti § a partire da questo file § viene generata la base di dati § vengono generate le data classes per le classi persistenti § le classi persistenti vengono “migliorate” da un postcompilatore (enhancer) che stabilisce la cooperazione tra classi persistenti e data classes 21 A PS Persistenza di oggetti Luca Cabibbo R/O mapping – reverse engineering Nell’R/O mapping § il programmatore indica in un file di configurazione la base di dati relazionale di interesse § a partire da questo file § vengono generate le data classes per accedere e modificare le tuple delle relazioni della base di dati § il programmatore rende persistente le proprie classi facendole cooperare (esplicitamente) con le data classes 22 Persistenza di oggetti Luca Cabibbo 11 A PS Meet in the middle Meet in the middle – incontro al centro § le classi persistenti e la base di dati vengono progettate e realizzate in modo indipendente § il programmatore indica in un file di configurazione le corrispondenze tra classi persistenti e base di dati § a partire da questo file § vengono generate le data classes per le classi persistenti § le classi persistenti vengono “migliorate” da un postcompilatore (enhancer) che stabilisce la cooperazione tra classi persistenti e data classes 23 A PS Persistenza di oggetti Luca Cabibbo Discussione L’O/R mapping è utile in fase di prototipazione § non è accettabile se la base di dati va condivisa da più applicazioni sviluppate in modo indipendente L’R/O mapping è utile se la base di dati è stabile § non è accettabile se la base di dati varia continuamente, ad esempio perché la si sta progettando Meet in the middle è la soluzione più flessibile § cambiamenti nelle classi persistenti e/o nella base di dati richiedono solo il cambiamento del file di configurazione § indipendenza logica dell’applicazione dalla base di dati § poche realizzazioni – spesso incomplete 24 Persistenza di oggetti Luca Cabibbo 12 A PS Standard e sistemi JDO – Java Data Objects – http://www.jdocentral.com/ § API Java standard per la persistenza trasparente degli oggetti OJB – ObJect relational Bridge – http://db.apache.org/ojb/ § uno strumento per l’O/R mapping + meet in the middle § compatibile con le API ODMG e JDO Torque – http://db.apache.org/torque/ § uno strumento per l’R/O mapping Enterprise Java Bean – EJB, parte di J2EE Altro § JRELAY – http://www.objectindustries.com/ § JDX – http://www.softwaretree.com E i produttori di RDBMS? 25 A PS Persistenza di oggetti Luca Cabibbo Esempio: Lettura di un prodotto con OJB Lettura di un prodotto, a partire dal suo codice itemID Criteria crit = new Criteria(); crit.addEqualTo("id", (String) itemID); Query q = QueryFactory.newQuery( ProductSpecification.class, crit); ProductSpecification p = null; try { p = (ProductSpecification) pm.getObjectByQuery(q); } catch(Exception e) { ... } 26 Persistenza di oggetti Luca Cabibbo 13 A PS Esempio: Lettura di un prodotto con Torque Lettura di un prodotto, a partire dal suo codice itemID try { pos.torque.Productspecification tp = ProductspecificationPeer. retrieveByPK((String) itemID); ProductSpecification p = new ProductSpecification( tp.getItemId(); tp.getDescription(); new Money(tp.getPrice()) ); } catch(Exception e) { ... } 27 A PS Persistenza di oggetti Luca Cabibbo Gestione della persistenza Una possibile metodologia § identifica i cluster di oggetti che vanno acceduti congiuntamente § ProductSpecification, Sale-SaleLineItem, … § identifica le operazioni di interesse per ciascun cluster di oggetti § tra le operazioni CRUD – creazione (inserimento), lettura, aggiornamento, cancellazione § definisci una interfaccia per ciascun cluster di oggetti, che dichiara le operazioni di interesse § ISalePersistenceAdapter , … § implementa questa interfaccia con classi adattatore per i vari possibili gestori della persistenza § TorqueSalePersistenceAdapter , … 28 Persistenza di oggetti Luca Cabibbo 14 A PS Collegamento con la logica applicativa Creazione § bisogna creare una famiglia di adattatori compatibili – per i vari cluster e lo specifico gestore della persistenza § AbstractFactory, Singleton Uso class Store { ... public void registerSale(Sale s) { PersistenceManagerFactory.getInstance(). getSalePersistenceAdapter().saveSale(s); } ... } 29 A PS Persistenza di oggetti Luca Cabibbo Design pattern utili – J2EE patterns Value Object § usa un Value Object che incapsula i dati di un oggetto di business (della logica applicativa) § tra i vari elementi e strati, scambia il Value Object e non l’oggetto di business originale Composite Entity § usa una Composite Entity per rappresentare e gestire un gruppo di oggetti persistenti correlati – anziché rappresentarli mediante elementi persistenti a grana fine § un oggetto Composite Entity rappresenta un grafo di oggetti persistenti 30 Persistenza di oggetti Luca Cabibbo 15 A PS Design pattern utili – J2EE patterns Data Access Object § usa un Data Access Object (DAO) per astrarre e incapsulare tutti gli accessi alle sorgenti dei dati persistenti § il DAO gestisce le connessioni con le sorgenti di dati per ottenere e memorizzare dati § può essere utile definire un DAO per ciascuna Composite Entity § il DAO può scambiare oggetti che sono Value Object § per ogni sorgente di dati diversa va implementato un gruppo di DAO diversi § la creazione dei DAO per la sorgente di dati effettivamente utilizzata può essere creata con una Abstract Factory 31 A PS Persistenza di oggetti Luca Cabibbo Un’altra tecnologia – EJB Gli Enterprise Java Beans (EJB) sono componenti Java riusabili che implementano logica applicativa e abilitano lo sviluppo di applicazioni distribuite basate su componenti § gli EJB sono oggetti software che § vivono nell’ambito di un application server (AS), usato da contenitore di EJB § possono essere acceduti remotamente tramite l’AS Tre tipologie di EJB (ciascuno con le sue varianti) § session bean – per implementare servizi (azioni) da eseguire per conto del cliente § message-driven bean – per implementare servizi asincroni § entity bean – oggetti persistenti e transazionali utilizzati per rappresentare dati (entità nel senso del modello ER) 32 Persistenza di oggetti Luca Cabibbo 16 A PS Entity bean Due tipi di entity bean § entity bean la cui persistenza è delegata completamente al contenitore (AS) che ospita il bean (CMP) § va implementata solo la logica applicativa § entity bean la cui persistenza è gestita esplicitamente dal bean (BMP) § oltre alla logica applicativa, vanno implementati metodi di supporto alla persistenza ma indipendenti dalla logica applicativa – ejbCreate(), ejbLoad(), ejbStore(), ejbRemove() § è comunque compito del contenitore decidere quando e come invocare questi metodi di supporto alla persistenza § è compito del contenitore anche gestire le transazioni 33 A PS Persistenza di oggetti Luca Cabibbo Conclusioni Gli sviluppatori di applicazioni a oggetti vogliono rendere persistenti i loro oggetti nel modo più efficiente (mediante una base di dati relazionale) ed efficace possibile § vogliono ignorare quanto più possibile le problematiche legate alla persistenza degli oggetti § progettazione ed evoluzione della base di dati, SQL, JDBC, gestione delle transazioni, caching di oggetti persistenti, … § da queste esigenze nascono gli strumenti di supporto alla gestione trasparente della persistenza di oggetti 34 Persistenza di oggetti Luca Cabibbo 17 A PS Tesine e tesi Tesine (da 5 crediti) § sperimentazione/confronto di strumenti per la gestione trasparente della persistenza § sviluppo di un generatore di classi DAO (in coppia) Tesi § studio di modelli per la gestione trasparente della persistenza di oggetti di tipo meet in the middle § realizzazione di uno strumento per la gestione trasparente della persistenza di tipo meet in the middle § sviluppo di un generatore di classi DAO § database refactoring § database testing 35 Persistenza di oggetti Luca Cabibbo 18
Documenti analoghi
Analisi e progettazione orientata agli oggetti
A PS Gestione della persistenza
I sistemi informatici richiedono solitamente di gestire alcuni
dati in modo persistente – nonché condiviso e transazionale
in una applicazione a oggetti, è necess...