Sdílet prostřednictvím


Definování jazyka specifického pro doménu

Pokud chcete definovat jazyk specifický pro doménu (DSL), vytvoříte řešení sady Visual Studio ze šablony. Klíčovou součástí řešení je diagram definice DSL, který je uložen v DslDefinition.dsl. Definice DSL definuje třídy a tvary DSL. Po úpravě a přidání do těchto prvků můžete přidat kód programu pro přizpůsobení DSL podrobněji.

Pokud s seznamy DSL začínáte, doporučujeme pracovat v testovacím prostředí nástrojů DSL, které najdete na tomto webu: Sada SDK pro vizualizaci a modelování.

Výběr řešení šablony

Chcete-li definovat DSL, musíte mít nainstalované následující součásti:

  • Visual Studio
  • Úloha vývoje rozšíření sady Visual Studio (včetně sady Visual Studio SDK)
  • Sada SDK pro modelování (instalace jako jednotlivé komponenty v sadě Visual Studio)

Poznámka:

Komponenta Transformace textové šablony se automaticky nainstaluje jako součást sady funkcí vývoje rozšíření sady Visual Studio. Můžete ho také nainstalovat z karty Jednotlivé komponenty Instalační program pro Visual Studio v kategorii sad SDK, knihoven a architektur. Nainstalujte komponentu Modeling SDK z karty Jednotlivé komponenty .

Pokud chcete vytvořit nový jazyk specifický pro doménu, vytvoříte nové řešení sady Visual Studio pomocí šablony projektu Pro konkrétní doménu.

Vytvoření řešení DSL

  1. Vytvořte nový projekt jazyka specifický pro doménu.

    Otevře se Průvodce jazykem specifický pro doménu a zobrazí seznam řešení DSL šablony.

  2. Kliknutím na každou šablonu zobrazíte popis. Vyberte řešení, které se nejvíce podobá tomu, co chcete vytvořit.

    Každá šablona DSL definuje základní funkční DSL. Tento DSL upravíte tak, aby vyhovoval vašim vlastním požadavkům.

    Kliknutím na každou ukázku zobrazíte další informace.

    • Vyberte Tok úlohy a vytvořte DSL, který má plavecké dráhy. Plavecké dráhy jsou svislé nebo vodorovné oddíly diagramu.

    • Vyberte modely komponent a vytvořte DSL s porty. Porty jsou malé obrazce na okraji většího obrazce.

    • Výběrem diagramů tříd definujte DSL s obrazci oddílů. Obrazce prostoru obsahují seznamy položek.

    • V jiných případech vyberte minimální jazyk nebo pokud si nejste jistí.

    • Vyberte Minimální Návrhář WinForm nebo Minimal WPF Designer vytvořit DSL, který se zobrazí na model Windows Forms nebo WPF povrchu. K definování editoru budete muset napsat kód. Další informace naleznete v následujících tématech:

      Vytvoření jazyka specifického pro doménu založeného na modelu Windows Forms

      Vytvoření jazyka specifického pro doménu založeného na WPF

  3. Na příslušné stránce průvodce zadejte příponu názvu souboru dsl. Toto je přípona, kterou budou používat soubory obsahující instance vašeho DSL.

    • Zvolte příponu názvu souboru, která není přidružená k žádné aplikaci v počítači nebo v libovolném počítači, na který chcete nainstalovat DSL. Například docx a htm by byly nepřijatelné přípony názvů souborů.

    • Průvodce vás upozorní, pokud se zadané rozšíření používá jako DSL. Zvažte použití jiné přípony názvu souboru. Experimentální instanci sady Visual Studio SDK můžete také resetovat, abyste vypnuli staré experimentální návrháře. V nabídce Start systému Windows zadejte resetování sady Visual Studio a spusťte příkaz Obnovit experimentální instanci sady Microsoft Visual Studio odpovídající vaší verzi sady Visual Studio.

  4. Můžete buď upravit nastavení na ostatních stránkách, nebo ponechat výchozí hodnoty.

  5. Klikněte na Finish (Dokončit).

    Průvodce vytvoří řešení, které obsahuje dva nebo tři projekty, a vygeneruje kód z definice DSL.

    Uživatelské rozhraní se teď podobá následujícímu obrázku.

    Dsl Designer

    Toto řešení definuje jazyk specifický pro doménu. Další informace naleznete v tématu Přehled uživatelského rozhraní nástroje pro konkrétní doménu.

Testování řešení

Řešení šablony poskytuje funkční DSL, který můžete upravit nebo použít tak, jak je.

Pokud chcete řešení otestovat, stiskněte klávesu F5 nebo CTRL+F5. V experimentálním režimu se otevře nová instance sady Visual Studio.

V nové instanci sady Visual Studio otevřete v Průzkumník řešení ukázkový soubor. Otevře se jako diagram s panelem nástrojů.

Pokud spustíte řešení, které jste vytvořili ze šablony minimálního jazyka , bude experimentální sada Visual Studio vypadat podobně jako v následujícím příkladu:

Ukázkový strom jazyka specifický pro doménu v sadě Visual Studio

Experimentujte s nástroji. Vytvořte prvky a propojte je.

Zavřete experimentální instanci sady Visual Studio.

Poznámka:

Po úpravě DSL už nebudete moct zobrazit obrazce v ukázkovém testovacím souboru. Budete ale moct vytvářet nové prvky.

Úprava šablony DSL

Přejmenujte a zachovejte některé nebo všechny třídy domény a třídy obrazců v definici DSL šablony. Nové názvy tříd by měly být platné názvy CLR bez mezer nebo interpunkce.

