Proprietà di archiviazione calcolate e personalizzate
Tutte le proprietà di dominio in un linguaggio specifico (DSL) di dominio possono essere visualizzati nel diagramma e nell'esploratore del linguaggio e sono accessibili dal codice programma.Tuttavia, le proprietà differiscono nel modo in cui i valori vengono archiviati.
Tipi di proprietà del dominio
Nella definizione di modello DSL, è possibile impostare tipo per una proprietà di un dominio, come indicato nella seguente tabella:
Tipo della proprietà del dominio |
Descrizione |
---|---|
standard (Impostazione predefinita) |
Una proprietà di dominio che viene salvata in archivio e serializzato per archiviare. |
calcolato |
Una proprietà di sola lettura di dominio che non viene salvata nell'archivio, ma viene calcolata da altri valori. Ad esempio, Person.Age potrebbe essere calcolato da Person.BirthDate. È necessario fornire codice che esegue il calcolo.In genere, si calcola il valore da altre proprietà del dominio.Tuttavia, è anche possibile utilizzare le risorse esterne. |
archiviazione personalizzata |
Una proprietà di dominio che non viene salvata direttamente nell'archivio, ma può essere sia ottiene e imposta. È necessario fornire i metodi che consentono di ottenere e impostare il valore. Ad esempio, Person.FullAddress potrebbe essere archiviati in Person.StreetAddress, Person.Citye Person.PostalCode. È possibile accedere alle risorse esterne, ad esempio per ottenere e impostare i valori di un database. Il codice non deve impostare i valori nell'archivio quando Store.InUndoRedoOrRollback è true.vedere Transazioni e funzioni Set di insiemi. |
Fornendo il codice per una proprietà calcolata personalizzata o di archiviazione
Se si imposta il tipo di proprietà di dominio all'archiviazione calcolata o personalizzata, è necessario fornire i metodi di accesso.Quando si compila la soluzione, una segnalazione errori viene indicato quale è obbligatorio.
Per definire una proprietà calcolata personalizzata o di archiviazione
In DslDefinition.dsl, selezionare la proprietà del dominio nel diagramma o in DSL Esplora Risorse.
in proprietà la finestra, impostare tipo campo su calcolato o archiviazione personalizzata.
Assicurarsi che consente di impostare il proprio tipo a cui si desidera visualizzare.
Fare clic su Trasformazione di tutti i modelli nella barra degli strumenti di Esplora soluzioni.
Scegliere Compila soluzione dal menu Compila.
Viene visualizzato il seguente messaggio di errore: “La classe non contiene una definizione per GetProprietà„.
Fare doppio clic sul messaggio di errore.
Il Dsl \GeneratedCode\DomainClasses.cs or DomainRelationships .cs viene aperto.Nella chiamata al metodo evidenziata, un commento viene richiesto di fornire un'implementazione per GetProprietà().
[!NOTA]
Questo file viene generato da DslDefinition.dsl.Se si modifica questo file, le modifiche andranno perse la prossima volta che si fa clic su Trasformazione di tutti i modelli.Al contrario, aggiungere il metodo obbligatorio in un file separato.
Creare o aprire il file in una cartella separata, ad esempio CustomCode della classe \TheDomainClassCS.
Assicurarsi che lo spazio dei nomi corrisponda al codice generato.
Nel file di classe, scrivere un'implementazione parziale della classe di dominio.Nella classe, scrivere una definizione per negativo ottenere metodo simile al seguente:
namespace Company.FamilyTree { public partial class Person { int GetAgeValue() { return System.DateTime.Today.Year - this.BirthYear; } } }
Se si imposta tipo in archiviazione personalizzata, sarà necessario fornire un oggetto set metodo.Di seguito è riportato un esempio:
void SetAgeValue(int value) { if (!Store.InUndoRedoOrRollback) this.BirthYear = System.DateTime.Today.Year - value; }
Il codice non deve impostare i valori nell'archivio quando Store.InUndoRedoOrRollback è true.vedere Transazioni e funzioni Set di insiemi.
Compilare ed eseguire la soluzione.
verificare la proprietà.Assicurarsi di provare Annulla e Ripetizione.
Transazioni e funzioni Set di insiemi
Nel metodo set di proprietà personalizzata di archiviazione, non è necessario aprire una transazione, poiché il metodo in genere viene chiamato in una transazione attiva.
Tuttavia, il metodo set può essere chiamato anche se i l'utente richiama il comando di annullamento o ripetizione, o se una transazione viene rotolanda indietro.quando InUndoRedoOrRollback è true, il metodo set deve comportarsi come segue:
Non deve apportare modifiche nell'archivio, come assegnare valori alle altre proprietà del dominio.L'amministratore di annullamento consente di impostare i valori.
Tuttavia, deve aggiornare tutte le risorse esterne, quali database o il contenuto del file, oppure oggetti fuori dell'archivio.In questo modo è possibile accertarsi che siano mantenuti nel sincronismo con i valori nell'archivio.
Di seguito è riportato un esempio:
void SetAgeValue(int value)
{
// If we are in Undo, no changes to Store objects:
if (!this.Store.InUndoRedoOrRollback)
{
this.BirthYear = System.DateTime.Today.Year - value;
}
// But always update external objects:
System.IO.File.WriteAllText(AgeFile, value);
}
Per ulteriori informazioni sulle transazioni, vedere Esplorazione e aggiornamento di un modello nel codice del programma.
Vedere anche
Riferimenti
Proprietà delle proprietà di dominio
Concetti
Esplorazione e aggiornamento di un modello nel codice del programma