Sdílet prostřednictvím


Začínáme s jazyky Domain-Specific

Toto téma vysvětluje základní koncepty při definování a použití jazyka DSL (domain-specific language) vytvořeného pomocí sady Modeling SDK pro Visual Studio.

Poznámka:

Sada SDK pro transformaci textových šablon a sada Visual Studio Modeling SDK se nainstalují automaticky při instalaci konkrétních funkcí sady Visual Studio. Další podrobnosti najdete v tomto blogovém příspěvku.

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

Co můžete dělat s jazykem Domain-Specific?

Jazyk specifický pro doménu je notace, obvykle grafická, která je navržená pro konkrétní účel. Naproti tomu jazyky, jako je UML, jsou pro obecné účely. V DSL můžete definovat typy prvků modelu a jejich relací a způsob jejich prezentace na obrazovce.

Když jste navrhli DSL, můžete ho distribuovat jako součást balíčku visual studio Integration Extension (VSIX). Uživatelé pracují s DSL v sadě Visual Studio:

Diagram rodinného stromu, sada nástrojů a průzkumník

Zápis je pouze součástí DSL. Společně se zápisem obsahuje balíček VSIX nástroje, které můžou uživatelé použít, aby jim pomohly upravovat a generovat obsah ze svých modelů.

Jedním z hlavních využití DSL (doménově specifických jazyků) je generování programového kódu, konfiguračních souborů a dalších artefaktů. Zejména ve velkých projektech a produktních řadách, kde se vytvoří několik variant produktu, může generování mnoha proměnných aspektů z DSL poskytnout výrazné zvýšení spolehlivosti a velmi rychlou reakci na změny požadavků.

Zbytek tohoto přehledu je návod, který představuje základní operace vytváření a používání jazyka specifického pro doménu v sadě Visual Studio.

Požadavky

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

Součást Link
Visual Studio http://go.microsoft.com/fwlink/?LinkId=185579
Visual Studio SDK https://go.microsoft.com/fwlink/?linkid=2166172
Modelovací SDK pro 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ího programu sady Visual Studio v kategorii Sady SDK, knihovny a architektury . Nainstalujte komponentu Modeling SDK z karty Jednotlivé komponenty .

Vytvoření řešení DSL

Pokud chcete vytvořit nový jazyk specifický pro doménu, vytvoříte nové řešení sady Visual Studio pomocí šablony projektu Domain-Specific Language.

  1. V nabídce Soubor přejděte na příkaz Nový a klepněte na tlačítko Projekt.

  2. V části Typy projektů rozbalte uzel Jiné typy projektů a klepněte na tlačítko Rozšiřitelnost.

  3. Klikněte na Doménově specifický návrhář jazyka.

    Vytvořit dialogové okno DSL

  4. Do pole Název zadejte FamilyTree. Klikněte na OK.

    Otevře se Průvodce pro doménově specifický jazyk a zobrazí seznam šablonových řešení DSL.

    Kliknutím na každou šablonu zobrazíte popis.

    Šablony jsou dobré výchozí body. Každý z nich poskytuje kompletní funkční DSL, který můžete upravit tak, aby vyhovoval vašim potřebám. Obvykle byste zvolili šablonu, která je nejblíže tomu, co chcete vytvořit.

  5. Pro účely tohoto názorného postupu zvolte šablonu Minimální jazyk .

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

    • Zvolte rozšíření, které není přidružené k žádné aplikaci v počítači nebo v libovolném počítači, do kterého 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 služba. 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.

  7. Zkontrolujte ostatní stránky a klikněte na tlačítko Dokončit.

    Vygeneruje se řešení, které obsahuje dva projekty. Mají název Dsl a DslPackage. Otevře se soubor diagramu s názvem DslDefinition.dsl.

    Poznámka:

    Většina kódu, který můžete vidět ve složkách ve dvou projektech, se generuje z DslDefinition.dsl. Z tohoto důvodu se většina úprav dsl provádí v tomto souboru.

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ástrojů pro doménově specifické jazyky.