Je zvlášť užitečné zachovat tyto třídy:

  • Kořenová třída se zobrazí v levém horním rohu diagramu definice DSL v části Třídy a relace. Přejmenujte ho na jiný název než DSL. Například DSL s názvem MusicLibrary může mít kořenovou třídu s názvem Music.

  • Třída diagramu se zobrazí v pravém dolním rohu diagramu definice DSL ve sloupci Prvky diagramu. Možná se budete muset posunout doprava, abyste ho viděli. Obvykle se jmenuje YourDslDiagram.

  • Pokud jste použili šablonu Toku úloh a chcete vytvořit diagramy s plavkovými dráhami, ponechte a přejmenujte třídu domény Actor a obrazec ActorSwimlane.

    Odstraňte nebo přejmenujte jiné třídy tak, aby vyhovovaly vašim požadavkům.

Vzory pro definování DSL

Doporučujeme vyvinout DSL přidáním nebo úpravou jedné nebo dvou funkcí najednou. Přidejte funkci, spusťte DSL a otestujte ji a pak přidejte jednu nebo dvě další funkce. Typická funkce dsl může být:

  • Doménová třída, vztah vložení, který spojuje prvek s modelem, obrazec potřebný k zobrazení prvků této třídy v diagramu, a nástroj elementu, který umožňuje uživatelům vytvářet prvky.

  • Vlastnosti domény třídy domény a dekorátory, které je zobrazují na obrazci.

  • Referenční vztah a spojnice, které ho zobrazují v diagramu a nástroji spojnice, které uživatelům umožňují vytvářet odkazy.

  • Vlastní nastavení, které vyžaduje kód programu, například omezení ověření nebo příkaz nabídky.

    Následující části popisují, jak vytvořit nejužitečnější druhy funkcí DSL. Existuje mnoho dalších vzorů, se kterými lze vytvořit DSL, ale ty se nejčastěji používají.

Poznámka:

Po přidání funkce nezapomeňte kliknout na transformovat všechny šablony na panelu nástrojů Průzkumník řešení před sestavením a spuštěním DSL.

Následující obrázek znázorňuje třídy a relace části DSL, které se používají jako příklad v tomto tématu.

Vkládání a odkazování relací

Další obrázek je ukázkový model tohoto DSL:

Model instance vygenerovaného DSL

Poznámka:

"Model" odkazuje na instanci vašeho DSL, kterou uživatelé vytvářejí, a obvykle se zobrazí jako diagram. Toto téma popisuje diagram definice DSL i diagramy modelu, které se zobrazí při použití DSL.

Definování tříd domény

Třídy domény představují koncepty vašeho DSL. Instance jsou prvky modelu. Například v MusicLibrary DSL můžete mít doménové třídy s názvem Album a Song.

Pokud chcete vytvořit třídu domény, můžete přetáhnout z nástroje Pojmenovaná třída domény do diagramu a potom třídu přejmenovat.

Další informace naleznete v tématu Vlastnosti tříd domény.

Vytvoření vztahu vkládání pro každou třídu domény

Každá třída domény s výjimkou kořenové třídy musí být cílem alespoň jedné relace vložení, nebo musí dědit z třídy, která je cílem vztahu vkládání.

V modelu je každý prvek modelu uzlem v jednom stromu vztahů vkládání. Zdroj a cíl relace vkládání se často označují jako nadřazené a podřízené položky.

Výběr nadřazeného objektu pro třídu domény závisí na tom, jak chcete, aby životnost prvků závisela na jiných prvcích. Pokud je uzel stromu odstraněný, jeho dílčí strom se obvykle odstraní také. Třídy elementu, které mají nezávislou existenci, jsou proto vloženy přímo do kořenové třídy.

Pokud obvykle zobrazíte prvek uvnitř jiného prvku, chcete označit vztah vlastníka. V takovém případě je nejvhodnější nadřazenou třídou třída kontejneru. Výjimkou je, když položka, kterou vidíte uvnitř kontejneru, je ve skutečnosti pouze odkaz na nezávislý prvek. V takovém případě odstranění kontejneru odstraní odkaz, ale ne jeho cíl.

Ve vzorech definice DSL popsané v tomto tématu budeme předpokládat, že prvky zobrazené uvnitř kontejneru budou odstraněny při odstranění kontejneru. Složitější schémata jsou možná a lze ji dosáhnout definováním pravidel.

Zobrazení elementu Parent (embedding) – třída Příklad v šabloně řešení DSL
Obrazec v diagramu

Plavecká dráha.
Kořenová třída DSL. Minimální jazyk.

Tok úkolu: Třída objektu actor.
Obrazec v plavecké dráhy Domain class of elements that are displayed as swimlanes. Tok úloh: Třída úlohy.
Položka v seznamu v obrazci, kde je položka odstraněna, pokud je odstraněn kontejner.

Port na okraji obrazce
Doménová třída, která je namapovaná na obrazec kontejneru. Diagram tříd: Třída atributu

Diagram komponenty: Třída portu
Položka v seznamu, neodstraněná, pokud je kontejner odstraněn. Kořenová třída DSL.

V seznamu se zobrazí odkazy.
Nezobrazuje se přímo. Třída, jejíž součástí je.

V příkladu Knihovny hudby se alba zobrazují jako obdélníky, ve kterých jsou uvedeny názvy skladeb. Proto nadřazený album je kořenová třída Hudba a nadřazená skladba je Album.

Chcete-li vytvořit třídu domény a její vložení najednou, klikněte na nástroj Vložit relace , potom klikněte na nadřazenou třídu a potom klikněte na prázdnou část diagramu.

Obvykle není nutné upravit název vztahu vkládání a jeho rolí, protože budou automaticky sledovat názvy tříd.

Další informace naleznete v tématu Vlastnosti vztahů domény a vlastnosti rolí domény.

Poznámka:

Vkládání není stejné jako dědičnost. Podřízené položky ve vztahu vkládání nedědí funkce od jejich rodičů.

Přidání vlastností domény do každé třídy domény

Vlastnosti domény ukládají hodnoty. Příklady: Name, Title, Publication Date.

