Znajomość kodu DSL
Rozwiązanie języka specyficznego dla domeny (DSL) generuje interfejs API, który służy do odczytywania i aktualizowania wystąpienia DSL w Visual Studio.Ten interfejs API jest zdefiniowana w kodzie, który jest generowany w definicji DSL.W tym temacie opisano wygenerowanego interfejsu API.
To rozwiązanie przykład: diagramy składników
Aby utworzyć rozwiązanie, które jest źródłem większość przykłady w tym temacie, należy utworzyć DSL z modeli składnika rozwiązanie szablonu.Jest to standardowe szablony, które pojawia się podczas tworzenia nowego rozwiązania DSL.
[!UWAGA]
Szablon DSL diagramy składników nie jest powiązany z diagramy UML składników, które można tworzyć za pomocą menu architektury w Visual Studio Ultimate.W nowy projekt okna dialogowego rozwiń inne Types\Extensibility projektu , a następnie kliknij przycisk Designer języka specyficznego dla domeny.
Naciśnij klawisz F5 i doświadczeniu, jeśli nie są znane z tym szablonem rozwiązania.Zwróć uwagę na to w szczególności tworzonych przez Ciebie porty przeciągając narzędzie portu na składnik i czy można połączyć portów.
Struktura rozwiązania DSL
Dsl Projektu definiuje interfejs API dla swojego DSL.DslPackage Projektu definiuje sposób integruje się z Visual Studio.Można także dodać własne projektów, który może również zawierać kod generowany z modelu.
Katalogi w kodzie
Większość kodu w każdej z tych projektów jest generowana z Dsl\DslDefinition.dsl.Wygenerowany kod znajduje się w Generated Code folder.Aby wyświetlić wygenerowany plik, kliknij przycisk [+] obok Generowanie .tt pliku.
Zaleca się, aby sprawdzić wygenerowany kod, aby lepiej zrozumieć DSL.Aby wyświetlić wygenerowane pliki, rozwiń *.tt pliki w Eksploratorze rozwiązań.
Pliki *.tt zawierają bardzo mało generowania kodu.Zamiast tego należy użyć <#include> dyrektywy, aby dołączyć pliki szablonu współużytkowanego.Udostępnione pliki znajdują się w**\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\DSL SDK\DSL Designer\11.0\TextTemplates**
Po dodaniu własnego kodu do rozwiązania DSL, należy je umieścić w oddzielnym pliku, poza folderem wygenerowany kod.Należy utworzyć Custom Code folder.(Podczas dodawania nowego pliku kodu do folderu niestandardowych, pamiętaj, aby poprawić przestrzeń nazw w szkielet kodu początkowego.)
Zdecydowanie zaleca się że nie zmienisz wygenerowany kod bezpośrednio, ponieważ wprowadzone zmiany zostaną utracone podczas odbudowy rozwiązanie.Zamiast tego aby dostosować swoje DSL:
Należy dostosować wiele parametrów w definicji DSL.
Zapisuje częściowe klasy w plikach kodu oddzielne zastąpienie metody, które nie są zdefiniowane w lub dziedziczone przez wygenerowanego klasy.W niektórych przypadkach trzeba ustawić generuje podwójne opracowane opcji klasy w definicji DSL, aby możliwe było wygenerowanego metoda musi zostać zastąpiona.
Określ opcje w definicji DSL, które powodują wygenerowany kod w celu zapewnienia "punkty zaczepienia" swój kod.
Na przykład jeśli ustawisz ma konstruktora niestandardowe opcji klasy domeny, a następnie tworzyć rozwiązania, zostanie wyświetlone komunikaty o błędach.Po dwukrotnym kliknięciu jednej z tych komunikatów o błędach, zobaczysz komentarze w wygenerowanego kodu, które wyjaśniają, co powinien zapewniać kodu niestandardowego.
Pisanie własnych szablonów tekstu do generowania kodu specyficzne dla danej aplikacji.Możesz Użyj dołączyć pliki do udostępnienia części szablonów, które są wspólne dla wielu projektów i tworzenia Visual Studio następujące szablony projektów, które są inicjowane z strukturę pliku projektu.
Wygenerowane pliki w Dsl
Następujące pliki wygenerowane są widoczne w Dsl projektu.
Nazwa pliku |
Opis |
---|---|
YourDslSchema.xsd |
Schemat dla plików, który zawiera wystąpienia swoje DSL.Ten plik zostanie skopiowany do kompilacji (bin) katalogu.Po zainstalowaniu sieci DSL, możesz skopiować ten plik do \Program Files\Microsoft Visual Studio 11.0\Xml\Schemas tak, aby można zweryfikować pliki modelu.Aby uzyskać więcej informacji, zobacz Wdrażanie rozwiązań dla języka specyficznego dla domeny. W przypadku dostosowania serializacji, ustawiając opcje w Eksploratorze DSL, schemat zostanie zmieniona.Jednak jeśli piszesz kod serializacji, ten plik nie jest już może reprezentować rzeczywiste schematu.Aby uzyskać więcej informacji, zobacz Dostosowywanie przechowywania plików i serializacji XML. |
ConnectionBuilders.cs |
Konstruktor połączeń jest klasa, która umożliwia tworzenie relacji.Jest kod związany z narzędziem połączenia.Ten plik zawiera pary klasy dla każdego narzędzia połączenia.Ich nazwy są obliczane na podstawie nazwy domeny narzędzia relacji i połączenia: relacjikonstruktora, i ConnectorToolConnectAction. (W przykładzie składnik rozwiązania jednego z konstruktorów połączenia jest wywoływana ConnectionBuilder, jest to zbieżność, ponieważ relacji domeny nosi nazwę połączenia). Relacja jest tworzony w relacjiBuilder.Connect() metody.Wersja domyślna sprawdza, czy elementy modelu źródłowej i docelowej są akceptowane i następnie tworzy relację.Na przykład: CommentReferencesSubject(sourceAccepted, targetAccepted); Generowany jest węzłem w każdej klasy konstruktora konstruktorów połączenia sekcji w Eksploratorze DSL.Co Connect metody można tworzyć relacje między co najmniej jeden pary klas domeny.Każda para jest zdefiniowany dyrektywą łącze połączenia, który można znaleźć w Eksploratorze DSL węźle konstruktora. Można na przykład dodać do jednego połączenia konstruktora dyrektywy połączyć łącze, dla każdego z trzech typów relacji w próbce DSL.Zapewni użytkownika za pomocą narzędzia jednego połączenia.Typ relacji wystąpienia zależą od typów źródłowa i docelowa elementy wybrane przez użytkownika.Aby dodać dyrektywy połączyć łącze, kliknij prawym przyciskiem myszy konstruktora w Eksploratorze DSL. Można zapisać kodu niestandardowego, które jest uruchamiane po utworzeniu określonego typu relacji domeny, wybierz odpowiedni dyrektywa połączyć łącze w węźle konstruktora.W oknie dialogowym właściwości ustaw niestandardowe korzysta z połączenia.Ponownie utworzyć rozwiązanie, a następnie podaj kod w celu poprawiania błędów w wynikowe. Pisanie kodu niestandardowego, zawsze wtedy, gdy użytkownik korzysta z tego narzędzia połączenia, należy ustawić jest niestandardowe właściwości konstruktora połączenia.Można podać kod, który decyduje, czy element źródła jest dozwolone, czy określona kombinacja źródła docelowy jest dozwolone i aktualizuje co należy wprowadzać do modelu po nawiązaniu połączenia.Na przykład można umożliwić połączenie tylko wtedy, gdy nie może utworzyć pętlę w schemacie.Zamiast relacji jeden łącze można utworzyć wystąpienia wzorca bardziej złożonych z kilku elementów pokrewnych odstępów między między źródłowym i docelowym. |
Connectors.CS |
Zawiera klasy dla łączników, które są elementów diagramu, które zazwyczaj reprezentują relacji odwołania.Każdej klasy jest generowany z jednego łącznika w definicji DSL.Każdej klasy łącznik jest tworzony na podstawieBinaryLinkShape Aby kolor i niektóre inne zmienna funkcje stylu w czasie wykonywania, kliknij prawym przyciskiem myszy klasy w schemacie definicji DSL, a następnie wskaż polecenie Dodaj uwidaczniane. Aby styl dodatkowe funkcje zmienną w czasie wykonywania, na przykład zobacz TextField i ShapeElement. |
Diagram.CS |
Zawiera klasę, która definiuje diagramu.Jest pochodną Diagram. Aby kolor i niektóre inne zmienna funkcje stylu w czasie wykonywania, kliknij prawym przyciskiem myszy klasy w schemacie definicji DSL, a następnie wskaż polecenie Dodaj uwidaczniane. Ponadto, ten plik zawiera FixupDiagram reguły, która odpowiada w przypadku dodania nowego elementu do modelu.Reguła dodaje nowy kształt i połączenie z elementem modelu kształtu. |
DirectiveProcessor.cs |
Ten procesor dyrektywy pomaga użytkowników, aby zapisać szablonów tekstu, które wystąpienie swoje DSL do odczytu.Procesor dyrektywy ładuje zestawy (dll) dla swojego DSL i efektywnie wstawia using instrukcje dla obszaru nazw.Dzięki temu kod w szablonach tekst do użycia klasy i relacje, które zdefiniowano w swojej DSL. Aby uzyskać więcej informacji, zobacz Generowanie kodu z języka specyficznego dla domeny i Tworzenie niestandardowych procesorów dyrektywy T4 dotyczącej szablonu tekstowego. |
DomainClasses.cs |
Implementacje klasy domeny, które zostały zdefiniowane, łącznie z klasy abstrakcyjnej i klasy głównego modelu.Pochodzących z ModelElement. Zawiera każdej klasy domeny:
|
DomainModel.cs |
Klasa, która reprezentuje modelu domeny.Jest pochodną DomainModel.
Kopiuj i Usuń zamknięcia zdefiniować, co inne elementy powinny być uwzględnione po skopiowaniu lub usunąć element.To zachowanie można kontrolować, ustawiając propaguje kopii i propaguje usunąć właściwości ról z każdej strony co relacji.Jeśli chcesz, aby wartości, które mają być określane dynamicznie, można wpisać kod do zastąpienia metod klas zamknięcia.Aby uzyskać więcej informacji, zobacz Porady: zachowanie dotyczące programowego kopiowania i wklejania — przekierowanie. |
DomainModelResx.resx |
Zawiera ciągi, takich jak nazwy domeny klasy i właściwości, nazwy właściwości, etykiet przybornika, standardowy komunikatów o błędach i innych ciągów, które mogą być wyświetlane dla użytkownika.Zawiera również ikony narzędzia i obrazów, obraz kształtów. Ten plik jest powiązany w zestawie wbudowanych i udostępnia wartości domyślne tych zasobów.Twoje DSL można lokalizowanie tworząc w zestawie satelickie zawierający zlokalizowane wersje stworzonych przez zasoby.Ta wersja będą używane podczas DSL jest zainstalowany w kultury dopasowywania zlokalizowanych zasobów.Aby uzyskać więcej informacji, zobacz Wdrażanie rozwiązań dla języka specyficznego dla domeny. |
DomainRelationships.cs |
Każde łącze między dwoma elementami modelu jest reprezentowany przez wystąpienie klasy relacji domeny.Wszystkie klasy relacji pochodzących z ElementLink, który z kolei jest tworzony na podstawie ModelElement.Ponieważ jest ona zarządzanie magazynem, wystąpienia relacji może mieć właściwości i mogą być źródłowa lub docelowa relacji. |
HelpKeywordHelper.cs |
Udostępnia funkcje, które są używane, kiedy użytkownik naciśnie klawisz F1. |
MultiplicityValidation.cs |
W relacji ról, którego należy określić liczebność 1..1 lub 1.. *, użytkownik zostanie ostrzeżony tego co najmniej jedno wystąpienie relacji jest wymagany.Ten plik zawiera ograniczenia weryfikacji, które implementuje te ostrzeżenia.Łącze 1..1 do osadzenia nadrzędnego nie została zweryfikowana. Do wykonania tych ograniczeń, musi być zainstalowany jeden z używa... Application Virtualization w Editor\Validation węzła w Eksploratorze DSL.Aby uzyskać więcej informacji, zobacz Sprawdzanie poprawności w języku specyficznym dla domeny. |
PropertiesGrid.cs |
Ten plik zawiera kod tylko wtedy, gdy dołączono deskryptora typu niestandardowego we właściwości domeny.Aby uzyskać więcej informacji, zobacz Dostosowywanie okna właściwości. |
SerializationHelper.cs |
|
Serializer.CS |
Serializator klasę dla każdej klasy domeny, relacji, kształtu, łącznik, diagramu i modelu. Wiele funkcji tych klas kontrolowana przez ustawienia w Eksploratorze DSL pod zachowanie serializacji Xml. |
Shapes.CS |
Klasa dla każdej klasy kształt w definicji DSL.Kształty są obliczane na podstawie NodeShape.Aby uzyskać więcej informacji, zobacz Dostosowywanie przechowywania plików i serializacji XML. Aby zastąpić metody wygenerowane za pomocą własnych metod w klasie częściowe, należy ustawić generuje opracowane podwójnym łącznika w definicji DSL.Aby zastąpić konstruktora swój kod, należy ustawić ma konstruktora niestandardowe. Aby kolor i niektóre inne zmienna funkcje stylu w czasie wykonywania, kliknij prawym przyciskiem myszy klasy w schemacie definicji DSL, a następnie wskaż polecenie Dodaj uwidaczniane. Aby styl dodatkowe funkcje zmienną w czasie wykonywania, na przykład zobacz TextField iShapeElement |
ToolboxHelper.cs |
Konfiguruje przybornika poprzez zainstalowanie prototypów grupy elementu do narzędzia elementu.Kopie tych prototypów są scalane z elementów docelowych, jeśli użytkownik narzędzia. Można zastąpić CreateElementPrototype() do definiowania element przybornika, który tworzy grupę kilka obiektów.Na przykład można zdefiniować elementu do reprezentowania obiektów, które mają składniki podrzędne.Po zmianie kodu, resetowanie doświadczalnych wystąpienie Visual Studio wyczyszczenia pamięci podręcznej przybornika. |
Wygenerowane pliki w projekcie DslPackage
DSL model couples DslPackage Visual Studio powłoki poleceń okna, przybornika i menu zarządzania.Większość klas są podwójne opracowane, co można przesłonić ich metod.
Nazwa pliku |
Opis |
||
---|---|---|---|
CommandSet.cs |
Poleceń menu kontekstowego, które są widoczne na diagramie.Można dostosować lub dodać do tego zestawu.Ten plik zawiera kod dla polecenia.Lokalizacja poleceń w menu jest określana przez plik Commands.vsct.Aby uzyskać więcej informacji, zobacz Pisanie poleceń i akcji użytkownika. |
||
Constants.CS |
Identyfikatory GUID. |
||
DocData.cs |
YourDslDocData zarządza ładowania i zapisywania do pliku modelu, a następnie utworzy wystąpienie magazynu. Na przykład, jeśli chcesz zapisać swoje DSL w bazie danych, a nie w pliku, można zastąpić Load i Save metody. |
||
DocView.cs |
YourDslDocView zarządza okna pojawia się diagramu.Na przykład można osadzić diagramu w formie systemu windows: Dodaj plik kontrolki użytkownika do projektu DslPackage.Dodaj Panel, w którym można wyświetlić diagramu.Dodaj przycisków i innych kontrolek.W widoku Kod formularza Dodaj następujący kod, dostosowywanie nazwy użytkownika DSL:
|
||
EditorFactory.cs |
Tworzy DocData i DocView.Działa zgodnie standardowego interfejs, który Visual Studio używa, aby otworzyć Edytor podczas uruchamiania pakietu DSL.Odwołuje się do niego ProvideEditorFactory atrybutu w parametrze Package.cs |
||
GeneratedVSCT.vsct |
Lokalizuje standardowych poleceń menu, takich jak menu kontekstowego diagramu edytować menu itd.Kod dla polecenia jest CommandSet.cs.Można przenieść lub zmodyfikować te polecenia, standard i może dodać własne polecenia.Aby uzyskać więcej informacji, zobacz Pisanie poleceń i akcji użytkownika. |
||
ModelExplorer.cs |
Definiuje Eksploratora modelu dla swojego DSL.To jest widoczny dla użytkownika obok diagramu modelu w widoku drzewa. Na przykład można zastąpić InsertTreeView() Aby zmienić kolejność wyświetlania elementów w Eksploratorze modelu. Wybór w Eksploratorze modelu, aby zachować synchronizację z wyborem diagramu, można użyć poniższego kodu:
|
||
ModelExplorerToolWindow.cs |
Definiuje okna, w którym jest wyświetlany w Eksploratorze modelu.Obsługuje wybór elementów w Eksploratorze. |
||
Package.CS |
Ten plik definiuje sposób DSL integruje się z Visual Studio.Atrybuty klasy pakietu zarejestrować DSL jako programu obsługi plików, które mają swoje rozszerzenie pliku, zdefiniuj jego przybornika i umożliwia definiowanie sposobu Otwórz nowe okno.Metoda Initialize() jest wywoływana jeden raz, jeśli pierwszy DSL jest ładowane do Visual Studio wystąpienie. |
||
Source.Extension.vsixmanifest |
Aby dostosować ten plik, edytować .tt pliku.
Ten plik Określa, jak DSL jest dostarczana do programu Visual Studio integracji rozszerzenia (VSIX).Aby uzyskać więcej informacji, zobacz Wdrażanie rozwiązań dla języka specyficznego dla domeny. |
Zobacz też
Koncepcje
Porady: definiowanie języka właściwego dla domeny
Dostosowywanie i rozszerzanie języka specyficznego dla domeny
Inne zasoby
Pisanie kodu pod kątem dostosowywania języka specyficznego dla domeny