Důležité části řešení DSL

Všimněte si následujících aspektů nového řešení:

  • Dsl\DslDefinition.dsl Toto je soubor, který uvidíte při vytváření řešení DSL. Téměř veškerý kód v řešení je generován z tohoto souboru a většina změn, které provedete v definici DSL, jsou zde provedeny. Další informace naleznete v tématu Práce s diagramem definice DSL.

  • Projekt Dsl Tento projekt obsahuje kód, který definuje jazyk specifický pro doménu.

  • Projekt DslPackage Tento projekt obsahuje kód, který umožňuje otevření a úpravu instancí DSL v sadě Visual Studio.

Spuštění DSL

Řešení DSL můžete spustit hned, jak jste ho vytvořili. Později můžete definici DSL upravit postupně a po každé změně znovu spustit řešení.

Experimentování s DSL

  1. Na panelu nástrojů Průzkumníka řešení klikněte na Možnost Transformovat všechny šablony. Tím se vygeneruje většina zdrojového kódu z DslDefinition.dsl.

    Poznámka:

    Kdykoli změníte DslDefinition.dsl, musíte před opětovnou sestavením řešení kliknout na Transformovat všechny šablony . Tento krok můžete automatizovat. Další informace naleznete v tématu Automatizace transformace všech šablon.

  2. Stiskněte klávesu F5 nebo v nabídce Ladění klepněte na tlačítko Spustit ladění.

    DSL se sestaví a nainstaluje v experimentální instanci sady Visual Studio.

    Spustí se experimentální instance sady Visual Studio. Experimentální instance přebírá nastavení z samostatného podstromu registru, kde jsou rozšíření sady Visual Studio zaregistrovaná pro účely ladění. Normální instance sady Visual Studio nemají přístup k rozšířením, která jsou tam zaregistrovaná.

  3. V experimentální instanci sady Visual Studio otevřete soubor modelu s názvem Test z Průzkumníka řešení.

    - nebo -

    Klikněte pravým tlačítkem myši na ladicí projekt, přejděte na Přidat a poté klikněte na Položka. V dialogovém okně Přidat položku vyberte typ souboru DSL.

    Soubor modelu se otevře jako prázdný diagram.

    Panel nástrojů se otevře a zobrazí nástroje vhodné pro typ diagramu.

  4. Pomocí nástrojů můžete v diagramu vytvářet obrazce a spojnice.

    1. Obrazce vytvoříte přetažením z nástroje Příklad obrazce do diagramu.

    2. Chcete-li propojit dva obrazce, klikněte na nástroj Příklad spojnice, klikněte na první obrazec a potom klikněte na druhý obrazec.

  5. Kliknutím na popisky obrazců je můžete změnit.

Vaše experimentální sada Visual Studio bude vypadat podobně jako v následujícím příkladu:

Ukázkový strom doménově specifického jazyka ve Visual Studio

Obsah modelu

Obsah souboru, který je instancí DSL, se nazývá model. Model obsahuje prvkymodelu a propojení mezi prvky. Definice DSL určuje, jaké typy prvků modelu a propojení mohou v modelu existovat. Například v DSL vytvořeném ze šablony Minimální jazyk existuje jeden typ prvku modelu a jeden typ odkazu.

Definice DSL může určit, jak se model zobrazuje v diagramu. Můžete si vybrat z různých stylů obrazců a spojnic. Můžete určit, že se některé obrazce zobrazí uvnitř jiných obrazců.

Model můžete během úprav modelu zobrazit jako strom v zobrazení Průzkumníka . Při přidávání obrazců do diagramu se prvky modelu zobrazí také v průzkumníku. Průzkumníka je možné použít i v případě, že neexistuje žádný diagram.

Pokud v ladicí instanci Visual Studio nevidíte Průzkumníka, přejděte v nabídce Zobrazení na Ostatní okna a potom klikněte na <Váš jazyk>Průzkumník.