Ve třídě klikněte na Vlastnosti domény , stiskněte klávesu ENTER a zadejte název vlastnosti. Výchozí typ vlastnosti domény je String. Pokud chcete typ změnit, vyberte vlastnost domény a nastavte typ v okně Vlastnosti . Pokud požadovaný typ není v rozevíracím seznamu, přečtěte si téma Přidání typů vlastností.

Nastavte vlastnost Název elementu. Vyberte vlastnost domény, kterou lze použít k identifikaci prvků v průzkumníku jazyků. Například ve třídě domény Song, kterou můžete vybrat vlastnost Název domény. V okně Vlastnosti nastavte vlastnost Is Element Name na true.

Vytvoření odvozených tříd domény

Pokud chcete, aby doménová třída měla varianty, které dědí jeho vlastnosti a vztahy, vytvořte třídy, které jsou z ní odvozeny. Album může mít například odvozené třídy WMA a MP3.

Pomocí nástroje Domain Class vytvořte odvozenou třídu.

Klikněte na nástroj Dědičnost, klepněte na odvozenou třídu a potom klepněte na základní třídu.

Zvažte nastavení modifikátoru dědičnosti základní třídy na abstraktní. Pokud si myslíte, že možná budete potřebovat instance základní třídy, zvažte vytvoření samostatné odvozené třídy pro ně.

Odvozené třídy dědí vlastnosti a role jejich základních tříd.

Vazbu diagramu definice DSL

Když přidáte relace, některé z vašich tříd se zobrazí na více místech. Chcete-li snížit počet výskytů a zvětšit diagram, klikněte pravým tlačítkem myši na cílovou třídu relace a potom klepněte na příkaz Přenést strom sem. U opačného efektu klikněte pravým tlačítkem myši na cílovou třídu relace a klikněte na Rozdělit strom. Pokud tyto příkazy nabídky nevidíte, ujistěte se, že je vybraná pouze doménová třída.

K přesunutí tříd domény a tříd obrazců použijte kombinaci kláves CTRL+ŠIPKA NAHORU a CTRL+ŠIPKA DOLŮ.

Testování tříd domény

Otestování nových tříd domény
  1. Chcete-li vygenerovat kód návrháře DSL, klikněte na tlačítko Transformovat všechny šablony na panelu nástrojů Průzkumník řešení. Tento krok můžete automatizovat. Další informace naleznete v tématu Automatizace transformace všech šablon.

  2. Sestavte a spusťte DSL. Stisknutím klávesY F5 nebo CTRL+F5 spusťte novou instanci sady Visual Studio v experimentálním režimu. V experimentální instanci sady Visual Studio otevřete nebo vytvořte soubor s příponou názvu vašeho DSL.

  3. Otevřete Průzkumníka. Na straně diagramu je okno průzkumníka jazyků, které se obvykle jmenuje YourLanguage Explorer. Pokud toto okno nevidíte, může být na kartě pod Průzkumník řešení. Pokud ho nemůžete najít, v nabídce Zobrazit přejděte na jiný systém Windows a potom klikněte na YourLanguage Explorer.

    Průzkumník zobrazí stromové zobrazení modelu.

  4. Vytvořte nové prvky. Klikněte pravým tlačítkem myši na kořenový uzel v horní části a potom klikněte na přidat novoutřídu YourClass.

    V Průzkumníku jazyka se zobrazí nová instance předmětu.

  5. Při vytváření nových instancí ověřte, že každá instance má jiný název. K tomu dojde pouze v případě, že jste nastavili příznak Is Element Name u vlastnosti domény.

  6. Prozkoumejte vlastnosti domény. S vybranou instancí předmětu zkontrolujte okno Vlastnosti. Mělo by se zobrazit vlastnosti domény, které jste definovali v této třídě domény.

  7. Uložte soubor, zavřete ho a znovu ho otevřete. Po rozbalení uzlů by měly být v průzkumníku viditelné všechny instance, které jste vytvořili.

Definování obrazců v diagramu

Třídy prvků, které se zobrazují v diagramu, můžete definovat jako obdélníky, tři tečky nebo ikony.

