MokaByte 81 - Gennaio 2004 
Sviluppare applicazioni J2EE con Jakarta Struts
I parte: introduzione al framework
di
Alfredo Larotonda
Jakarta Struts è il framework più diffuso per lo sviluppo di applicazioni web J2EE. Analizziamone l'architettura e i componenti fondamentali iniziando ad introdurre il concetto di framework

Introduzione
Con questo articolo inizia una serie dedicata allo sviluppo di applicazioni web J2EE con Jakarta Struts. Struts è un progetto open-source di Apache Jakarta Project , ed è ad oggi il framework largamente più adottato nella comunità degli sviluppatori Java. In questa serie di articoli ne analizzeremo l'architettura e le componenti fondamentali cercando di evidenziarne pregi e difetti .
Prima però di affrontare la trattazione specifica di Struts, in questo primo articolo forniamo una necessaria introduzione teorica al concetto di framework, ormai sempre più in voga nello sviluppo di applicazioni web J2EE. Vedremo cos'è un framework e quali vantaggi può fornire nello sviluppo applicativo.
Si tenga presente che anche se questa introduzione ai framework ha valenza di generalità è comunque orientata allo sviluppo di applicazioni web J2EE.

 

Cos'è un framework?
E' molto frequente imbattersi nel termine 'framework' nella letteratura riguardante lo sviluppo di applicazioni. Molto spesso però non si ha un'idea chiara di cosa si intenda con questo termine.
Un framework è una architettura generica che costituisce l'infrastruttura per lo sviluppo di applicazioni in una determinata area tecnologica. Detto in maniera molto semplice è un insieme di classi ed interfacce di base, che costituiscono l'infrastruttura di una applicazione.
In base a questa definizione è facile pensare erroneamente che utilizzare un framework equivalga ad usare una libreria di classi, mentre in realtà vi è una sostanziale differenza tra le due cose.
Una libreria di classi, quali ad esempio le classi di base del linguaggio Java, viene utilizzata dallo sviluppatore per svolgere determinate funzionalità; in questo caso il codice che noi scriviamo invoca il codice esistente per svolgere una certa funzione, ma il controllo del flusso applicativo rimane a nostro carico.
Adottare un framework significa invece attenersi ad un specifica architettura ovvero nella pratica estendere le classi del framerwork e/o implementarne le interfacce. In tal caso sono i componenti del framework che hanno la responsabilità di controllare il flusso elaborativo.
Nel mondo dell'architettura del software un framework è considerato come una parte di software esistente nel quale inserire il proprio, in base al noto principio Hollywood "don't call us we call you". Il nostro codice applicativo non è direttamente invocato dall'intervento dell'utente sul sistema ma il flusso elaborativo passa attraverso il codice del framework: sono le classi del framework che invocano il nostro codice applicativo e non viceversa come nel caso delle librerie di classi.

 

