Wskazówki dotyczące pisania szablony tekst T4
Te ogólne wytyczne może być przydatne, jeśli jest generowany kod programu lub inne zasoby aplikacji w Visual Studio.Nie są one ustalone zasady.
Wskazówki dotyczące szablonów T4 w czasie projektowania
Szablony T4 w czasie projektowania są szablony generujących kod w sieci Visual Studio projektu w czasie projektowania.Aby uzyskać więcej informacji, zobacz Generowanie kodu czasu projektowania przy użyciu szablonów tekst T4.
Generuje zmienną aspektów aplikacji.
Generowanie kodu jest najbardziej użyteczna dla tych aspektów aplikacji, która może ulec zmianie podczas projektu lub zmieni się między różnymi wersjami aplikacji.Te aspekty zmiennej należy oddzielić od aspektów bardziej niezmienny, dzięki czemu łatwiej można określić, co ma być generowane.Na przykład jeśli aplikacja zawiera witryny sieci Web, oddzielnych standardowej stronie obsługujące funkcje od logiki, która definiuje ścieżki nawigacji z jednej strony do innego.Koduj zmiennej aspektów w jednym lub więcej modeli źródłowych.
Model jest pliku lub bazy danych, czytany przez każdego szablonu do uzyskania określonych wartości dla zmiennej części kodu, który ma być generowany.Modele można baz danych, plików XML własnego projektu, diagramy lub języków domeny.Zazwyczaj jeden model jest używany do generowania wielu plików w Visual Studio projektu. Każdy plik jest generowany na podstawie oddzielnych szablonu.W projekcie, można użyć więcej niż jednego modelu.Na przykład można zdefiniować wzór nawigacji pomiędzy stron sieci Web i oddzielny model dla układu strony.
Model skupić się na potrzeby użytkowników i słownictwa, a nie na implementacji.
Na przykład w aplikacji witryny sieci Web, można oczekiwać modelu do odwoływania się do stron sieci Web i hiperłącza.Najlepiej wybrać formie prezentację, która odpowiada rodzaj informacji, które reprezentuje modelu.Na przykład model ścieżki nawigacji za pomocą witryny sieci Web może być diagram pola i strzałki.
Test wygenerowany kod.
Umożliwia ręczne lub automatyczne testy Sprawdź, czy kod wynikowy działa jako wymagają użytkownicy.Należy unikać generowania prób z tego samego modelu, z którego jest generowany kod.W niektórych przypadkach badania ogólne można wykonać na modelu bezpośrednio.Na przykład można napisać test, który zapewnia, że każdej strony w witrynie sieci Web można osiągnąć przez nawigacji od innych.
Niestandardowego kodu: generowanie klasy częściowe.
Zezwalaj na kod, który można zapisać ręcznie dodatkowo wygenerowany kod.Jest niezwykła systemu generacji kodu się konta dla wszystkich możliwych odczytów, które mogą wyniknąć.W związku z tym należy się spodziewać dodać do lub zastępowania niektórych wygenerowany kod.Gdy generowane materiał jest w.NET języka, takie jak Visual C# lub Visual Basic, są szczególnie przydatne, dwóch strategii:Klas generowanych powinny być częściowe.Umożliwia dodawanie zawartości do wygenerowanego kodu.
Klasy powinny być generowane w parach, jeden dziedziczenie od drugiej.Klasy podstawowej powinien zawierać wszystkie wygenerowane metody i właściwości i klasy pochodne powinny zawierać tylko konstruktorzy.Pozwala to kod napisany ręcznie w taki sposób przesłonić wygenerowanej metody.
W innych językach generowanych, takich jak XML, użyj <#@include#> dyrektywy dokonywanie prostych kombinacje zawartości napisany ręcznie i są generowane.W bardziej złożonych przypadkach może zajść zapisu post-processingu krok, który łączy wygenerowany plik z plikami napisany ręcznie.
Przenieść wspólnej materiału do dołączania plików lub szablony run-time
Aby uniknąć podobnych bloki tekstu i kodu w wielu szablonach, użyj <#@ include #> dyrektywy.Aby uzyskać więcej informacji, zobacz T4 Dyrektywy dołączania.Można również tworzyć szablony run-time tekstu w osobnym projekcie i wywoływać je z szablonu czasu projektowania.Aby to zrobić, użyj <#@ assembly #> dyrektywy oddzielne projektu access.Przykłady, zobacz "dziedziczenia w tekst szablony" w blogu Gareth Jones.
Należy rozważyć przeniesienie dużych bloków kodu do oddzielnego zestawu.
Jeśli masz duże kodu i bloków funkcja klasy, może być przydatne do przeniesienia niektórych ten kod do metod, które kompilacji w osobnym projekcie.Można użyć <#@ assembly #> dyrektywy dostęp do kodu w szablonie.Aby uzyskać więcej informacji, zobacz T4 Dyrektywy zestawu.Metody można umieścić w klasa abstrakcyjna, która może odziedziczyć tego szablonu.Klasa abstrakcyjna musi dziedziczyć po Microsoft.VisualStudio.TextTemplating.TextTransformation.Aby uzyskać więcej informacji, zobacz T4 Dyrektywy szablonu.
Generuj kod, a nie pliki konfiguracyjne
Jedna metoda zapisywania zmiennych aplikacji jest napisanie kodu rodzajowy program, który akceptuje pliku konfiguracji.Aplikacja napisane w ten sposób jest bardzo elastyczny i może być wymagana zmiana konfiguracji po zmianie wymagań biznesowych, bez przebudowanie aplikacji.Wadą tego podejścia jest jednak będą wykonywane przez aplikację dobrze, mniej niż stosowanie bardziej szczegółowych.Również jego kod programu będzie trudniejszy do odczytu i utrzymania, częściowo, ponieważ ma zawsze do zajmowania się najbardziej rodzajowe typy.Z drugiej strony, których zmiennej części są generowane przed kompilacji aplikacji może być jednoznacznie określone typy.Dzięki temu znacznie prostsze i bardziej niezawodne, aby napisać kod napisany ręcznie i zintegrować go z wygenerowanej części oprogramowania.
Uzyskanie pełnych korzyści generowania kodu, próby generowania kodu programu zamiast z plików konfiguracyjnych.
Użyj folderów wygenerowany kod
Szablony i wygenerowane pliki należy umieścić w folderze projektu o nazwie wygenerowany kod, aby było jasne, że nie są one pliki, które powinny być edytowane bezpośrednio.Jeśli tworzony jest niestandardowy kod, aby zastąpić lub dodać do klas generowanych, należy umieścić tych klas w folderze o nazwie kodu niestandardowego.Struktura typowy projekt wygląda następująco:MyProject Custom Code Class1.cs Class2.cs Generated Code Class1.tt Class1.cs Class2.tt Class2.cs AnotherClass.cs
Wskazówki dotyczące szablonów T4 Run-Time (Preprocessed)
Przenieść wspólnej materiału do szablonów dziedziczone
Dziedziczenie umożliwia udostępnianie metody i bloki tekstu między szablonami tekst T4.Aby uzyskać więcej informacji, zobacz T4 Dyrektywy szablonu.Można również dołączyć pliki, których run-time szablonów.
Przenieść dużych organów kod do klasy częściowe.
Każdy szablon run-time generuje definicji częściowej klasy, która ma taką samą nazwę jak szablon.Można napisać plik kodu, który zawiera innej definicji częściowej tej samej klasy.Do klasy w ten sposób można dodać metod, pól i konstruktorów.Tych członków może być wywołana z bloków kodu w szablonie.Zaletą w ten sposób jest to, że kod jest łatwiejszy do napisania, ponieważ technologia IntelliSense jest dostępna.Również można osiągnąć lepszą oddzielenie prezentacji i logiki podstawowej.
Na przykład w MyReportText.tt:
The total is: <#= ComputeTotal() #>
In MyReportText-Methods.cs:
private string ComputeTotal() { ... }
Niestandardowego kodu: zapewniają punkty rozszerzenia
Należy wziąć pod uwagę generowania metod wirtualnych w < # + klasy funkcja blokuje # >.Dzięki temu jednego szablonu do wykorzystania w wiele kontekstów bez modyfikacji.Zamiast modyfikować szablon, można skonstruować klasie pochodnej, która dostarcza minimalnej logiki dodatkowe.W klasie pochodnej można albo zmienić kod regularnych lub szablon run-time może być.Na przykład w MyStandardRunTimeTemplate.tt:
This page is copyright <#= CompanyName() #>. <#+ protected virtual string CompanyName() { return ""; } #>
W kodzie aplikacji:
class FabrikamTemplate : MyStandardRunTimeTemplate { protected override string CompanyName() { return "Fabrikam"; } } ... string PageToDisplay = new FabrikamTemplate().TextTransform();
Wytyczne dla wszystkich szablonów T4
Oddzielne zbieranie danych od generacji tekstu
Należy unikać mieszanie obliczeń i bloków tekstowych.W każdym szablonie tekstu użyj pierwszego < # code zablokować # > Aby ustawić zmienne i wykonywać złożone obliczenia.Od pierwszego bloku tekstu w dół do końca szablonu lub pierwszego < # + klasy funkcji blokowania # > uniknąć długich wyrażeń i uniknięcia pętle i wyrażenia warunkowe, chyba że zawierają one bloków tekstu.Praktyka ta ułatwia szablonu do odczytu i utrzymania.Nie należy używać .tt dla plików dołączanych
Używanie rozszerzenie nazwy pliku innej, takiej jak .ttinclude dla plików dołączeń.Użyj .tt tylko dla plików, które mają być przetwarzane jak run-time albo podczas projektowania szablonów tekstu.W niektórych przypadkach Visual Studio rozpoznaje .tt pliki i automatycznie ustawia właściwości ich przetwarzania.Rozpocznij każdego szablonu jako prototyp stałych.
Napisz przykładowy kod lub tekst, który chcesz wygenerować i upewnij się, że jest poprawne.Następnie zmień jej rozszerzenie na .tt i stopniowo wstawić kod, który modyfikuje zawartość, odczytując modelu.Należy wziąć pod uwagę przy użyciu modeli maszynowy.
Chociaż można utworzyć schemat XML lub bazy danych dla modeli, może być przydatne do tworzenia określonego języka domeny (DSL).DSL ma tę zaletę, generuje klasy do reprezentowania każdy węzeł w schemacie i właściwości do reprezentowania atrybuty.Oznacza to, że można zaprogramować z modelu biznesowego.Na przykład:Team Members: <# foreach (Person p in team.Members) { #> <#= p.Name #> <# } #>
Należy wziąć pod uwagę przy użyciu diagramów dla modeli.
Wiele modeli najbardziej skutecznie są przedstawiane i zarządzane po prostu jako tekst, tabele, zwłaszcza, jeśli są one bardzo duże.Jednakże dla niektórych rodzajów wymagań biznesowych jest ważne dla wyjaśnienia złożone zestawy relacje i przepływów pracy i diagramy są najlepiej nadaje się średni.Zaletą diagramu jest łatwe do omówienia z użytkowników i innych zainteresowanych stron.Przez generowanie kodu z modelu na poziomie wymagań biznesowych, można zwiększyć kodu bardziej elastyczne po zmienić wymagania.
Diagramy klas i aktywności UML może być często dostosowane do tych celów.Można także zaprojektować własny typ diagramu, jako język specyficzne dla domeny (DSL).Kod może być generowane zarówno UML i DSLs.Aby uzyskać więcej informacji, zobacz Modelowanie aplikacji i Modelowanie aplikacji.
Zobacz też
Koncepcje
Generowanie kodu czasu projektowania przy użyciu szablonów tekst T4