Delphi Day 2004 Piacenza 9 giugno 2004 InstantObjects Un Object Persistence Framework Open Source per Delphi 5,6,7 pro e Kylix 3 presentato da Carlo Barazzetta www.cibisoft.com © 2004 CiBiSoft.com – Carlo Barazzetta La mappatura object/relational Per ridurre le distanze tra il modello OO e il modello relazionale Per memorizzare oggetti in strutture relazionali (tabelle/record) Per sviluppare applicazioni OO senza database ad oggetti Questo meccanismo di mappatura è contenuto in un OPF (Object Persistence Framework) Rif: http://www.ambysoft.com/persistenceLayer.html © 2004 CiBiSoft.com – Carlo Barazzetta Cosa è un O.P.F. Un layer software che consente la persistenza degli oggetti del modello su vari mezzi di storage (database SQL o file oriented, file XML...). Il sistema di mappatuta O/R è una parte dell'OPF. Che scopo ha un OPF Disaccoppia le classi del modello dal modo in cui verranno salvate le istanze rendendo il meccanismo di persistenza trasparente al programmatore © 2004 CiBiSoft.com – Carlo Barazzetta Vantaggi di un OPF Indipendenza dal motore e dalla struttura del database Possibilità di sfruttare la metodologia OO In particolare l'incapsulamento e l'ereditarietà Significativa riduzione delle ridondanze nel codice Il codice non vi fa mai riferimento esplicitamente Rispetto ad un approccio “tradizionale” basato su DataSet Maggior riutilizzo del codice © 2004 CiBiSoft.com – Carlo Barazzetta Svantaggi di un OPF Curva di apprendimento più ripida Specie per chi ha esperienza con l'approccio “tradizionale” Delphi di accesso ai dati. Necessità di maggiori skill per i programmatori Minor sfruttamento delle caratteristiche dei server database Programmazione lato server, locking, transazioni... Prestazioni generalmente inferiori Rispetto ad applicazioni C/S o 3 tier ben architettate © 2004 CiBiSoft.com – Carlo Barazzetta InstantObjects: Storia Background Una (sfortunata) storia come prodotto commerciale Creato in Danimarca da Seleqt Difficoltà ad avere il support adeguato Progetto Open-Source Rilasciato sotto licenza MPL L'interesse è cresciuto grazie alla disponibilità dei sorgenti. Una solida base di utenti/sviluppatori ...compresi noi di Delphi & Dintorni! © 2004 CiBiSoft.com – Carlo Barazzetta Un semplice esempio Una classe semplicissima (TPhone) Definiamo la classe e le sue proprietà Osserviamo il codice sorgente prodotto (la modifica è bidirezionale) Utilizziamo un broker per creare il database Osserviamo la struttura creata Creiamo una piccola interfaccia utente Aggiungere un oggetto Scaricare gli oggetti dal db © 2004 CiBiSoft.com – Carlo Barazzetta IO: Supporto a design-time Il Model Explorer Class editor Class treeview Database builder Il generatore di codice Struttura delle classi in InstantObjects Esempio di codice generato (occhio ai commenti!) Il file mdr Contiene la mappatura (i commenti) Viene generato a partire dai sorgenti e è incluso nell'exe © 2004 CiBiSoft.com – Carlo Barazzetta Persistence Layer: classi TInstantObject Classe base per tutti gli oggetti Tip: crearne sempre una propria TInstantAttribute Base per tutti gli attributi oggetti di classi derivate da TInstantAttribute, ed esposti come proprietà da TinstantObject TinstantQuery Accesso ai dati in “simil-sql” TInstantConnector e i Brokers Un broker isola le specificità di un back-end e/o di una libreria di accesso ai dati © 2004 CiBiSoft.com – Carlo Barazzetta Presentation Layer: classi TInstantExposer Un dataset con i campi mappati sugli attributi di un oggetto (ObjectClassName e FieldOptions) Può mostrare un solo record/oggetto o un elenco di oggetti (amObject, amContent) Per usare i componenti data-aware Supporta lettura e scrittura Permette il filtraggio lato client (“a valle”) TInstantSelector Un Exposer con un TInstantQuery interno Per leggere dal DB elenchi di oggetti filtrati Uso di DataSetFields per Master-Details © 2004 CiBiSoft.com – Carlo Barazzetta Presentation Layer: esempio Intro Demo: Un Modello più complesso: uso di attributi semplici, Part, Parts, Reference, References Una interfaccia utente più evoluta: Ereditarietà visuale Uso di Selector ed Exposer (amObject e amContent) ComboBox (uso dei field “object reference”) Controlli di validità: Set(Property), BeforeStore... isValidObject © 2004 CiBiSoft.com – Carlo Barazzetta Esempio: Demo “Primer” Esempio da studiare bene e provare a modificare prima di iniziare con nuovi progetti. Modello semplice ma completo Ereditarietà e incapsulamento Possibilità di testare i vari brokers Possibilità di provare il linguaggio simil-sql Generatore Random di dati Esportazione in XML del modello dati Versione compatibile con Kylix 3 © 2004 CiBiSoft.com – Carlo Barazzetta Esempio: Sport Club Manager Generazione alternativa sorgenti I.O. e struttura DB. Il problema delle uses circolari: Mappatura “Viste logiche” Classi di base e classi applicative (solo per broker SQL) Soluzioni efficaci a problemi complessi: Gestione multilingua sui dati © 2004 CiBiSoft.com – Carlo Barazzetta Perché Scegliere InstantObjects? Punti di forza Molto RAD rispetto alla concorrenza Molto flessibile a livello di programmazione Supporto per i controlli data-aware Disponibilità di diversi Brokers di accesso ai dati Disponibile per Delphi 5,6,7 Pro e Kylix 3 E' completo e funziona! © 2004 CiBiSoft.com – Carlo Barazzetta Il problema del Porting Struttura del DB rigida Impossibile fare un porting “parziale” Il problema dell'Id univoco contro le chiavi multiple. Se si è lavorato bene la parte di presentation e le stampe si possono salvare. Le regole di business vanno completamente riscritte (ma si semplificano!) © 2004 CiBiSoft.com – Carlo Barazzetta InstantObjects: disponibilità Sito ufficiale: http://www.instantobjects.org http://sourceforge.net/projects/instantobjects/ Sorgenti, demos, help CVS Newsgroup italiano e internazionale ospitato da Delphi & Dintorni: news://news.delphiedintorni.it © 2004 CiBiSoft.com – Carlo Barazzetta Conclusioni Un OPF funzionante gratis per Delphi Professional e Kylix! Addio record, è stato bello finché è durato! Un bel passo avanti... per i più coraggiosi! © 2004 CiBiSoft.com – Carlo Barazzetta La situazione del progetto Open Source Carlo Wolter: Project Manager Rilasciata la versione compatibile con Kylix 3 (compreso il demo Primer) Lavori in corso: miglioramento delle prestazioni Supporto agli attributi Currency Nuovi Brokers (IBO, XML...) Analisi external Parts/References Feature Requests © 2004 CiBiSoft.com – Carlo Barazzetta Feature requests © 2004 CiBiSoft.com – Carlo Barazzetta Developer list © 2004 CiBiSoft.com – Carlo Barazzetta