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.
|