|
La JBCL si presenta come una libreria
completa e abbastanza complessa. Le toolbar del Jbuilder presentano
elementi provenienti da varie librerie, e solo due presentano
elementi specifici della JBCL.

In Figura 1 possiamo vedere i
componenti della toolbar Controls, che sono gli elementi di
interfaccia utente della JBCL, mentre in Figura 2 abbiamo i
componenti di Data Access.

Questi componenti sono entry point,
grazie ai quali è possibile sfruttare molte delle funzionalità
fornite dalla Jbuilder. Comunque c’è davvero molto
“sotto il coperchio” che va oltre questi pochi
componenti. Bisogna anche sfatare il mito che il Jbuilder sia un
ambiente di sviluppo interamente visuale. In realtà è
un vero two ways tool, ovvero uno strumento che consente
di generare codice con l’editing visuale, ma
soprattutto, è in grado di comprendere codice
modificato manualmente e riportarlo nell’editor visuale.
Tuttavia esistono varie operazioni (di cui vedremo qualche esempio)
che non possono essere svolte visualmente ma richiedono una
codifica manuale. In questi casi JBuilder non fornisce alcun indizio
visivo dell’esistenza di certe funzionalità, e solo una
conoscenza diretta della libreria può aiutare. Analogamente,
ci sono casi in cui l’editore visuale si dimostra limitato, ed
è molto più pratico e veloce editare manualmente il
codice generato (che fortunatamente è molto comprensibile) che
“lottare” con l’ambiente di sviluppo.
Fortunatamente in questi casi le modifiche apportate saranno
puntalmente riportate nell’editor visuale (purché si
rispetti la struttura e lo “stile” che il Jbuilder usa
per il codice che genera).
Vediamo dunque che cosa ci mette a
disposizione la libreria di Borland. La JBCL innanzitutto fornisce i
sospirati componenti data aware che permettono di collegare i
componenti delle GUI ai dati. Per ogni componente della AWT standard,
(per esempio TextField), esiste un corrispondente elemento
della JBCL, con lo stesso nome ma col suffisso Control (quindi
TextFieldControl) con funzionalità analoghe ma
generalmente migliorate; soprattutto per molti Control esiste
una proprietà dataset per collegarlo ad un dataset. La
JBCL fornisce gli equivalenti dei componenti standard della AWT:
ListControl, CheckBoxControl ecceera; inoltre abbiamo alcune
aggiunte: il GridControl, una griglia molto sofisticata ed
editabile, un NavigatorControl per navigare in un database, un
TreeControl, una StatusBar, componenti per la gestione
delle immagini, eccetera. I Control rappresentano la parte
front end della JBCL, ma il vero cuore è rappresentato
dai componenti di gestione dati, i DataSet. Si tratta di
buffer di dati intelligenti, che consentono di gestire in modo
ottimale l’interazione col database. I DataSet possono
essere ordinati, filtrati, e possono essere frazionati per colonne
(Columns) e per righe (Rows). Ci sono vari tipi di
dataset, collegati a file o database via query o stored procedure.
Volendo si possono creare viste supplementari su un dataset, con
differenti proprietà di filtraggio e ordinamento, usando un
componente DataSetView. Ci sono molte altre “feature”
utili: per esempio sui campi di un dataset si possono impostare delle
maschere di input e di output; è possibile creare dei campi
calcolati e aggregati, e ancora si possono gestire relazioni
Master Detail (uno a molti).
Borland chiama DataExpress la
tecnologia della JBCL. L’idea di fondo è che quando un
componente visuale deve operare su dei dati, li prende sempre da un
DataSet, mai direttamente dal database. I dati estratti dal
database infatti vengono caricati in un DataSet per l’editing,
ed è su di essi che operano i Control, finchè
non si decide di salvare le modifiche nel database. Ciò
complica un po’ le cose, ma offre dei vantaggi: infatti questa
architettura consente una maggiore astrazione dal database
sottostante, garantendo quindi una compatibilità con un numero
maggiore di database. Infatti, spesso i database sono molto diversi
tra di loro per funzioni disponibili; per sfruttarli al meglio
occorre utilizzare caratteristiche avanzatie, quali locking di record
o cursori. Grazie ai DataSet, queste caratteristiche vengono
sfruttate solo nell’interazione col database, come
ottimizzazioni, e solo quando sono disponibili. In terminologia
Borland l'azione di caricare i dati da un database si dice providing.
Quando si termina di editare i dati si può salvare il
risultato indietro nel database. Il termine utilizzato per indicare
l’aggiornamento del database con le modifiche è
resolving. In generale la JBCL tenta di svolgere questa
operazione nella maniera più automatica. A volte però
occorre intervenire per “aiutare” la risoluzione in caso
di problemi che non sono gestibili in automatico dal DataSet.
Per questa funzione si utilizzano appositi componenti presenti sulla
palette standard, i resolver.
|