Rozhraní API vašeho DSL

Vaše DSL generuje rozhraní API, které umožňuje číst a aktualizovat modely, které jsou instancemi DSL. Jednou z aplikací rozhraní API je generování textových souborů z modelu. Další informace naleznete v Generování kódu v době návrhu pomocí textových šablon T4.

V řešení pro ladění otevřete soubory šablony s příponou .tt. Tyto ukázky demonstrují, jak můžete generovat text z modelů, a umožňují otestovat rozhraní API vašeho DSL. Jedna z ukázek je napsaná v jazyce Visual Basic, druhá v jazyce Visual C#.

Pod každým souborem šablony je soubor, který je generován. Rozbalte soubor šablony v Průzkumníku řešení a otevřete vygenerovaný soubor.

Soubor šablony obsahuje krátký segment kódu, který obsahuje seznam všech prvků v modelu.

Vygenerovaný soubor obsahuje výsledek.

Když změníte soubor modelu, uvidíte po opětovném vygenerování souborů odpovídající změny ve vygenerovaných souborech.

Opětovné vygenerování textových souborů po změně souboru modelu

  1. V experimentální instanci sady Visual Studio uložte soubor modelu.

  2. Ujistěte se, že parametr názvu souboru v každém souboru .tt odkazuje na soubor modelu, který používáte pro experimenty. Uložte soubor .tt.

  3. Na panelu nástrojů Průzkumníka řešení klikněte na Možnost Transformovat všechny šablony.

    - nebo -

    Klikněte pravým tlačítkem myši na šablony, které chcete znovu vygenerovat, a potom klepněte na příkaz Spustit vlastní nástroj.

Do projektu můžete přidat libovolný počet souborů textových šablon. Každá šablona vygeneruje jeden soubor výsledků.

Poznámka:

Když změníte definici DSL, kód ukázkové textové šablony nebude fungovat, pokud ji neaktualizujete.

Další informace najdete v tématu Generování kódu z jazyka Domain-Specific a psaní kódu pro přizpůsobení Domain-Specific jazyka.

Přizpůsobení DSL

Pokud chcete upravit definici DSL, zavřete experimentální instanci a aktualizujte definici v hlavní instanci sady Visual Studio.

Poznámka:

Po úpravě definice DSL můžete přijít o informace v testovacích modelech, které jste vytvořili pomocí předchozích verzí. Například řešení ladění obsahuje soubor s názvem Ukázka, který obsahuje některé obrazce a konektory. Jakmile začnete vyvíjet definici DSL, nebudou viditelné a při uložení souboru budou ztraceny.

Pro dsl můžete vytvořit širokou škálu rozšíření. Následující příklady vám poskytnou představu o možnostech.

Po každé změně uložte definici DSL, klikněte na transformovat všechny šablony v Průzkumníku řešení a stisknutím klávesy F5 experimentujte se změněnou DSL.

Přejmenování typů a nástrojů

Přejmenujte existující třídy a relace domény. Například, začínaje definicí DSL vytvořenou ze šablony „Minimální jazyk“, můžete provést následující operace přejmenování, aby DSL reprezentovala rodinné stromy.