Usare i framework
Come abbiamo evidenziato nel precedente paragrafo, utilizzare un framework significa implicitamente adottare una specifica architettura per la propria applicazione. Anche se questo può sembrare vincolante è invece , nel caso di un framework valido (e vedremo quali criteri lo rendono tale), uno dei maggiori vantaggi.
All'inizio di un progetto infatti la scelta dell'architettura è uno dei momenti fondamentali che può determinare il successo o l'insuccesso del progetto stesso. A volte è una scelta che viene trascurata o sottovalutata, principalmente per un errato approccio allo sviluppo applicativo considerato esclusivamente come una attività di scrittura di codice, ma che produce effetti disastrosi se non ponderata attentamente.
Utilizzare un framework maturo e già ampiamente testato significa attenersi ad una architettura che funziona e quindi significa iniziare un progetto da una base solida. Ciò porta inoltre ad un significativo risparmio di tempo e risorse in quanto lo sviluppatore non deve più preoccuparsi di realizzare componenti infrastrutturali ma può concentrarsi esclusivamente sullo sviluppo della logica di business che poi è il valore aggiunto della applicazione che si scrive.
Non è raro nello sviluppo di un progetto assistere alla riscrittura di componenti di base che già esistono e che sono stati già ampiamente testati; possiamo dire che uno dei vantaggi nell'utilizzo di un framework è che si viene aiutati a non 'reinventare la ruota' come spesso purtroppo accade.
E' chiaro che tutto ciò è vero quando si fa riferimento ad un framework giunto ad uno stadio di sviluppo maturo, già adottato da molti sviluppatori e quindi già ampiamente provato 'sul campo'.
Da un punto di vista pratico adottare un framework significa senz'altro ridurre i tempi di un progetto ed evitare errori nella fase di disegno in quanto si utilizza una infrastruttura realizzata secondo le best-practises dell'ambito tecnologico di riferimento.
E' bene precisare che un framework non va confuso con un design-pattern. Un design-pattern è una strategia di soluzione di un problema comune, è qualcosa di concettuale che prescinde dall'implementazione tecnologica. Un framework è invece qualcosa di concreto, è un insieme di componenti che può essere usato per realizzare una applicazione; componenti che, quando il framework è ben strutturato, sono sviluppati secondo i design-pattern più diffusi nell'ambito specifico.
Come vedremo negli articoli seguenti Struts implementa molti dei design-pattern J2EE di uso comune , ciò a garanzia di una architettura valida e ben sperimentata.

 

Vantaggi e svantaggi nell'utilizzo di un framework
In genere i vantaggi dell'utilizzo di un framework vanno ben oltre gli svantaggi, anzi si può affermare che quanto più il progetto sia di grosse dimensioni tanto più l'utilizzo di un framework è altamente consigliabile. E' anche possibile sviluppare un proprio framework , anche se, a meno di casi del tutto particolari, è difficile pensare di scrivere in casa un framework che risolva problematiche diverse da quelle risolte da quelli già esistenti. Se questa fosse però la propria scelta conviene comunque studiare almeno l'architettura ed il codice, ove disponibile, dei framework più diffusi per conoscere le soluzioni adottate per i vari problemi e confrontarle con le proprie.
Di seguito vengono schematicamente riassunti alcuni dei principali vantaggi che si ottengono nell'adozione di un framework nello sviluppo di applicazioni J2EE.

  • Disegno architetturale
    Un buon framework è fondato su un disegno architetturale valido, in quanto il suo codice è scritto in base alle best-practises della tecnologia in uso. Ciò conferisce al proprio progetto fondamenta solide dalle quali partire.
  • Riduzione dei tempi di progetto
    Lo sviluppatore deve implementare esclusivamente la logica applicativa potendo risparmiare le energie e il tempo necessari alla scrittura di componenti infrastrutturali.
  • Semplificazione dello sviluppo
    Un buon framework semplifica lo sviluppo applicativo perché fornisce tutta una serie di componenti che risolvono la gran parte dei compiti comuni a tutte le applicazioni web J2EE (controllo del flusso, logging, gestione messaggi di errore, custom tags per la presentation logic, internazionalizzazione, validazione dei dati, etc..)

Va precisato che ovviamente un framework non è una panacea o la soluzione di tutti i problemi. Adottarne uno che non si adatta al proprio problema può portare molti svantaggi, per questo la scelta di quello giusto per le proprie esigenze è di fondamentale importanza.
In genere è comunque sempre preferibile evitare framework poco generici, che impongono l'utilizzo di strumenti proprietari e che legano indissolubilmente la propria applicazione ad una specifica struttura.
Il framework deve fornire una base per lo sviluppo ma la logica applicativa sviluppata deve essere utilizzabile anche al di fuori della struttura del framework stesso.

 

