Přepsání a rozšiřování generované třídy
DSL Definition je platforma, na které můžete vytvořit výkonnou sadu nástrojů, které jsou založeny na domény specifické pro jazyk.Mnoho rozšíření a úpravy lze provést lokální změny a rozšíření třídy, které jsou generovány z definice DSL.Tyto třídy zahrnují nejen třídy doména, které explicitně definovali v diagramu definice DSL, ale také jiné třídy, které definují nástrojů, explorer, serializace atd.
Mechanismy rozšíření
Jsou poskytovány několika mechanismy umožňují rozšířit do generovaného kódu.
Potlačení metody částečné třídy
Definice dílčí třídy umožňují tříd definovaných ve více než jednom místě.Umožňuje oddělit generovaný kód z kódu, který sami psát.Ručně zapsat kód můžete přepsat zděděny generovaný kód třídy.
Například v DSL Definition definovat třídu domény s názvem Book, můžete napsat vlastní kód, který přidá přepsání metody:
public partial class Book
{
protected override void OnDeleting()
{
MessageBox.Show("Deleting book " + this.Title);
base.OnDeleting();
} }
[!POZNÁMKA]
Chcete-li přepsat metody generované třídy vždy napište kód v souboru, který je oddělen od vytvořených souborů.Soubor je obvykle obsažen ve složce s názvem CustomCode.Pokud provedete změny generovaný kód, budou ztraceny při znovu vygenerovat kód z definice DSL.
Chcete-li zjistit, jaké metody můžete přepsat, přepsat typ třídy, následované mezerou.Popis technologie IntelliSense bude informovat, jaké metody může být přepsána.
Dvojité odvozené třídy
Většina metod v generované třídy jsou zděděny z pevnou sadu tříd v oborech názvů modelování.Některé metody však jsou definovány generovaného kódu.Obvykle to znamená, že nelze přepsat. jeden dílčí třídy nelze přepsat metody, které jsou definovány v jiné částečné definici stejné třídy.
Tyto metody však lze přepsat nastavením Generuje dvojité odvozené příznak pro třídu domény.Tato dvě třídy příčiny generování, přičemž základní třídy druhé.Všechny definice metody a vlastnosti jsou základní třídy a pouze konstruktoru je v odvozené třídě.
Například ve vzorku Library.dsl CirculationBook domény třída má GeneratesDouble Derived vlastnost nastavena na hodnotu true.Vygenerovaný kód třídy domény obsahuje dvě třídy:
CirculationBookBase, což je abstrakt a obsahuje metody a vlastnosti.
CirculationBook, který je odvozen od CirculationBookBase.Je prázdná, s výjimkou jeho konstruktory.
Chcete-li potlačit jakoukoli metodu, například vytvořit částečná definice třídy odvozené CirculationBook.Přepsat generované metod a metod zděděné z rámce modelování.
Tuto metodu můžete použít u všech typů prvků, včetně prvků modelu, vztahy, tvary, diagramy a konektory.Je také možné přepsat metody vygenerované třídy.Některé generované třídy například ToolboxHelper jsou vždy odvozeny dvojité.
Vlastní konstruktory
Konstruktor nelze přepsat.I dvojité odvozené třídy konstruktor musí být v odvozené třídě.
Pokud chcete zadat vlastní konstruktor, můžete to provést nastavením Has Custom Constructor pro třídu domény v definici DSL.Po klepnutí na tlačítko Transformace všechny šablony, generovaný kód nebude obsahovat konstruktor pro danou třídu.Bude zahrnovat volání konstruktoru chybí.To způsobí, že zpráva o chybě při vytváření řešení.Poklepejte na zprávu o chybě poznámku do generovaného kódu, který vysvětluje, co by měla poskytnout.
Zápis definice dílčí třídy v souboru odděleném od vytvořených souborů a poskytuje konstruktor.
Rozšiřovací body označené příznakem
Bod příznakem rozšíření je v definici DSL, kde můžete nastavit zaškrtnutí políčka označíte, že bude poskytovat vlastní metodu nebo vlastnost.Příkladem jsou vlastní konstruktory.Další příklady nastavení Kind vypočtené nebo vlastní úložiště nebo nastavení vlastnosti domény Je vlastní příznak Tvůrce připojení.
V každém případě znovu vygenerovat kód, a nastaven příznak sestavení chyba způsobí.Poklepejte na chybu poznámku, která vysvětluje, co je nutné poskytnout.
Pravidla
Správce transakcí umožňuje definovat pravidla, která spustit před koncem transakce, ve kterém určený události došlo, jako je například změna vlastnosti.Pravidla se obvykle používají k udržení synchronism mezi různými prvky v úložišti.Pravidla jsou pro Ujistěte se, že diagram zobrazuje aktuální stav modelu.
Pravidla jsou definovány na základě třídy, takže není nutné mít kód, registruje pravidlo pro každý objekt.Další informace naleznete v tématu Pravidla rozšířit změny v rámci modelu.
Události v úložišti
Modelování úložiště poskytuje mechanismus událostí, můžete použít pro naslouchání určité typy změn v úložišti, včetně přidání a odstranění prvků změny hodnot vlastností a tak dále.Obslužné rutiny události se nazývají po uzavření transakce, ve kterém byly provedeny změny.Tyto události se obvykle používají k aktualizaci zdroje mimo úložiště.
.NET události
K odběru některé události obrazců.Například můžete poslouchat klepnutí myši na obrazec.Musíte napsat kód, který se přihlásí k události pro každý objekt.Tento kód lze zapsat v lokálními InitializeInstanceResources().
Některé události jsou vytvářeny na ShapeFields, které slouží k nakreslení obrazce sklenářské.Příklad naleznete v tématu Postup: klepněte na obrazec nebo Decorator zachytit.
Tyto události obvykle nedochází uvnitř transakce.Chcete-li provést změny v úložišti, měli byste vytvořit transakce.