Přejmenování doménových tříd, relací a nástrojů

  1. V diagramu DslDefinition přejmenujte ExampleModel na FamilyTreeModel, ExampleElement na Person, Targets to Parents a Sources to Children. Kliknutím na každý popisek ho můžete změnit.

    Diagram definice DSL – model rodinného stromu

  2. Přejmenujte element a nástroje konektoru.

    1. Kliknutím na kartu v Průzkumníku řešení otevřete okno Průzkumníka DSL. Pokud ho nevidíte, přejděte v nabídce Zobrazení na jiný systém Windows a klepněte na tlačítko DSL Explorer. Průzkumník DSL je viditelný pouze v případech, kdy je aktivním oknem diagram definice DSL.

    2. Otevřete okno Vlastnosti a umístěte ho tak, abyste viděli Průzkumníka DSL a vlastnosti najednou.

    3. V Průzkumníku DSL rozbalte editor, karty nástrojů, <dsl> a potom Nástroje.

    4. Klikněte na ExampleElement. Toto je položka panelu nástrojů, která slouží k vytváření prvků.

    5. V okně Vlastnosti změňte vlastnost Jméno na Person.

      Všimněte si, že vlastnost Titulek se také změní.

    6. Stejným způsobem změňte název nástroje ExampleConnector na ParentLink. Upravte vlastnost Caption tak, aby nebyla kopií vlastnosti Name. Zadejte například nadřazený odkaz.

  3. Znovu sestavte DSL.

    1. Uložte soubor definice DSL.

    2. Na panelu nástrojů Průzkumníka řešení klikněte na Transformovat všechny šablony .

    3. Stiskněte klávesu F5. Počkejte, až se zobrazí experimentální instance sady Visual Studio.

  4. V řešení ladění v experimentální instanci sady Visual Studio otevřete soubor testovacího modelu. Přetáhněte na něj prvky ze sady nástrojů. Všimněte si, že se změnily titulky nástrojů a názvy typů v Průzkumníku DSL.

  5. Uložte soubor modelu.

  6. Otevřete soubor .tt a nahraďte výskyty starého typu a názvů vlastností novými názvy.

  7. Ujistěte se, že název souboru zadaný v souboru .tt určuje váš testovací model.

  8. Uložte soubor .tt. Otevřete vygenerovaný soubor, abyste viděli výsledek spuštění kódu v souboru .tt. Ověřte správnost.

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

Přidejte vlastnosti do třídy domény, například představující roky narození a smrt osoby.

Chcete-li, aby byly nové vlastnosti viditelné v diagramu, musíte přidat dekorátory do obrazce, který zobrazuje prvek modelu. Vlastnosti musíte také mapovat na dekorátory.

Přidání vlastností a jejich zobrazení
  1. Přidejte vlastnosti.

    1. V diagramu definice DSL klepněte pravým tlačítkem myši na třídu domény Person , přejděte na příkaz Přidat a klepněte na položku Domain Property.

    2. Zadejte seznam nových názvů vlastností, například Narození a Smrt. Po každém z nich stiskněte Enter .

  2. Přidejte dekorátory, které zobrazí vlastnosti v obrazci.

    1. Sledujte šedou čáru, která se rozšiřuje z třídy domény Person na druhou stranu diagramu. Toto je mapování prvků diagramu. Propojuje třídu domény s třídou obrazce.

    2. Klikněte pravým tlačítkem myši na tuto třídu obrazce, přejděte na Přidat a poté klikněte na Dekorátor textu.

    3. Přidejte dva dekorátory s názvy, jako jsou BirthDecorator a DeathDecorator.

    4. Vyberte každý nový dekorátor a v okně Vlastnosti nastavte pole Pozice . Určuje, kde se na obrazci zobrazí hodnota vlastnosti domény. Například nastavte InnerBottomLeft a InnerBottomRight.

      Definice tvaru oddílu

  3. Namapujte dekorátory na vlastnosti.

    1. Otevřete okno s podrobnostmi DSL. Obvykle je na záložce vedle okna Výstup. Pokud ho nevidíte, v nabídce Zobrazení přejděte na příkaz Ostatní okna a klepněte na tlačítko DSL Podrobnosti.

    2. V diagramu definice DSL klikněte na čáru, která spojuje třídu domény Person s třídou obrazce.

    3. V Podrobnostech DSL na kartě Mapy dekorátorů klikněte na zaškrtávací políčko nezmapovaného dekorátoru. V zobrazení vlastnosti vyberte vlastnost domény, na kterou chcete mapovat. Například namapovat BirthDecorator na Birth.

  4. Uložte DSL, klikněte na Transformovat všechny šablony a stiskněte klávesu F5.

  5. V ukázkovém diagramu modelu ověřte, že teď můžete kliknout na zvolené pozice a zadat do nich hodnoty. Když navíc vyberete obrazec Osoba , zobrazí se v okně Vlastnosti nové vlastnosti Narození a Smrt.

  6. V souboru .tt můžete přidat kód, který získá vlastnosti každé osoby.

    Diagram rodinného stromu, sada nástrojů a průzkumník