Scegliere un framework
Esistono molti framework per lo sviluppo di applicazioni web J2EE, sia open-source che prodotti commerciali. La scelta di un framework è importante per tutte le ragioni che abbiamo visto precedentemente e investe aspetti non solo tecnici ma anche economici. I criteri per la scelta sono molteplici ed è bene chiarire che non esiste il framework 'ideale'. Di seguito sono elencate alcune caratteristiche che a mio parere devono essere considerate valutazione.

  • Maturità del progetto
    E' sconsigliabile adottare un framework che sia in una fase iniziale di sviluppo e che sia poco adottato nella comunità degli sviluppatori e quindi poco testato sul campo in progetti reali. Meglio indirizzarsi verso progetti già stabili e sperimentati.
  • Documentazione
    Va sempre verificato che la documentazione sia ricca e ben fatta. Questo facilita la risoluzione dei problemi che si incontrano nella realizzazione dell'applicazione e la comprensione del suo funzionamento.
  • Validità del disegno architetturale
    Proprio perché la scelta di un framework influisce sull'architettura applicativa è bene verificare che sia disegnato correttamente e quindi che siano adottati i design-pattern e le best-practises della tecnologia di riferimento.
  • Adozione degli standard
    Un framework deve essere fondato sui componenti standard della tecnologia di riferimento. Nel nostro caso sulle API che costiuiscono la J2EE. Quanto più un framework impone soluzioni proprietarie, l'uso di specifici tool di sviluppo o un modello troppo indirizzato ad uno specifico caso applicativo tanto più va evitato.
  • Estensibilità
    Deve essere possibile estenderne le funzionalità per adattarlo alle alle proprie esigenze.

Come vedremo nei prossimi articoli Struts rispetta i criteri sopra elencati e se utilizzato seguendo alcune principali linee guida consente di realizzare applicazioni ben strutturate, assolutamente conformi agli standard J2EE e la cui logica applicativa è riutilizzabile anche in altri contesti.
Non a caso Jakarta Struts è il framework in assoluto più diffuso a livello mondiale nello sviluppo di applicazioni J2EE. Esistono molteplici esempi di casi reali di progetti di successo sviluppati con Struts il che sicuramente è una garanzia per coloro che volessero adottarlo in un nuovo progetto senza averne esperienza diretta. Inoltre essendo un progetto open-source lo si può adottare senza gravare sui costi di progetto e si ha a disposizione tutto il codice sorgente.

 

Conclusioni
In questo primo articolo abbiamo introdotto dal punto di vista teorico i framework cercando di mettere in evidenza le implicazioni di un loro utilizzo. Oggi i framework sono sempre più utilizzati nel mondo J2EE quindi è bene averne conoscenza che si pensi o meno di adottarne uno nello sviluppo dei propri progetti. Nel prossimo articolo inizieremo ad analizzare Jakarta Struts partendo dall'esposizione della sua architettura e presentandone gli elementi fondamentali.

 

Bibliografia
[1] Chuck Cavaness - "Programming Jakarta Struts", O'Reilly, 2003
[2] Rod Johnson - "J2EE Design and Development", Wrox, 2002
[3] Ueli Wahli, Alex Matthews, Paula Coll Lapido, Jean Pierre Norguet - WebSphere version 4 Application Development Handbook, IBM, 2001


Alfredo Larotonda, laureato in Ingegneria Elettronica, lavora da diversi anni nel settore IT. Dal 1999 si occupa di Java ed in particolare dello sviluppo di applicazioni web J2EE. Dopo diverse esperienze di disegno e sviluppo ora si occupa in particolare di aspetti architetturali per progetti rivolti al mercato finanziario ed industriale. E' Web Component Developer certificato SUN per la piattaforma J2EE e Programmer per la piattaforma Java.

MokaByte® è un marchio registrato da MokaByte s.r.l. 
Java®, Jini® e tutti i nomi derivati sono marchi registrati da Sun Microsystems.
Tutti i diritti riservati. E' vietata la riproduzione anche parziale.
Per comunicazioni inviare una mail a info@mokabyte.it