Definování třídy prvků, které se zobrazují jako obrazce v diagramu

  1. Definujte a otestujte třídu domény, jak je popsáno v části Definování tříd domény .

    • Nadřazenou třídou by měla být kořenová třída. To znamená, že mezi kořenovou třídou a novou třídou domény by měl existovat vztah vkládání.

    • Pokud diagram obsahuje plavecké dráhy, nadřazený objekt může být třída domény, která je namapovaná na plaveckou dráha. Než budete pokračovat tímto postupem, přečtěte si téma Definování DSL, který má plavecké dráhy.

  2. Přidejte třídu obrazce, která představuje prvky v diagramu modelu. Přetáhněte z jednoho z následujících nástrojů do diagramu definice DSL:

    • Tvar geometrie poskytuje obdélník nebo tři tečky.

    • Obrazec obrázku zobrazí obrázek, který zadáte.

    • Obrazec prostoru je obdélník, který obsahuje jeden nebo více seznamů položek.

      Přejmenujte třídu obrazce, která se zobrazí na pravé straně diagramu definice DSL v části Obrazce a spojnice.

  3. Definujte obrázek, pokud jste vytvořili obrazec obrázku.

    1. Vytvořte soubor obrázku libovolné velikosti. Podporují se formáty BMP, JPEG, GIF a EMF.

    2. V Průzkumník řešení přidejte soubor do řešení v části Dsl\Resources.

    3. Vraťte se do diagramu definice DSL a vyberte novou třídu obrazce obrázku.

    4. V okno Vlastnosti klepněte na vlastnost Image.

    5. V dialogovém okně Vybrat obrázek klikněte na rozevírací nabídku v části Název souboru a vyberte obrázek.

  4. Pokud chcete zobrazit vlastnosti domény, přidejte do obrazce textové dekorátory.

    Pokud chcete zobrazit název nebo název prvku modelu, budete pravděpodobně potřebovat alespoň jeden textový dekorátor.

    Klikněte pravým tlačítkem myši na záhlaví třídy obrazce, přejděte na příkaz Přidat a potom klikněte na příkaz Dekorátor textu. Nastavte název dekorátoru a v okno Vlastnosti nastavte jeho pozici.

  5. Propojte každý obrazec s mapou elementu diagramu k doménové třídě, kterou má zobrazit.

    Klikněte na nástroj Mapování elementů diagramu a potom klikněte na třídu domény a potom klikněte na třídu obrazce.

  6. Namapujte vlastnosti na dekorátory textu.

    1. Vyberte šedou čáru mezi třídou domény a třídou obrazce, která představuje mapu prvků diagramu.

    2. V okně s podrobnostmi DSL klikněte na kartu Mapy dekorátoru. Pokud se okno s podrobnostmi DSL nezobrazuje, přejděte v nabídce Zobrazit na jiný systém Windows a klepněte na tlačítko DSL Podrobnosti. Často je nutné zvýšit horní část tohoto okna, aby se zobrazil veškerý jeho obsah.

    3. Vyberte název dekorátoru. V části Zobrazit vlastnost vyberte název vlastnosti třídy domény. Tento postup opakujte pro každý dekorátor.

      Pokud chcete zobrazit vlastnost souvisejícího elementu, klikněte navigátor stromu rozevíracího seznamu v části Cesta k zobrazení vlastnosti.

    4. Ujistěte se, že se vedle každého názvu dekorátoru zobrazuje značka zaškrtnutí.

      Okno Mapování obrazců a podrobnosti DSL

  7. Vytvořte položku panelu nástrojů pro vytváření prvků třídy domény.

    1. V Průzkumníku DSL rozbalte uzel Editoru a všechny jeho dílčí uzly.

    2. Klikněte pravým tlačítkem myši na uzel pod kartami nástrojů, které mají stejný název jako váš DSL, například MusicLibrary. Klikněte na Přidat nástroj elementu.

      Poznámka:

      Pokud kliknete pravým tlačítkem myši na uzel Nástroje , nezobrazí se nástroj Přidat prvek. Místo toho klikněte na uzel nad ním.

    3. V okno Vlastnosti s vybraným novým nástrojem elementu nastavte Třídu na třídu domény, kterou jste nedávno přidali.

    4. Nastavit popisek a popis.

    5. Nastavte ikonu panelu nástrojů na ikonu, která se zobrazí v sadě nástrojů. Můžete ho nastavit na novou ikonu nebo ikonu, kterou už používá jiný nástroj.

      Pokud chcete vytvořit novou ikonu, otevřete dsl\Resources v Průzkumník řešení. Zkopírujte a vložte jeden z existujících souborů nástroje elementU BMP. Přejmenujte vloženou kopii a poklikáním ji upravte.

      Vraťte se do diagramu definice DSL, vyberte nástroj a v okno Vlastnosti klepněte na [...] v sadě nástrojů Ikona. V dialogovém okně Vybrat rastrový obrázek vyberte v rozevírací nabídce soubor .BMP.

    Další informace naleznete v tématu Vlastnosti geometrických obrazců a vlastností obrazců obrazců.

Testování obrazců

  1. Chcete-li vygenerovat kód návrháře DSL, klikněte na tlačítko Transformovat všechny šablony na panelu nástrojů Průzkumník řešení.

  2. Sestavte a spusťte DSL. Stisknutím klávesY F5 nebo CTRL+F5 spusťte novou instanci sady Visual Studio v experimentálním režimu. V experimentální instanci sady Visual Studio otevřete nebo vytvořte soubor s příponou názvu vašeho DSL.

  3. Ověřte, že se na panelu nástrojů zobrazují nástroje prvků.

  4. Obrazce můžete vytvořit přetažením z nástroje do diagramu modelu.

  5. Ověřte, že se zobrazí každý dekorátor textu a že:

    1. Můžete ho upravit, pokud jste nenastavili příznak Is UI Read Only u vlastnosti domény.

    2. Při úpravě vlastnosti v okno Vlastnosti nebo v dekorátoru se aktualizuje druhé zobrazení.

    Po prvním otestování obrazce můžete chtít upravit některé jeho vlastnosti a přidat některé pokročilejší funkce. Další informace naleznete v tématu Přizpůsobení a rozšíření jazyka specifického pro doménu.

Definování referenčních relací

Můžete definovat odkazový vztah mezi libovolnou zdrojovou třídou domény a libovolnou cílovou třídou domény. Referenční relace se obvykle zobrazují v diagramu jako spojnice, což jsou čáry mezi obrazci.

Pokud se například hudební alba a umělci zobrazují jako obrazce v diagramu, můžete definovat relaci s názvem ArtistsAppearedOnAlbums, která odkazuje na alba, na kterých pracovali. Podívejte se na příklad na obrázku.

Model instance vygenerovaného DSL

Odkazové relace mohou také propojit prvky stejného typu. Například v DSL představující rodinný strom je vztah mezi rodiči a jejich dětmi referenční vztah od osoby k osobě.

Definování vztahu odkazu

Klikněte na nástroj Referenční vztah, potom klikněte na zdrojová třída domény relace a potom klikněte na cílovou třídu domény. Cílová třída může být stejná jako zdrojová třída.

Každá relace má dvě role reprezentované čárou na každé straně pole relace. Můžete vybrat každou roli a nastavit její vlastnosti v okno Vlastnosti.

Zvažte přejmenování rolí. Například ve vztahu mezi osobou a osobou můžete chtít změnit výchozí jména na rodiče a děti, nadřízený a podřízené, učitel a student atd.