Definování nových tříd

Do modelu můžete přidat třídy domény a relace. Můžete například vytvořit novou třídu, která bude reprezentovat města, a nový vztah, který bude představovat, že osoba žila ve městě.

Pokud chcete, aby různé typy byly v diagramu modelu odlišné, můžete třídy domény mapovat na různé druhy obrazců nebo na obrazce s různými geometrií a barvami.

Přidání a zobrazení nové třídy domény
  1. Přidejte třídu domény a nastavte ji jako podřízenou entitu, kterou přidáte k kořenu modelu.

    1. V diagramu definice DSL klepněte na nástroj Embedding Relationship , klepněte na kořenovou třídu FamilyTreeModel a potom klikněte do prázdné části diagramu.

      Zobrazí se nová třída domény, která je připojena k FamilyTreeModel s vloženým vztahem.

      Nastavte jeho název, například Město.

      Poznámka:

      Každá doménová třída s výjimkou kořene modelu musí být cílem alespoň jedné relace vložení, nebo musí dědit z třídy, která je cílem vložení. Z tohoto důvodu je často vhodné vytvořit třídu domény pomocí nástroje Embedding Relationship.

    2. Přidejte do nové třídy vlastnost domény, například Name.

  2. Přidejte vztah odkazu mezi osobou a městem.

    1. Klikněte na nástroj Referenční vztah , klepněte na položku Osoba a potom klepněte na tlačítko Město.

      Fragment definice DSL: kořen rodinného stromu

      Poznámka:

      Relace odkazů představují křížové odkazy z jedné části stromu modelu do jiné.

  3. Přidejte obrazec, který bude reprezentovat města v diagramech modelu.

    1. Přetáhněte obrazec geometrie z panelu nástrojů do diagramu a přejmenujte ho, například TownShape.

    2. V okně Vlastnosti nastavte pole Vzhled nového obrazce, například Barva výplně a Geometrie.

    3. Přidejte dekorátor, který zobrazí název města a přejmenuje ho NameDecorator. Nastavte jeho vlastnost Position.

  4. Namapujte třídu domény Město na TownShape.

    1. Klikněte na nástroj Mapa elementů diagramu , potom klikněte na třídu domény města a potom na třídu obrazce TownShape.

    2. Na kartě Mapy dekorátoru v okně Podrobnosti DSL, když je vybrán konektor mapy, zkontrolujte NameDecorator a nastavte Zobrazovanou vlastnost na Název.

  5. Vytvořte spojnici, která zobrazí vztah mezi osobami a městy.

    1. Přetáhněte spojnici ze sady nástrojů do diagramu. Přejmenujte ho a nastavte jeho vlastnosti vzhledu.

    2. Pomocí nástroje Mapování prvků diagramu propojíte nový spojník se vztahem mezi Osobou a Městem.

      Definice rodinného stromu s přidanou mapou tvarů

  6. Vytvořte nástroj pro vytvoření nového města.

    1. V Průzkumníku DSL rozbalte Editor a potom Karty panelu nástrojů.

    2. Klikněte pravým tlačítkem myši na <váš DSL> a potom klikněte na nástroj Přidat nový prvek.

    3. Nastavte vlastnost Name nového nástroje a nastavte jeho vlastnost Class na Město.

    4. Nastavte vlastnost Ikona panelu nástrojů . Klikněte na [...] a v poli Název souboru vyberte soubor ikony.

  7. Vytvořte nástroj konektoru pro vytvoření propojení mezi městy a lidmi.

    1. Klepněte pravým tlačítkem myši na <DSL> a poté klikněte na Nástroj pro přidání nového konektoru.

    2. Nastavte vlastnost Name nového nástroje.

    3. Ve vlastnosti ConnectionBuilder vyberte komponentu, která identifikuje název relace Person-Town.

    4. Nastavte ikonu panelu nástrojů.

  8. Uložte definici DSL, klikněte na transformovat všechny šablony a stiskněte klávesu F5.

  9. V experimentální instanci sady Visual Studio otevřete soubor testovacího modelu. Pomocí nových nástrojů můžete vytvářet města a vazby mezi městy a osobami. Všimněte si, že můžete vytvořit pouze propojení mezi správnými typy elementu.

  10. Vytvořte kód, ve kterém je uvedeno město, ve kterém žije každý člověk. Textové šablony jsou jedním z míst, kde můžete takový kód spustit. Můžete například upravit existující soubor Sample.tt v řešení ladění tak, aby obsahoval následující kód:

    <#@ template inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation" debug="true" #>
    <#@ output extension=".txt" #>
    <#@ FamilyTree processor="FamilyTreeDirectiveProcessor" requires="fileName='Sample.ftree'" #>
    
    <#
      foreach (Person person in this.FamilyTreeModel.People)
      {
    #>
        <#= person.Name #><#if (person.Town != null) {#> of <#= person.Town.Name #> <#}#>
    
    <#
          foreach (Person child in person.Children)
      {
    #>
                <#= child.Name #>
    <#
      }
      }
    #>
    
    

    Když soubor *.tt uložíte, vytvoří se podřízený soubor, který bude obsahovat seznam osob a jejich bydliště. Další informace naleznete v tématu Generování kódu z jazyka Domain-Specific.

