Tutti i documenti, considerati come classi di codice, devono derivare dalla classe del framework App.Document. Tuttavia questa derivazione può essere di tipo diretto o indiretto, cioè un documento può derivare da un documento base che a sua volta deriva da App.Document.
Ci sono due casi d’uso di derivazione indiretta di documenti:
- Quando si desidera mettere a fattor comune una serie di comportamenti per un determinato insieme di documenti.
- Quando la struttura del database contiene relazioni di estensione (is-a) fra le tabelle.
Nel primo caso il documento base, quello che contiene i metodi comuni, non deve essere collegato a nessuna tabella di database. In questo caso, istanziando i documenti estesi, si potranno indifferentemente utilizzare i metodi specifici e quelli del documento base.
Implementazione di eventi per i documenti estesi #
Quando si implementa un evento in un documento esteso, se tale evento viene definito anche in quello base occorre ricordarsi di chiamare la versione base all’interno di quella estesa.
Per questa ragione, quando l’IDE genera il metodo per l’evento nella classe estesa viene inserita la chiamata a quello base, come si vede nell’esempio seguente:
App.NBE.Impiegato.prototype.onValidate = function (options)
{
// Chiamo l'evento della classe base
yield App.NBE.DocBase.prototype.onValidate.call(this, options);
};
La chiamata all’evento della classe base viene inserita solamente se l’evento è effettivamente stato implementato nel documento base.
Estensione con relazione di tipo is-a #
Una relazione di tipo is-a a livello di database esprime il concetto di estensione di un tipo di record contenuto in una tabella rispetto ad un altro.
Un esempio di questo può essere una tabella di soggetti che contiene i dati anagrafici generali e poi una tabella di clienti che, oltre ai dati anagrafici, contiene i dati specifici dei soggetti che sono anche clienti. Per esprimere una relazione di tipo is-a, la tabella dei clienti deve avere una relazione verso quella dei soggetti di tipo 1-1, cioè che collega le primary key delle due tabelle.
La procedura di creazione documenti a partire dalla struttura del database identifica il caso indicato nell’esempio (relazioni 1-1 fra primary key di tabelle) e dichiara che il documento che possiede la relazione estende quello base.
Quando nella catena delle estensioni viene coinvolto più di un documento collegato con il database, le query generate dal framework diventano più complesse, ed in particolare:
- La query di caricamento del documento mette in join tutte le tabelle coinvolte nella catena di estensione usando la relazione 1-1 fra le primary key delle tabelle. Vengono estratte contemporaneamente tutte le proprietà definite per l’intera catena di estensione.
- Durante il salvataggio, vengono generate più query di inserimento, aggiornamento o cancellazione, una per ogni tabella coinvolta nella catena di estensione. L’ordine delle query è dal padre al figlio in caso di inserimento o dal figlio al padre in caso di cancellazione.
Si segnala che l’estensione di documenti di tipo is-a non è una pratica comune a causa del fatto che questo pattern genera strutture del database ritenute in genere meno leggibili. Più frequentemente si osserva l’utilizzo di normali relazioni identificative o possessive per esprimere concetti analoghi all’estensione.