V případě potřeby upravte násobená města jednotlivých rolí. Pokud chcete, aby každá osoba měla maximálně jednoho Manažera, nastavte násobnost, která se zobrazí pod popiskem Manažer v diagramu na hodnotu 0..1.

Přidejte do relace vlastnosti domény. Na obrázku má vztah Artist-Album vlastnost role.

Nastavte Vlastnost Allows Duplicates relace, pokud může existovat více než jedno propojení stejné třídy mezi stejnou dvojicí prvků modelu. Můžete například umožnit učiteli učit více než jeden předmět stejného studenta.

Mapy obrazců pro spojnice

Další informace naleznete v tématu Vlastnosti vztahů domény a vlastnosti rolí domény.

Definování spojnice pro zobrazení relace

Spojnice zobrazuje čáru mezi dvěma obrazci v diagramu modelu.

Přetáhněte nástroj Spojnice do diagramu definice DSL.

Pokud chcete na spojnici zobrazit popisky, přidejte dekorátory textu. Nastavte jejich pozice. Pokud chcete, aby uživatel přesunul dekorátor textu, nastavte jeho vlastnost Je přesunoutelný .

Pomocí nástroje Mapování prvků diagramu propojte spojnici s referenční relací.

S vybranou mapou prvků diagramu otevřete okno Podrobností DSL a otevřete kartu Mapy dekorátoru.

Vyberte každý dekorátor a nastavte vlastnost Display na správnou vlastnost domény.

Ujistěte se, že se vedle každé položky v seznamu dekorátorů zobrazí značka zaškrtnutí.

Definování nástroje Tvůrce připojení

V okně Průzkumníka DSL rozbalte uzel Editoru a všechny jeho dílčí uzly.

Klepněte pravým tlačítkem myši na uzel, který má stejný název jako dsl, a klepněte na tlačítko Přidat nový nástroj připojení.

Při výběru nového nástroje v okno Vlastnosti:

  • Nastavte popisek a popis.

  • Klikněte na Tvůrce připojení a vyberte vhodného tvůrce pro novou relaci.

  • Nastavte ikonu panelu nástrojů na ikonu, kterou chcete zobrazit v sadě nástrojů. Můžete ho nastavit na novou ikonu nebo ikonu, kterou už používá jiný nástroj.

    Pokud chcete vytvořit novou ikonu, otevřete dsl\Resources v Průzkumník řešení. Zkopírujte a vložte jeden z existujících souborů nástroje elementU BMP. Přejmenujte vloženou kopii a poklikáním ji upravte.

    Vraťte se do diagramu definice DSL, vyberte nástroj a v okno Vlastnosti klepněte na [...] v sadě nástrojů Ikona. V dialogovém okně Vybrat rastrový obrázek vyberte v rozevírací nabídce soubor .BMP.

Otestování referenční relace a spojnice
  1. Chcete-li vygenerovat kód návrháře DSL, klikněte na tlačítko Transformovat všechny šablony na panelu nástrojů Průzkumník řešení.

  2. Sestavte a spusťte DSL. Stisknutím klávesY F5 nebo CTRL+F5 spusťte novou instanci sady Visual Studio v experimentálním režimu. V experimentální instanci sady Visual Studio otevřete nebo vytvořte soubor s příponou názvu vašeho DSL.

  3. Ověřte, že se na panelu nástrojů zobrazí nástroj pro připojení.

  4. Obrazce můžete vytvořit přetažením z nástroje do diagramu modelu.

  5. Vytvořte propojení mezi obrazci. Klikněte na nástroj spojnice, klikněte na obrazec a potom klikněte na jiný obrazec.

  6. Ověřte, že nemůžete vytvářet připojení mezi nevhodnými třídami. Pokud je váš vztah například mezi alby a umělci, ověřte, že nemůžete propojit umělce s interprety.

  7. Ověřte správnost násobení. Ověřte například, že nemůžete připojit osobu k více než jednomu správci.

  8. Ověřte, že se zobrazí každý dekorátor textu a že:

    1. Můžete ho upravit, pokud jste nenastavili příznak Is UI Read Only u vlastnosti domény.

    2. Při úpravě vlastnosti v okno Vlastnosti nebo v dekorátoru se aktualizuje druhé zobrazení.

    Po prvním otestování konektoru můžete chtít upravit některé jeho vlastnosti a přidat některé pokročilejší funkce. Další informace naleznete v tématu Přizpůsobení a rozšíření jazyka specifického pro doménu.

Definování obrazců, které obsahují seznamy: Obrazce oddílů

Obrazec prostoru obsahuje jeden nebo více seznamů položek. Například v knihovně hudby DSL můžete použít obrazce oddílů k reprezentaci hudebních alb. V každém albu je seznam skladeb.

Obrazec prostoru

V nejjednodušší metodě dosažení tohoto efektu v definici DSL definujete jednu třídu domény pro kontejner a jednu třídu domény pro každý seznam. Třída kontejneru je namapována na tvar prostoru.

Mapa obrazce

Další informace naleznete v tématu Vlastnosti obrazců prostoru.