Ověřování a příkazy

Tuto DSL můžete dále vyvinout přidáním omezení ověřování. Tato omezení jsou metody, které můžete definovat, které zajišťují, že je model ve správném stavu. Můžete například definovat omezení, abyste měli jistotu, že datum narození dítěte je pozdější než datum narození jeho rodičů. Funkce ověření zobrazí upozornění, pokud se uživatel DSL pokusí uložit model, který přeruší některá omezení. Další informace naleznete v tématu Ověřování v jazyce Domain-Specific.

Také můžete definovat příkazy v nabídce, které může uživatel vyvolat. Příkazy můžou model upravit. Můžou také pracovat s jinými modely v sadě Visual Studio a s externími prostředky. Další informace naleznete v tématu Jak na to: Úprava standardního příkazu nabídky.

Nasazení DSL

Pokud chcete ostatním uživatelům povolit používání jazyka specifického pro doménu, distribuujete soubor rozšíření sady Visual Studio (VSIX). Tato možnost se vytvoří při sestavování řešení DSL.

Vyhledejte soubor .vsix ve složce bin vašeho řešení. Zkopírujte ho do počítače, na který ho chcete nainstalovat. V tomto počítači dvakrát klikněte na soubor VSIX. DSL lze použít ve všech instancích sady Visual Studio v tomto počítači.

Stejný postup můžete použít k instalaci DSL do vlastního počítače, abyste nemuseli používat experimentální instanci sady Visual Studio.

Další informace najdete v tématu Nasazení Domain-Specific jazykových řešení.

Odebrání starých experimentálních DSLs

Pokud jste už vytvořili experimentální seznamy DSLS, které už nechcete, můžete je z počítače odebrat resetováním experimentální instance sady Visual Studio.

Tím se z počítače odeberou všechny experimentální DSL a další experimentální rozšíření Visual Studio. Jedná se o rozšíření, která byla spuštěna v režimu ladění.

Tento postup neodebere DSL ani jiná rozšíření sady Visual Studio, která byla plně nainstalována spuštěním souboru VSIX.

Resetování experimentální instance sady Visual Studio

  1. 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.

  2. Znovu sestavte všechny experimentální DSL nebo jiná experimentální rozšíření Visual Studio, která stále chcete používat.