Guigen - Strutturazione dei vari modelli dell'applicazione
La descrizione di un'applicazione guigen è strutturata in differenti modelli ciascuno dei quali descrive
una porzione delle caratteristiche dell'applicazione stessa.
Ciò permette di gestire in modo pił efficente e strutturato il modello complessivo, anche in caso
di lavoro in team.
Struttura complessiva dei modelli e delle dipendenze
Nell'immagine seguente è mostrata la struttura delle dipendenze tra i vari sotto-modelli di cui è
composto il modello che descrive un'applicazione guigen:
Nel disegno:
- ciascuna classe corrisponde ad un differente file di modello:
- il modello principale(nell'es: [root model]) contiene un istanza di GUIModel
- il modello [security model] contiene le informazioni che caratterizzano il
modello di sicurezza dell'applicazione (classe SecurityModel)
- il modello [commonTNS] contiene un TypeNamespace che rappresenta una libreria
di tipi base utilizzabili da tutti gli applicativi
- il modello [commonAppdata] contiene un AppDataGroup che raccoglie un insieme di
ApplicationData di utilizzo comune a tutti gli applicativi (es. le informazioni dell'
utente correntemente collegato)
- il modello [app module 1] contiene la modellazione di una porzione di schermate (ContentPanel)
solitamente rerlative ad una porzione di casi d'uso dell'applicativo (solitamente un'applicazione non
banale contiene più, di un AppModule)
- il modello [appdata group 1] contiene la modellazione di un insieme di ApplicationData,
solitamente (ma non necessariamente) relativi ad un AppModule; (solitamente un'applicazione non
banale contiene più di un AppDataGroup)
- il modello [type namespace 1] contiene la modellazione di un package di tipi/strutture dato
(solitamente un'applicazione non banale contiene più di un TypeNamespace)
- il modello [panel def 1] contiene la modellazione di un frammento di UI riusabile (PanelDef).
Un frammento di questo genere può essere fornito come libreria da un progetto esterno
(ad esempio per definire un pannello standard per la gestione delle informazioni di avanzamento di una istanza di
processo BPM) oppure essere modellato all'interno del progetto stesso, per essere utilizzato in più schermate.
- ciascuna dipendenza tra due classi corrisponde ad una dipendenza tra due file di modello, che si realizza
in EMF:
- mediante l'inclusione del modello da cui si dipende nel modello che presenta la dipendenza tramite
il comando "load resource..." nell'editor strutturato (es: dall'editor del modello app module 1
includere la risorsa relativa al modello app data group 1)
- referenziando (dove necessario) un oggetto appartenente al modello incluso in una property di
un oggetto appartenente al modello che include (es. referenziando un ApplicationData del modello
appdata group 1 in un data binding di un Widget contenuto in una schermata
(ContentPanel) descritta nel modello app module 1)
- i modelli rappresentati con il colore giallo sono modelli specifici dell'applicativo, mentre i modelli
rappresentati in grigio sono da considerarsi librerie da includere nel progetto
Alberatura dei file di modello
In una applicazione non banale sono tipicamente presenti vari AppModule, vari AppDataGroup,
vari TypeNamespace, oltre a poter avere la necessità di includere uno o più modelli di Paneldef.
Di conseguenza l'insieme di modelli che complessivamente descrivono l'applicazione può anche avere una elevata
cardinalità.
In pratica il numero complessivo dei modelli dipende da:
Nmod: numero degli AppModule
Ndat: numero degli AppDataGroup specifici dell'applicazione
Ntns: numero dei TypeNamespace specifici dell'applicazione
Npdef: numero dei PanelDef inclusi ed utilizzati nella struttura UI dell'applicazione
ed è calcolabile con la seguente formula:
Ntot = Nmod + Ndat + Npdef + 4
Di conseguenza è opportuno addottare anche una strutturazione del file system secondo una alberatura simile alla seguente:
- <cod_prodotto>
- <componente_web>
- <componente_web>.guimodel
- securityModel.guimodel
- modules
- <module_1>_module.guigen
- ...
- <module_Nmod>_module.guigen
- appdata
- <appdata_1>_appdata.guigen
- ...
- <appdata_Ndat>_appdata.guigen
- tns
- <package_1>_tns.guigen
- ...
- <package_Ntns>_tns.guigen
- fragments
- <panel_def_1>_pdef.guigen
- ...
- <panel_def_Npdef>_pdef.guigen
- commonTNS.guimodel
- commonAppdata.guimodel