Vypočítané a vlastních vlastností úložiště
Všechny vlastnosti domény do domény specifické pro jazyk (DSL) může být zobrazen pro uživatele v diagramu a aplikace explorer jazyk a je přístupný kód programu.Vlastnosti se však liší ve způsobu uložení jejich hodnoty.
Druhy vlastnosti domény
V definici DSL můžete nastavit druhu domény vlastnosti uvedené v následující tabulce:
Vlastnost typ domény |
Description |
---|---|
Standardní (výchozí) |
Vlastnost domain, který je uložen v Uložit a serializovaná do souboru. |
Vypočítat |
Vlastnost domény jen pro čtení, není uložen v úložišti, která se vypočítá z jiných hodnot. Například Person.Age nelze vypočítat z Person.BirthDate. Musíte zadat kód, který provede výpočet.Obvykle vypočítat hodnotu z jiné vlastnosti domény.Můžete však také použít externí prostředky. |
Vlastní úložiště |
Vlastnost domain není uložen v úložišti přímo, ale může být get a set. Máte poskytovat metody get a nastavte hodnotu. For example, Person.FullAddress could be stored in Person.StreetAddress, Person.City, and Person.PostalCode. Získat přístup k externím prostředkům, například získání a nastavení hodnoty z databáze. Kód by měl nastavit hodnoty není v úložišti při Store.InUndoRedoOrRollback je PRAVDA.Viz transakce a vlastní nastavení. |
Kód zajišťující skladování vypočítaná nebo vlastní vlastnosti
Pokud nastavíte typ vlastnosti domény vypočtené nebo vlastní úložiště, musíte zadat přístupové metody.Při vytváření řešení bude zpráva o chybě zjistit, co je třeba.
Definování výpočtových nebo vlastní úložiště vlastností
V DslDefinition.dsl, vyberte vlastnost domain diagramu nebo v DSL Explorer.
V Vlastnosti okno, nastavte druhu pole na vypočtené nebo Vlastní úložiště.
Ujistěte se, že také nastavíte jeho typu na co chcete.
Klepněte na tlačítko Transformace všechny šablony na panelu nástrojů ve Aplikaci Solution Explorer.
V nabídce Sestavení klikněte na příkaz Sestavit řešení.
Následující chybová zpráva: "YourClass neobsahuje definici GetYourProperty."
Poklepejte na chybovou zprávu.
Otevře se Dsl\GeneratedCode\DomainClasses.cs nebo DomainRelationships.cs.Nad volání metody zvýrazněné komentář vyzve k zadání implementace pro získáníYourProperty().
[!POZNÁMKA]
Tento soubor je generován z DslDefinition.dsl.Pokud tento soubor upravit, změny budou ztraceny při příštím klepnutí na tlačítko Transformace všechny šablony.Místo toho přidejte požadované metody v samostatném souboru.
Vytvořte nebo otevřete soubor třídy do samostatné složky, například CustomCode\YourDomainClass. cs.
Zkontrolujte, zda je obor názvů je stejné jako v generovaný kód.
V souboru třídy zápis částečného provádění třídy domény.Ve třídě, zápis definice pro chybějící získat metoda, která se podobá následující příklad:
namespace Company.FamilyTree { public partial class Person { int GetAgeValue() { return System.DateTime.Today.Year - this.BirthYear; } } }
Nastavíte-li druhu na Vlastní úložiště, bude rovněž nutné zadat nastavit metoda.Příklad:
void SetAgeValue(int value) { if (!Store.InUndoRedoOrRollback) this.BirthYear = System.DateTime.Today.Year - value; }
Kód by měl nastavit hodnoty není v úložišti při Store.InUndoRedoOrRollback je PRAVDA.Viz transakce a vlastní nastavení.
Sestavit a spustit řešení.
Vlastnost test.Ujistěte se, že akci zpět a znovu.
Transakce a vlastní nastavení
V Metoda Set vlastnosti vlastní úložiště nemáte otevřít transakci, protože je obvykle volána metoda uvnitř aktivní transakce.
Však může být Metoda Set například také pokud uživatel vyvolá zpět nebo znovu nebo transakce bude vrácena zpět.Při InUndoRedoOrRollback je PRAVDA, metodu Set měly chovat takto:
Není třeba změny v úložišti, jako je například přiřazení hodnoty k vlastnosti jiné domény.Zpět správce nastaví jejich hodnoty.
By však aktualizace externích zdrojů, například databáze nebo obsah souboru nebo objekty mimo úložiště.Tímto způsobem zajistíte, že jsou uchovávány v synchronism s hodnotami v úložišti.
Příklad:
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);
}
Další informace o transakčních naleznete v části Navigace a aktualizace modelu v kódu programu.