Nei paragrafi precedenti abbiamo definito due tipi di classi presenti nel progetto: la sessione (app) e le videate (view). Il primo tipo viene gestito autonomamente dal framework, il secondo viene usato per definire l’interfaccia utente dell’applicazione.
In un progetto Instant Developer Cloud è possibile definire anche altri tipi di classi, sia specializzate che generiche. Le classi specializzate vengono utilizzate per gestire in modo strutturato i dati del database o l’interfaccia verso le webapi, e saranno trattate nei capitoli relativi.
Le classi di codice generiche possono essere definite sia a livello di applicazione che all’interno di una libreria. Le librerie sono dei sottoinsiemi riutilizzabili di elementi del progetto; il contenuto di una libreria può essere referenziato da tutte le applicazioni del progetto ed è facilmente esportabile come pacchetto per essere incluso in altri progetti.
Una classe di codice generica è una classe JavaScript basata su prototype e può contenere proprietà di classe e metodi, sia statici che di istanza. Le proprietà, invece, sono definite solo a livello di istanza, in quanto le proprietà statiche sarebbero condivise fra tutte le sessioni del container generando effetti indesiderabili.
Per referenziare una classe definita a livello di applicazione è sufficiente usare l’oggetto App, ad esempio:
let m = new App.MyClass(app);
Se invece la classe è contenuta in una libreria, si deve anteporre anche il nome di quest’ultima. Ad esempio:
let m = new App.MyLibrary.MyClass(app);
Tipi di librerie e di classi #
Sono disponibili tre diversi tipi di librerie, selezionabili dalla videata delle proprietà delle stesse:
- Applicazione: la libreria definisce le interfacce con il framework server o client. Queste librerie non contengono codice specifico ma solo le definizioni; solitamente vengono importate con i pacchetti base del progetto.
- Datamodel: questo tipo di libreria definisce l’interfaccia con un determinato tipo di database (o di sistema di memorizzazione dati). Solitamente non vengono mai modificate.
- Personalizzata: questo tipo di librerie contiene elementi e codice specifico del progetto in cui sono contenute. È il tipo di default e normalmente è quello che si desidera utilizzare nei propri progetti.
Anche le classi generiche possono essere di diversi tipi:
- Personalizzata: questo tipo di classi sono le più comuni e contengono il codice applicativo specifico del progetto in cui sono contenute.
- Stile / Tema: questo tipo di classi servono per personalizzare il tema grafico e lo stile dell’applicazione. In particolare le classi di tipo tema permettono di personalizzare a design time le proprietà del tema dell’applicazione. A tal fine, la proprietà deve avere lo stesso nome di quella del tema e la classe deve essere indicata come la classe “tema” nelle proprietà dell’applicazione.
Creazione della classe di tipo tema
Impostazione della proprietà primary
Impostazione di MyTheme come tema dell’applicazione
Ora il colore primary è definito come red
- Elemento: le classi di tipo elemento definiscono l’interfaccia verso un elemento visuale di uno specifico tipo. Per aggiungere al progetto componenti visuali non presenti nelle librerie di tipo è necessario definire una classe di tipo Elemento all’interno di una libreria di tipo Applicazione.
- Videata: definisce la classe base di tutte le videate. Non deve essere né usata né modificata. Solitamente viene importata con i pacchetti base del progetto.
- Documento: definisce la classe base di tutti i documenti. Non deve essere né usata né modificata. Solitamente viene importata con i pacchetti base del progetto.
- Datamodel: definisce un’interfaccia verso un database. Deve essere contenuta in una libreria di tipo Datamodel. Solitamente non viene utilizzata, ma solo importata con i pacchetti base del progetto.
Proprietà e passaggio di parametri #
In questo paragrafo abbiamo visto che tutti gli elementi costitutivi di un progetto Instant Developer Cloud sono classi, anche la sessione e le videate.
Ognuna di queste classi può avere proprietà specifiche, inseribili tramite i comandi dell’IDE. Può essere interessante esemplificare il miglior modo di condividere il valore delle proprietà fra le istanze di queste classi.
Proprietà di sessione (applicazione) #
Le proprietà inserite a livello dell’oggetto applicazione vengono memorizzate a livello di ogni singola sessione e possono essere referenziate in tutto il codice applicativo tramite l’espressione app.<nome proprietà>.
Un esempio di proprietà che di solito si aggiunge alla sessione è l’oggetto che descrive l’utente collegato. Se ad esempio questa proprietà si chiama loggedUser e la tabella di database corrispondente ha un campo id, si potrà accedere a tale valore in tutta l’applicazione scrivendo app.loggedUser.id.
Proprietà di videata #
Le proprietà di videata sono visibili all’interno del codice della videata stessa tramite l’espressione view.<nome proprietà>. Solitamente vengono passate alla videata quando questa si apre tramite le opzioni del metodo di apertura. La videata riceve i parametri nell’evento onLoad.
Proprietà di documento #
Un documento è una classe speciale che rappresenta un’entità del framework ORM di Instant Developer Cloud. Le proprietà di un documento possono essere impostate nel costruttore passandole come oggetto. Ad esempio:
var p = new App.BE.Product(app, {ProductName:”Chai”});
Proprietà di classe #
Le proprietà di una classe generica sono visibili all’interno del codice della classe stessa. Le proprietà possono essere impostate dopo aver costruito l’oggetto chiamando un metodo specifico.