Generowanie kodu na podstawie diagramów klas UML
Aby wygenerować kodu Visual C# .NET z diagramów UML w programie Visual Studio Ultimate, należy użyć generowanie kodu polecenia. Domyślnie to polecenie generuje typ C# dla każdego typu UML, które można wybrać.Można modyfikować i rozszerzać to zachowanie przez modyfikowanie lub kopiowanie szablonów tekstu, generujących kod.W modelu można określić różne zachowania dla typów, które są zawarte w różnych pakietach.
Polecenie Generuj kod przystosowane jest do generowania kodu z wybranych przez użytkownika elementów oraz do generowania pliku dla każdej klasy UML lub innego elementu.Na przykład zrzut ekranu pokazuje dwa pliki C#, które zostały wygenerowane z dwóch klas UML.
Alternatywnie, jeśli chcesz wygenerować kod, w którym wygenerowane pliki nie mają relacji 1:1 z elementami UML, można rozważyć napisanie szablonów tekstów, które są wywoływane przez polecenie Przekształć wszystkie szablony.Aby uzyskać więcej informacji dotyczących tej metody, zobacz Porady: generowanie plików z modelu UML.
Aby uzyskać więcej informacji dotyczących diagramów klas UML w Visual Studio Ultimate, zobacz następujące tematy:
Korzystanie z polecenia Generuj Kod
W poniższej procedurze opisano domyślne zachowanie polecenia Generuj kod:
Aby wygenerować osobny plik dla każdego elementu
Utwórz model UML zawierający klasy.Można również zastosować stereotypy do elementów modelu.
Aby uzyskać więcej informacji, zobacz Domyślne przekształcenia generowania kodu.
Na diagramie klasy lub w Eksploratorze modelu UML zaznacz elementy, z których będzie generowany kod.Można wybrać jedną z następujących pozycji:
Określony zbiór elementów.
Pakiet lub model, aby wygenerować kod z jego zawartości.
Diagram, aby zaznaczyć wszystkie elementy na diagramie.
Otwórz menu skrótów dla zaznaczonego elementu, a następnie wybierz polecenie Generuj kod.
Przy pierwszym użyciu polecenia Generuj kod w określonym modelu pojawi się okno dialogowe.To okno dialogowe pozwala edytować parametry generowania kodu modelu.
Wybierz OK, jeśli nie ma potrzeby zmiany parametrów.
Aby powrócić do tego okna dialogowego później, otwórz menu skrótów diagramu, a następnie wybierz Skonfiguruj domyślne ustawienia generowania kodu.Aby uzyskać więcej informacji, zobacz Dostosowywanie polecenia Generuj kod.
Generowane są pliki zawierające kod C#.Domyślnie generowany jest plik dla każdego typu i pliki są generowane w projekcie biblioteki klas języka C#.Można jednak dostosować to zachowanie.Aby uzyskać więcej informacji, zobacz Dostosowywanie polecenia Generuj kod.
Pewne testy sprawdzania poprawności są stosowane do modelu w celu zapewnienia, że może on być przetłumaczony na C#.Jeśli testy te nie powiodą się, wyświetlany jest komunikat o błędzie i generowanie kodu nie jest wykonywane.Jeśli utworzono polecenie walidacji menu, kod nie będzie generowany dla każdego elementu, dla którego polecenie walidacji nie powiedzie się.Aby uzyskać więcej informacji, zobacz Porady: definiowanie ograniczeń walidacji dla modeli UML.
Domyślne przekształcenia generacji kodu
Ta sekcja zawiera podsumowanie wyników, które są produkowane przez polecenie Generuj kod , chyba że polecenie zostało zmodyfikowane.Aby uzyskać więcej informacji, zobacz Dostosowywanie polecenia Generuj kod.
Dla każdego typu wybranego w modelu UML tworzony jest jeden typ C#.Każdy typ jest umieszczany w osobnym pliku z kodem w folderze GeneratedCode.
Jeśli typ UML jest zawarty w pakiecie, wygenerowany typ C# jest umieszczony wewnątrz przestrzeni nazw i jest on generowany w folderze, który ma taką samą nazwę jak przestrzeń nazw.
Każdy Attribute klasy UML ma generowaną właściwość języka C#.
Każda Operation typu UML ma generowaną metodę języka C#.
Pole C# jest generowane dla każdego skojarzenia nawigacyjnego, w którym uczestniczy klasa.
Dodając stereotyp do każdego typu UML, można kontrolować więcej właściwości wygenerowanego typu C#.
Aby utworzyć ten typ C# |
Narysuj ten typ UML |
Zastosuj ten stereotyp |
---|---|---|
Class |
Class |
< Brak > lub Klasa C# |
Interface |
Interface |
< Brak > lub Interfejs C# |
Wyliczenie |
Wyliczenie |
< Brak > lub Wyliczenie C# |
Delegate |
Class |
Delegat C# |
Struct |
Class |
Struktura C# |
Aby ustawić stereotyp na typie lub innym elemencie
Otwórz menu skrótów elementu w diagramie lub w Eksploratorze modelu UML, a następnie wybierz polecenie Właściwości.
W oknie Właściwości wybierz strzałkę we właściwości Stereotypy, a następnie zaznacz pole wyboru dla stereotypu, który chcesz zastosować.
Porada
Jeśli stereotypy języka C# nie są wyświetlane, włącz profil C# dla modelu lub pakietu, który zawiera stosowne elementy modelu.Wybierz pakiet lub korzeń modelu w Eksploratorze modelu UML.Następnie w oknie Właściwości wybierz polecenie Profil, a następnie włącz profil C#.
Aby wyświetlić dodatkowe właściwości, które można ustawiać, rozwiń właściwość Stereotypy.
Właściwości Opis typów, atrybutów, operacji i skojarzeń są zapisywane w komentarzach <summary> w wygenerowanym kodzie.Elementy typu komentarz, które są połączone z typami, są zapisywane w komentarzach <remarks>.
Różnicowanie wygenerowanego kodu
Wygenerowany kod zmienia się zależne od właściwości każdego typu, atrybutu lub operacji.Na przykład, jeśli właściwość Jest abstrakcyjny klasy ma wartość true, słowo kluczowe abstract pojawi się na wygenerowanej klasie.Jeśli Liczebność atrybutu zostanie ustawiona na 0.. *, to wygenerowana właściwość będzie miała typ IEnumerable<>.
Ponadto, każdy stereotyp zapewnia kilka dodatkowych właściwości, które można ustawiać.Te wartości są tłumaczone na odpowiednie słowa kluczowe w kodzie języka C#.Na przykład, jeśli właściwość Is Static jest ustawiona dla klasy, to klasa C# będzie static.
Aby ustawić te dodatkowe właściwości, zaznacz klasę lub inny element na diagramie.W oknie właściwości rozwiń węzeł Stereotypy, a następnie rozwiń stereotyp C#, taki jak Klasa C#.Dla klas te dodatkowe właściwości obejmują:
Atrybuty CLR
Jest częściowy
Jest statyczny
Jest niebezpieczny
Widoczność pakietu
Każdy atrybut i operacja również ma właściwości stereotypu, które można ustawiać.Jeśli właściwości na nowym atrybucie nie są widoczne, uruchom polecenie Generuj kod.
Dostosowywanie polecenia Generuj kod
Polecenie Generuj kod działa poprzez przekształcenie elementów modelu przy użyciu zestawu szablonów tekstu.Aby uzyskać więcej informacji dotyczących szablonów tekstu, zobacz Generowanie kodu i szablony tekstowe T4.
Szablony są określone w zestawie powiązań szablonu tekstu.Powiązanie szablonu tekstu określa, jaki szablon powinien być stosowany, gdzie mają być umieszczone wygenerowane dane wyjściowe, oraz inne parametry polecenia Generuj kod.
Przy pierwszym uruchomieniu polecenia Generuj kod na modelu dołączany jest domyślny zestaw powiązań szablonu do korzenia modelu.Te powiązania dotyczą wszystkich elementów w modelu.
Można jednak nadpisywać i rozszerzać domyślne powiązania, dołączając własne powiązania do pakietów, klas i innych elementów.Powiązanie stosuje się do wszystkich elementów zawartych w elemencie, do którego jest podłączone.Na przykład, chcąc przekształcić wszystkie typy wewnątrz danego pakietu przez różne zestawy szablonów, lub aby dane wyjściowe znalazły się w innym folderze, można dołączyć powiązania szablonów do pakietu.
Aby przeprowadzić inspekcję powiązań dołączonych do elementu modelu, wybierz wielokropek [...] we właściwości Powiązania szablonów tekstu w oknie dialogowym Właściwości.
Polecenie Generuj kod stosuje szablon do każdego elementu modelu, który został wybrany.Dla każdego elementu zestaw zastosowanych szablonów jest połączonym zestawem szablonów, które są dołączone do jego kontenerów i zawierają korzeń modelu.
Jeśli dwa powiązania szablonów w zestawie mają taką samą nazwę, powiązanie w mniejszym kontenerze zastąpi powiązanie w większym kontenerze.Na przykład, korzeń modelu ma powiązanie o nazwie Class Template.Aby zastosować własny szablon do zawartości danego pakietu, zdefiniuj własny szablon powiązania o nazwie Class Template.
Do elementu modelu można zastosować więcej niż jeden szablon.Z każdego elementu modelu można wygenerować więcej niż jeden plik.
[!UWAGA]
Powiązania dołączone do korzenia modelu działają jako ustawienia domyślne dla wszystkich elementów w modelu.Aby wyświetlić te domyślne powiązania, otwórz menu skrótów dla powierzchni diagramu, a następnie wybierz Konfiguracja domyślnych ustawień generowania kodu.Alternatywnie, możesz wybrać korzeń modelu w Eksploratorze modelu UML, a następnie [...] we właściwości Powiązania szablonu tekstu.Powiązania nie pojawią się, dopóki polecenie Generuj kod nie zostało użyte co najmniej raz.Szablony powiązań nie mogą być dołączone do diagramu.
Aby dołączyć powiązanie szablony tekstu do pakietu lub innego elementu modelu
W Eksploratorze modelu UML otwórz menu skrótów dla elementu modelu, a następnie wybierz Właściwości.Na ogół powiązania szablonów tekstu są dołączane do pakietu lub do korzenia modelu.
W oknie Właściwości kliknij przycisk wielokropka ([...]) we właściwości Powiązania szablonów tekstu.
Pojawi się okno dialogowe Powiązania szablonów tekstu.
Następnie wybierz Dodaj, aby utworzyć nowe powiązanie szablonu tekstu.
—lub—
Wybierz istniejące powiązanie, aby je edytować.
Każde powiązanie szablonu definiuje, jak określony szablon powinien być stosowany do wybranego elementu modelu i innych elementów modelu, które szablon zawiera.
W oknie dialogowym ustaw właściwości powiązania szablonu tekstu.
Właściwość
Opis
Nazwa
Nazwa dla tego powiązania.Aby zastąpić powiązanie odziedziczone z zawartego pakietu lub modelu, użyj takiej samej nazwy, jaką ma powiązanie, które chcesz zastąpić.
Zastąp
Jeśli ma wartość true, istniejący kod jest zastępowany.
Nazwa obiektu docelowego
Nazwa pliku, który jest generowany.
Do tego ciągu można wstawiać wyrażenia, takie jak {Name} lub {Owner.Name}.Na przykład, można napisać: {Owner.Name}_{Name}.Wyrażenie jest określane na elemencie modelu.Może używać właściwości elementów, lecz nie metod.Aby dowiedzieć się, jakie właściwości mogą być używane, przyjrzyj się właściwościom typów w Microsoft.VisualStudio.Uml.*.
Ważne
{Name} lub {Owner.Name} można użyć tylko we właściwości Target Name.Aby zmienić nazwę wygenerowanej klasy, musisz zmodyfikować szablon.Aby uzyskać więcej informacji, zobacz Pisanie szablonu tekstu.
Ścieżka projektu
Określa ścieżkę do projektu Visual Studio, która będzie zawierać pliki wyjściowe transformacji.Aby utworzyć nowy projekt skorzystaj z typowanych wartości.Aby wybrać istniejący projekt, wybierz przycisk wielokropka ([...]).
Jeśli projekt nie istnieje zostanie utworzony nowy.Będzie to projekt biblioteki klas języka C#.
Aby to zrobić, musisz wpisać nazwę projektu bezpośrednio.Możesz dołączyć makra zmiennej środowiska, takie jak %ProgramFiles% lub %LocalAppData%.
Katalog docelowy
Folder, w którym generowany jest plik docelowy.Ścieżka jest względna w stosunku do folderu projektu.
Można użyć {PackageStructure} wyrażenia do wstawienia ścieżki, umożliwiająca nazwy zawierające pakietów.Wartość domyślna to \GeneratedCode\{PackageStructure}.Można również dołączyć zmienne środowiskowe, takie jak %TEMP% lub %HomePath%.
Ważne
Wartość {PackageStructure} może być używana tylko we właściwości Katalog docelowy.
Ścieżka pliku szablonu
Szablon, który będzie wykonywał przekształcenia.
Można użyć dostarczonych szablonów lub stworzyć własne.Dostarczone szablony można znaleźć w następującej lokalizacji:
…\Program Files\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\Architecture Tools\Extensibility\Templates\Text\
Można dołączyć dowolną liczbę powiązań do elementu.
Pisanie szablonu tekstu
Można napisać własne szablony tekstu.Szablony tekstu mogą generować kod programu lub dowolnego innego rodzaju plik tekstowy.
Firma Microsoft zaleca rozpoczynanie pracy od modyfikowania kopii szablonów standardowych.Szablony można skopiować z następujących lokalizacji:
…\Program Files\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\Architecture Tools\Extensibility\Templates\Text\
Informacje na temat szablonów tekstu można znaleźć w następujących tematach.
Szablon tekstu jest prototypem wynikowego pliku i zawiera tekst wynikowy i kod programu, który odczytuje model.Aby uzyskać więcej informacji, zobacz Generowanie kodu i szablony tekstowe T4.
Do nawigacji modelu UML w kodzie programu, należy użyć interfejsu API UML.Aby uzyskać więcej informacji, zobacz Porady: nawigowanie po modelu UML i Wykaz interfejsów API dla rozszerzalności modelowania UML.
Aby użyć szablonów z poleceniem Generuj kod, trzeba dołączyć dyrektywę modelowania.Na przykład:
<#@ Modeling ElementType="Microsoft.VisualStudio.Uml.Classes.IClass" Processor="ModelingProcessor" #>
Atrybut ElementType określa typ elementu UML, do którego odnosi się ten szablon.
W szablonie this należy do tymczasowej klasy, która ma następujące właściwości:
Element = UML IElement, do którego zastosowano szablon.
Errors: CompilerErrorCollection
ModelBus: ModelBus.Aby uzyskać więcej informacji, zobacz Porady: integrowanie modeli UML z innymi modelami i narzędziami.
ProfileName = "C#Profile"
ServiceProvider: IServiceProvider
Session: TextTemplatingSession.
Store: Store.Jest to magazyn Visualization and Modeling SDK, w którym zaimplementowano UML ModelStore.Aby uzyskać UML IModelStore, użyj this.Element.GetModelStore().
Następujące punkty mogą okazać się pomocne podczas pisania szablonu tekstu.Informacje te są szczegółowo opisane w Generowanie kodu i szablony tekstowe T4.
Rozszerzenie nazwy pliku wynikowego można ustawić w dyrektywie Output.W każdym szablonie tekstu jest wymagana jedna dyrektywa Output.
Niektóre zestawy są automatycznie dołączane do szablonu.Zestawy te obejmują na przykład: System.dll i Microsoft.VisualStudio.Uml.Interfaces.dll.
Aby użyć innych zestawów w generowanym kodzie programu, trzeba użyć dyrektywy Assembly.Na przykład:
<#@ Assembly Name="%ProgramFiles%\Microsoft Visual Studio 12.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.ArchitectureTools.Extensibility.dll" #>
Niektóre przestrzenie nazw, takie jak System, są automatycznie importowane do kodu programu.W innych przestrzeniach nazw można użyć dyrektywy Import w taki sam sposób, w jaki korzysta się z instrukcji using.Na przykład:
<#@ Import Namespace="Microsoft.VisualStudio.Uml.Classes" #>
<#@ Import Namespace="Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml" #>
Aby odwołać się do tekstu z innego pliku, należy użyć dyrektywy Include.
Części szablonu w nawiasach <# ... #> są wykonywane przez polecenie Generuj kod.Części szablonu poza tymi nawiasami są kopiowane do pliku wynikowego.Ważne jest, aby rozróżniać wygenerowany kod od wygenerowanego tekstu.Wygenerowany tekst może być w dowolnym języku.
<#= Expressions #> są obliczane i konwertowane na ciągi.