Definování obrazce prostoru

  1. Vytvořte třídu domény kontejneru. Klikněte na nástroj Vložit relaci, klikněte na kořenovou třídu modelu a potom klikněte na prázdnou část diagramu definice DSL. Tím se vytvoří doménová třída s názvem Album na příkladu obrázku.

    Alternativně místo vložení do kořenové třídy můžete kontejner vložit do třídy domény, která je namapovaná na plaveckou dráha.

    Přidejte do třídy vlastnost domény, například Název, a nastavte její příznak Is Element Name v okno Vlastnosti.

  2. Vytvořte třídu domény položky seznamu. Klikněte na nástroj Vložit relaci, klikněte na třídu kontejneru (Album) a potom klikněte na prázdnou část diagramu. Tím se vytvoří doménová třída s názvem Song na příkladu obrázku.

    Přidejte do třídy vlastnost domény, například Název, a nastavte její příznak Is Element Name .

    Přidejte další vlastnosti domény.

    Přidejte další třídu domény položky seznamu pro každý seznam, který chcete zobrazit.

  3. Chcete-li kombinovat několik typů položek v seznamu, vytvořte třídy, které dědí z třídy seznamu. Nastavení modifikátoru dědičnosti třídy seznamu jako abstraktní.

    Pokud například chcete, aby klasická hudba byla seřazena podle skladatele místo interpreta, mohli byste vytvořit dvě podtřídy Song, ClassicSong a NonClassicalSong.

  4. Vytvořte obrazec prostoru. Přetáhněte z nástroje Obrazec prostoru do diagramu definice DSL.

    Přidejte textový dekorátor a nastavte jeho název.

    Přidejte oddíl a nastavte jeho název.

  5. Pokud chcete, aby uživatel skryl oddíly seznamu, klikněte pravým tlačítkem myši na třídu obrazce oddílu, přejděte na příkaz Přidat a potom klikněte na rozbalit nebo sbalit dekorátor. V okno Vlastnosti nastavte pozici dekorátoru.

  6. Klikněte na nástroj Mapování elementů diagramu, klikněte na třídu domény kontejneru a potom klikněte na obrazec oddílu.

  7. Vyberte propojení mapování prvků diagramu mezi třídou domény a obrazcem. V okně s podrobnostmi DSL:

    1. Klikněte na kartu Dekorátory. Klikněte na název dekorátoru a v části Zobrazit vlastnost vyberte příslušnou položku. Ujistěte se, že se vedle názvu dekorátoru zobrazí značka zaškrtnutí.

    2. Klikněte na kartu Mapy oddílů.

      Klikněte na název oddílu.

      V části Cesta kolekce zobrazených elementů přejděte do třídy elementu seznamu (Song). Kliknutím na šipku rozevíracího seznamu použijte nástroj navigátoru.

      V části Zobrazit vlastnost vyberte vlastnost, která by se měla zobrazit v seznamu. V příkladu je to Název.

Poznámka:

Pomocí polí Cesta v polích Mapa dekorátoru a Mapování oddílů můžete vytvořit složitější vztahy mezi třídami domény a tvarem oddílu.

Definování nástroje pro vytvoření obrazce

  1. Vytvořte položku panelu nástrojů pro vytváření prvků třídy domény.

  2. V Průzkumníku DSL rozbalte uzel Editoru a všechny jeho dílčí uzly.

  3. Klikněte pravým tlačítkem myši na uzel pod kartami nástrojů, které mají stejný název jako váš DSL, například MusicLibrary. Klikněte na Přidat nástroj elementu.

    Poznámka:

    Pokud kliknete pravým tlačítkem myši na uzel Nástroje , nezobrazí se nástroj Přidat prvek. Místo toho klikněte na uzel nad ním.

  4. V okno Vlastnosti s vybraným novým nástrojem elementu nastavte Třídu na třídu domény, kterou jste nedávno přidali.

  5. Nastavit popisek a popis.

  6. Nastavte ikonu panelu nástrojů na ikonu, která se zobrazí v sadě nástrojů. Můžete ho nastavit na novou ikonu nebo ikonu, kterou už používá jiný nástroj.

    Pokud chcete vytvořit novou ikonu, otevřete dsl\Resources v Průzkumník řešení. Zkopírujte a vložte jeden z existujících nástrojů prvků .BMP soubory. Přejmenujte vloženou kopii a poklikáním ji upravte.

    Vraťte se do diagramu definice DSL, vyberte nástroj a v okno Vlastnosti klepněte na [...] v sadě nástrojů Ikona. V dialogovém okně Vybrat rastrový obrázek vyberte soubor BMP z rozevírací nabídky.

Otestování obrazce prostoru

  1. Chcete-li vygenerovat kód návrháře DSL, klikněte na tlačítko Transformovat všechny šablony na panelu nástrojů Průzkumník řešení.

  2. Sestavte a spusťte DSL. Stisknutím klávesY F5 nebo CTRL+F5 spusťte novou instanci sady Visual Studio v experimentálním režimu. V experimentální instanci sady Visual Studio otevřete nebo vytvořte soubor s příponou názvu vašeho DSL.

  3. Ověřte, že se nástroj zobrazí na panelu nástrojů.

  4. Přetáhněte nástroj na diagram modelu. Vytvoří se obrazec.

    Ověřte, že se zobrazí název prvku a je automaticky nastaven na výchozí hodnotu.

  5. Klikněte pravým tlačítkem myši na záhlaví nového obrazce a potom klikněte na přidat položku seznamu. V příkladu je příkaz Přidat skladbu.

    Ověřte, že se položka zobrazí v seznamu a zda má nový název.

  6. Klikněte na jednu z položek seznamu a pak prozkoumejte okno Vlastnosti. Měly by se zobrazit vlastnosti položek seznamu.

  7. Otevřete Průzkumníka jazyků. Ověřte, že vidíte uzly kontejneru s uzly položek seznamu uvnitř.

    Vygenerovaný průzkumník DSL

    Po prvním otestování obrazce prostoru můžete chtít upravit některé jeho vlastnosti a přidat některé pokročilejší funkce. Další informace naleznete v tématu Přizpůsobení a rozšíření jazyka specifického pro doménu.

Obvykle je prvek, který se zobrazí v prostoru, podřízený prvek, který je reprezentován tvarem prostoru. Někdy byste ale chtěli zobrazit prvek, který je s ním propojený s odkazovou relací.

Do obrazce Album bychom například mohli přidat druhou přihrádku, která zobrazuje seznam umělců propojených s albem.

