Generative Programming: Domain Engineering

genSecondo appuntamento con la programmazione generativa già discussa in precedenza in questo articolo sempre sulle pagine di DevMe. Ci eravamo lasciati parlando delle opportunità e delle comodità di cui gode la programmazione generativa, ovvero la creazione di programmi detti generatori capaci di creare, software specifici sulla base di una configurazione data in input. Il generatore è un programma in grado di generare una famiglia di altri programmi; la scelta del componente della famiglia è a carico della configurazione, ovvero del mezzo che discrimina un determinato componente da un altro. La configurazione può essere fornita in diversi modi: un file XML, un insieme di tabelle di un database, etc.
Quello di cui volevo parlare ora riguarda il Domain Engineering. Cos’è ? Partiamo dalla definizione: 
il Domain Engineering è l’attività di recuperare, organizzare e memorizzare l’esperienza maturata durante la costruzione di sistemi software o parti di sistemi di un particolare dominio, in modo tale che possa essere definita una forma di prodotto riutilizzabile, oltre a fornire un mezzo adeguato che descriva come fare a riutilizzare questi prodotti durante la costruzione di nuovi sistemi.
Ecco non spaventatevi….sebbene questa definizione possa sembrare incomprensibile, vedrete che analizzandola ci accorgeremo che è più semplice di quanto sembri.
I sistemi software che conosciamo possono essere classificati secondo la loro area di business, commercio elettronico, sistemi medicali, sistemi di prenotazione aerea, e così via. Chiamiamo queste aree Domini Verticali. Allo stesso modo possiamo classificare le parti di questi software sulla base della loro funzionalità, ad esempio i database, i sistemi di workflow, le librerie, etc. Chiamiamo queste parti di sistemi Domini Orizzontali.
Naturalmente questi sistemi o componenti all’interno di uno stesso dominio, condividono molte caratteristiche tra loro, e quando un’azienda che ha già lavorato ad applicazioni appartenenti ad uno stesso dominio, si trova a dover sviluppare di nuovo parti o sistemi dello stesso dominio, può trarre vantaggio da quanto già fatto riutilizzando il lavoro svolto. Qual è la parte difficile ? Ovviamente, cercare di trarre dalla conoscenza acquisita dal lavoro svolto, una forma che possa rendere quanto prodotto riutilizzabile, così da rimettere in campo componenti già sviluppati, e quindi già pronti. In questo modo l’azienda potrà produrre nuovi prodotti in minor tempo, a basso costo e di altà qualità.
Il Domain Engineering comprende:

  • Domain Analysis
  • Domain Design
  • Domain Implementation

Il Domain Analysis consiste nel definire il focus del dominio, analizzarne le caratteristiche annotando quelle comuni, quelle variabili e le dipendenze all’interno della famiglia dei sistemi.
Il Domani Design consiste nel progettare il design di un’architettura comune costituita da un insieme di componenti elementari e altro, e del loro meccanismo automatico che permette di assemblarli.
Infine il Domain Implementation permette di implementare i componenti, definire la specifica e quindi il generatore.
Introduciamo ora quello che sarà l’esempio del prossimo articolo, ovvero un piccolo progettino che dimostra ancora una volta le potenzialità della programmazione generativa. Nell’ambito del mio lavoro, mi trovo spesso a sviluppare applicazione web in Java, tutti basata su Spring, ormai famoso framework di sviluppo, con il supporto di Spring Web Flow sottoprogetto di Spring utilizzato per lo sviluppo di Internet Rich Applications.
Prima osservazione: la struttura di un progetto Spring, almeno per quanto mi riguarda oramai è nota, o meglio detto in termini di Domain Engiinering, ha molte parti che accomunano i diversi progetti. Seconda osservazione: molti dei task implementati nell’ambito di applicazioni web, hanno in comune alcune funzionalità. Ad esempio, nell’ambito dello sviluppo di un RIA, classica di gestione clienti e fornitori, per ciascuna delle due entità dovremo fornire sempre le funzionaltià di inserimento, modifica e cancellazione. Bene, sulla base di queste osservazioni costruiremo una versione alpha del nostro generatore, che andremo via via migliorando. Al momento esiste già una versione alpha di questo generatore, non sono ancora riuscito a portarla a termine visto che il tempo che ho disposizione non è molto. Vedremo infine come la specifica di configurazione viene fornita mediante database, per la quale in futuro potrebbe essere sviluppata una piccola applicazione ad-hoc che permette di definirla in modo semplice.
Stay tuned !

WordPress Themes