V tomto případě by oddíl měl místo odkazovaného prvku zobrazit odkaz. Důvodem je to, že když uživatel vybere položku v oddílu a stiskne DELETE, chcete odkaz odstranit, nikoli odkazovaný prvek.

Nicméně, můžete mít název odkazovaného prvku se objeví v oddílu.

Následující postup předpokládá, že jste již vytvořili třídu domény, vztah odkazu, obrazec prostoru a mapu prvků diagramu, jak je popsáno výše v této části.

  1. Přidejte do obrazce prostoru prostor. V diagramu definice DSL klepněte pravým tlačítkem myši na třídu obrazce oddílu, přejděte na přidat a klepněte na tlačítko Oddíl.

  2. Nastavte cestu k kolekci zobrazených prvků tak, aby se místo cílového prvku přecházely na odkaz. Klikněte na rozevírací nabídku a pomocí stromového zobrazení vyberte vztah odkazu místo cíle. V příkladu je relace ArtistAppearedOnAlbums.

  3. Nastavte cestu k zobrazované vlastnosti a přejděte z odkazu na cílový prvek. V tomto příkladu se jedná o interpreta.

  4. Nastavte vlastnost Display na odpovídající vlastnost cílového elementu, například Name.

  5. Transformujte všechny šablony, sestavte a spusťte DSL a otevřete testovací model.

  6. V diagramu modelu vytvořte odpovídající třídy obrazce, nastavte jejich názvy a vytvořte mezi nimi propojení. V obrazci prostoru by se měly zobrazit názvy propojených prvků.

  7. Vyberte odkaz nebo položku v obrazci oddílu. Odkaz i položka by měly zmizet.

Definování portů na hranici jiného obrazce

Port je obrazec umístěný na hranici jiného obrazce.

Porty lze použít také k poskytnutí pevného spojovacího bodu na jiném obrazci, do kterého může uživatel kreslit spojnice. V takovém případě můžete obrazec portu nastavit jako průhledný.

Pokud chcete zobrazit příklad, který používá porty, vyberte šablonu diagramu komponent při vytváření nového řešení DSL. Tento příklad ukazuje hlavní body, které můžete zvážit při definování portů:

  • Existuje třída domény, která představuje kontejner portů, Component.

  • Existuje doménová třída, která představuje porty. V příkladu je ComponentPortto .

  • Mezi doménovou třídou kontejneru a třídou domény portu existuje vztah vložení. Další informace naleznete v tématu Definování tříd domény.

  • Pokud chcete, aby byly různé typy portů smíšené ve stejném kontejneru, můžete vytvořit podtřídy třídy domény portu. V příkladu InPort a OutPort dědí z ComponentPort.

  • Třídu domény kontejneru lze mapovat na jakýkoli druh obrazce. V příkladu je ComponentShapeto . Další informace naleznete v tématu Definování obrazců.

  • Třídy domény portu se mapují na obrazce portů. Odvozené třídy můžete buď namapovat na samostatné třídy obrazců portů, nebo namapovat základní třídu na jednu třídu obrazce portu.

    V jiných ohledech se obrazce portů chovají, jak je popsáno v části Definování obrazců.

    Další informace naleznete v tématu Vlastnosti obrazců portů.

Definování DSL, který má plavecké dráhy

Plavecké dráhy jsou vodorovný nebo svislý oddíl diagramu. Každá plavecká dráha odpovídá prvku modelu. Definice DSL vyžaduje jednu třídu domény pro elementy plavecké dráhy.

Nejlepším způsobem, jak vytvořit DSL s plaveckou drahou, je vytvořit nové řešení DSL a zvolit šablonu řešení Tok úloh. V definici DSL je třída actor třída domény namapovaná na plaveckou dráha. Přejmenujte ho a ostatní třídy tak, aby vyhovovaly vašemu projektu.

Pokud chcete přidat třídu, která se zobrazí jako obrazec uvnitř plavecké dráhy, vytvořte vztah vložení mezi plaveckou třídou a novou třídou. Uživatelé budou moci přetáhnout prvky z jedné plavecké dráhy do jiné, ale každý prvek bude vždy uvnitř konkrétní plavecké dráhy. V šabloně řešení Tok úloh je FlowElement podřízenou plaveckou třídou.

Pokud chcete přidat třídu, která se zobrazí jako obrazec nezávisle na plavecké dráhy, vytvořte vztah vložení mezi kořenovou třídou a novou třídou. Uživatelé budou moci umístit tyto obrazce kdekoli v diagramu, včetně přes hranice plavecké dráhy a mimo plavecké dráhy. V šabloně řešení Tok úloh je komentář podřízenou kořenovou třídou.

Další informace naleznete v tématu Vlastnosti plavecké dráhy.

Přidání typů vlastností

Výčty a literály domény

Výčet domény je typ s několika literálními hodnotami.

Chcete-li přidat výčtu domény, klepněte pravým tlačítkem myši na kořen modelu v průzkumníku DSL a potom klepněte na tlačítko Přidat nový výčtu domény. Prvek se zobrazí v Průzkumníku DSL v uzlu Typy domén. Tento prvek se v diagramu nezobrazuje.

Chcete-li přidat literály výčtu do výčtu domény, klepněte pravým tlačítkem myši na výčet domény v průzkumníku DSL a potom klepněte na tlačítko Přidat nový literál výčtu.

Ve výchozím nastavení lze vlastnost s typem výčtu nastavit pouze na jednu hodnotu výčtu najednou. Pokud chcete, aby uživatelé a programátoři mohli nastavit libovolnou kombinaci hodnot – bitového pole – nastavte vlastnost IsFlags výčtu.

Externí typy

Když nastavíte typ vlastnosti domény, v rozevíracím seznamu Typ nenajdete požadovaný typ, můžete přidat externí typ. Do seznamu můžete například přidat typ System.Drawing.Color .

Chcete-li přidat typ, klepněte pravým tlačítkem myši na kořen modelu v DSL Exploreru a potom klepněte na tlačítko Přidat nový externí typ. V okno Vlastnosti nastavte název na Color a obor názvů na System.Drawing. Tento typ se teď zobrazí v Průzkumníku DSL v části Typy domén. Můžete ho zvolit vždy, když nastavíte typ vlastnosti domény.

Přizpůsobení DSL

Pomocí technik popsaných v tomto tématu můžete rychle vytvořit DSL s diagramovým zápisem, čitelným xml formulářem a základními nástroji, které jsou potřeba k vygenerování kódu a dalších artefaktů.

Existují dvě metody rozšíření definice DSL:

  1. Dolaďte DSL pomocí více funkcí definice DSL. Můžete například vytvořit jeden nástroj konektoru, který může vytvořit několik typů konektoru, a můžete řídit pravidla, kterými odstraníte jeden prvek také odstraní související prvky. Tyto techniky se většinou dosahuje nastavením hodnot v definici DSL a některé vyžadují několik řádků kódu programu.

    Další informace naleznete v tématu Přizpůsobení a rozšíření jazyka specifického pro doménu.

  2. Rozšiřte své nástroje modelování pomocí kódu programu, abyste dosáhli pokročilejších efektů. Můžete například vytvořit příkazy nabídky, které můžou změnit model, a můžete vytvořit nástroje, které integrují dvě nebo více seznamů DSLS. Sada VMSDK je navržená speciálně tak, aby usnadnila integraci rozšíření s kódem vygenerovaným z definice DSL. Další informace naleznete v tématu Psaní kódu pro přizpůsobení jazyka specifického pro doménu.

Změna definice DSL

Když v definici DSL vytvoříte libovolnou položku, nastaví se automaticky mnoho výchozích hodnot. Po nastavení je můžete změnit. To zjednodušuje vývoj DSL, ale stále umožňuje výkonné přizpůsobení.

Když například namapujete obrazec na prvek, cesta nadřazeného elementu mapování se automaticky nastaví podle vztahu vložení třídy domény. Pokud ale později změníte vztah vkládání, cesta nadřazeného prvku se automaticky nezmění.

Proto byste měli vědět, že při změně některých relací v definici DSL není neobvyklé, že chyby budou hlášeny při uložení definice nebo při transformaci všech šablon. Většinu těchto chyb je snadné opravit. Poklikáním na zprávu o chybě zobrazíte umístění chyby.

Viz také Postupy: Změna oboru názvů jazyka specifického pro doménu.

Řešení problému

V následující tabulce jsou uvedeny některé nejběžnější problémy, ke kterým dochází při návrhu DSL, společně s návrhy pro jejich řešení. Další rady jsou k dispozici na fóru rozšiřitelnosti nástrojů vizualizace.

Problém Návrh
Změny provedené v definičním souboru DSL nemají žádný vliv. Na panelu nástrojů nad Průzkumník řešení klikněte na Transformovat všechny šablony a pak řešení znovu sestavte.
Obrazce místo hodnoty vlastnosti zobrazují název dekorátoru. Nastavte mapování dekorátoru. V diagramu definice DSL klikněte na mapu prvku diagramu, což je šedá čára mezi třídou domény a třídou obrazce.

Otevřete okno s podrobnostmi DSL. Pokud ho nevidíte, v nabídce Zobrazení přejděte na příkaz Ostatní okna a klepněte na tlačítko DSL Podrobnosti.

Klikněte na kartu Mapy dekorátoru. Vyberte název dekorátoru. Ujistěte se, že je zaškrtnuté políčko vedle něj. V části Zobrazit vlastnost vyberte název vlastnosti domény.

Další informace naleznete v tématu Obrazce v diagramu.
V Průzkumníku DSL nelze přidat do kolekce. Když například kliknem pravým tlačítkem myši na Nástroje, v nabídce není žádný příkaz Přidat nástroj.

V průzkumníku pro můj DSL nemůžu přidat prvek do seznamu.
Klikněte pravým tlačítkem myši na položku nad uzlem, který se pokoušíte. Pokud chcete přidat do seznamu, příkaz Přidat není v uzlu seznamu, ale ve svém vlastníkovi.
Vytvořil(a) jsem třídu domény, ale v Průzkumníku jazyků nemůžu vytvářet instance. Každá třída domény s výjimkou kořenového adresáře musí být cílem vztahu vkládání.
V průzkumníku pro moji DSL jsou prvky zobrazeny pouze s jejich názvy typů. V DEFINICI DSL vyberte vlastnost domény třídy a v okno Vlastnosti, nastavte Is Element Name na true.
Můj DSL se vždy otevře v editoru XML. K tomu může dojít kvůli chybě při čtení souboru. I když ale tuto chybu opravíte, musíte editor explicitně resetovat tak, aby byl návrhářem DSL.

Klikněte pravým tlačítkem myši na položku projektu, klikněte na Otevřít v aplikaci a vyberte Návrhář yourLanguage(Výchozí).
Sada nástrojů mého DSL se nezobrazí po změně názvů sestavení. Kontrola a aktualizace DslPackage\GeneratedCode\Package.tt Další informace naleznete v tématu Postupy: Změna oboru názvů jazyka specifického pro doménu.
Sada nástrojů mého DSL se nezobrazuje, ale nezměnil jsem název sestavení.

Nebo se zobrazí okno se zprávou, že se nepodařilo načíst rozšíření.
Obnovte experimentální instanci a znovu sestavte řešení.

1. V systému Windows nabídka Start v části Všechny programy rozbalte sadu Visual Studio SDK , potom Nástroje a klepněte na tlačítko Obnovit experimentální instanci sady Microsoft Visual Studio.
2. V nabídce Sestavení klepněte na tlačítko Znovu sestavit řešení.