Aracılığıyla paylaş


T4 Metin Şablonları Yazma Yönergeleri

Visual Studio'da program kodu veya diğer uygulama kaynakları oluşturuyorsanız bu genel yönergeler yararlı olabilir. Bunlar sabit kurallar değildir.

Tasarım Zamanı T4 Şablonları için Yönergeler

Tasarım zamanı T4 şablonları, Visual Studio projenizde tasarım zamanında kod oluşturan şablonlardır. Daha fazla bilgi için bkz . T4 Metin Şablonları kullanarak Tasarım Zamanı Kodu Oluşturma.

Uygulamanın değişken yönlerini oluşturun.

Kod oluşturma en çok uygulamanın proje sırasında değişebilecek veya uygulamanın farklı sürümleri arasında değişebilecek yönleri için kullanışlıdır. Nelerin oluşturulması gerektiğini daha kolay belirleyebilmek için bu değişken yönlerini daha sabit yönlerden ayırın. Örneğin, uygulamanız bir web sitesi sağlıyorsa, standart sayfa sunma işlevlerini gezinti yollarını tanımlayan mantıktan bir sayfadan diğerine ayırın.

Değişken yönlerini bir veya daha fazla kaynak modelde kodlar.

Model, her şablonun oluşturulacak kodun değişken bölümleri için belirli değerler elde etmek için okuduğu bir dosya veya veritabanıdır. Modeller veritabanları, kendi tasarımınızdaki XML dosyaları, diyagramlar veya etki alanına özgü diller olabilir. Genellikle bir Visual Studio projesinde çok sayıda dosya oluşturmak için bir model kullanılır. Her dosya ayrı bir şablondan oluşturulur.

Projede birden fazla model kullanabilirsiniz. Örneğin, web sayfaları arasında gezinmek için bir model ve sayfaların düzeni için ayrı bir model tanımlayabilirsiniz.

Modeli uygulamanıza değil kullanıcıların ihtiyaçlarına ve kelime dağarcığına odakla.

Örneğin, bir web sitesi uygulamasında modelin web sayfalarına ve köprülere başvurmasını beklersiniz.

İdeal olarak, modelin temsil ettiği bilgi türüne uygun bir sunu biçimi seçin. Örneğin, bir web sitesi üzerinden gezinti yolları modeli kutu ve ok diyagramı olabilir.

Oluşturulan kodu test edin.

Elde edilen kodun kullanıcıların gerektirdiği şekilde çalıştığını doğrulamak için el ile veya otomatikleştirilmiş testleri kullanın. Kodun oluşturulduğu modelden testler oluşturmaktan kaçının.

Bazı durumlarda, genel testler doğrudan model üzerinde gerçekleştirilebilir. Örneğin, web sitesindeki her sayfaya diğer sayfalardan gezinti yoluyla ulaşılabilmesini sağlayan bir test yazabilirsiniz.

Özel koda izin ver: kısmi sınıflar oluşturun.

Oluşturulan koda ek olarak el ile yazdığınız koda izin verin. Bir kod oluşturma düzeninin ortaya çıkabilecek tüm olası varyasyonları hesaba eklemesi olağan dışıdır. Bu nedenle, oluşturulan kodun bir bölümüne ekleme veya geçersiz kılmayı beklemeniz gerekir. Oluşturulan malzeme C# veya Visual Basic gibi bir .NET dilindeyse iki strateji özellikle yararlıdır:

  • Oluşturulan sınıflar kısmi olmalıdır. Bu, oluşturulan koda içerik eklemenize olanak tanır.

  • Sınıflar, biri diğerinden devralan çiftler halinde oluşturulmalıdır. Temel sınıf, oluşturulan tüm yöntemleri ve özellikleri içermeli ve türetilmiş sınıf yalnızca oluşturucuları içermelidir. Bu, el ile yazılmış kodunuzun oluşturulan yöntemlerden herhangi birini geçersiz kılmasını sağlar.

XML gibi diğer oluşturulan dillerde, el ile yazılmış ve oluşturulan içeriğin basit birleşimlerini yapmak için yönergesini kullanın <#@include#> . Daha karmaşık durumlarda, oluşturulan dosyayı el ile yazılmış dosyalarla birleştiren bir işlem sonrası adımı yazmanız gerekebilir.

Ortak malzemeleri ekleme dosyalarına veya çalışma zamanı şablonlarına taşıyın.

Birden çok şablonda benzer metin ve kod bloklarının yinelenmesinden kaçınmak için yönergesini <#@ include #> kullanın. Daha fazla bilgi için bkz . T4 Include Yönergesi.

Ayrıca, ayrı bir projede çalışma zamanı metin şablonları oluşturabilir ve bunları tasarım zamanı şablonundan çağırabilirsiniz. Bunu yapmak için yönergesini <#@ assembly #> kullanarak ayrı projeye erişin.

Büyük kod bloklarını ayrı bir derlemeye taşımayı göz önünde bulundurun.

Büyük kod bloklarınız ve sınıf özellik bloklarınız varsa, bu kodun bir bölümünü ayrı bir projede derlediğiniz yöntemlere taşımak yararlı olabilir. şablonundaki <#@ assembly #> koda erişmek için yönergesini kullanabilirsiniz. Daha fazla bilgi için bkz . T4 Derleme Yönergesi.

Yöntemleri şablonun devralabileceği soyut bir sınıfa yerleştirebilirsiniz. Soyut sınıfı öğesinden Microsoft.VisualStudio.TextTemplating.TextTransformationdevralmalıdır. Daha fazla bilgi için bkz . T4 Şablon Yönergesi.

Yapılandırma dosyaları değil kod oluşturun.

Değişken uygulama yazmanın bir yöntemi, yapılandırma dosyasını kabul eden genel program kodu yazmaktır. Bu şekilde yazılmış bir uygulama çok esnektir ve iş gereksinimleri değiştiğinde uygulamayı yeniden derlemeden yeniden yapılandırılabilir. Ancak bu yaklaşımın bir dezavantajı, uygulamanın belirli bir uygulamadan daha az iyi performans göstermesini sağlar. Ayrıca, program kodunu okumak ve korumak biraz daha zor olacaktır, çünkü her zaman en genel türlerle ilgilenmesi gerekir.

Buna karşılık, derlemeden önce değişken parçaları oluşturulan bir uygulama kesin olarak yazılabilir. Bu, elle yazılmış kod yazmayı ve yazılımın oluşturulan bölümleriyle tümleştirmeyi çok daha kolay ve güvenilir hale getirir.

Kod oluşturmanın tüm avantajlarından yararlanmak için yapılandırma dosyaları yerine program kodu oluşturmayı deneyin.

Oluşturulan Kod klasörünü kullanın.

Şablonları ve oluşturulan dosyaları Oluşturulan Kod adlı bir proje klasörüne yerleştirerek bunların doğrudan düzenlenmesi gereken dosyalar olmadığını açıkça belirtin. Geçersiz kılmak veya oluşturulan sınıflara eklemek için özel kod oluşturursanız, bu sınıfları Özel Kod adlı bir klasöre yerleştirin. Tipik bir projenin yapısı şöyle görünür:

MyProject
   Custom Code
      Class1.cs
      Class2.cs
   Generated Code
      Class1.tt
          Class1.cs
      Class2.tt
          Class2.cs
   AnotherClass.cs

Çalışma Zamanı (Önceden İşlenmiş) T4 Şablonları için Yönergeler

Ortak malzemeleri devralınan şablonlara taşıyın.

T4 metin şablonları arasında yöntemleri ve metin bloklarını paylaşmak için devralmayı kullanabilirsiniz. Daha fazla bilgi için bkz . T4 Şablon Yönergesi.

Çalışma zamanı şablonlarına sahip ekleme dosyalarını da kullanabilirsiniz.

Büyük kod gövdelerini kısmi bir sınıfa taşıyın.

Her çalışma zamanı şablonu, şablonla aynı ada sahip kısmi bir sınıf tanımı oluşturur. Aynı sınıfın başka bir kısmi tanımını içeren bir kod dosyası yazabilirsiniz. Sınıfa bu şekilde yöntemler, alanlar ve oluşturucular ekleyebilirsiniz. Bu üyeler şablondaki kod bloklarından çağrılabilir.

Bunu yapmanın bir avantajı, IntelliSense kullanılabilir olduğundan kodun daha kolay yazılabilmesidir. Ayrıca, sunu ile temel alınan mantık arasında daha iyi bir ayrım elde edebilirsiniz.

Örneğin, MyReportText.tt:

The total is: <#= ComputeTotal() #>

MyReportText-Methods.cs dosyasında:

private string ComputeTotal() { ... }

Özel koda izin ver: Uzantı noktaları sağlayın.

#+ sınıfı özellik bloklarında <># sanal yöntemler oluşturmayı göz önünde bulundurun. Bu, tek bir şablonun değişiklik yapılmadan birçok bağlamda kullanılmasını sağlar. Şablonu değiştirmek yerine, en düşük ek mantığı sağlayan türetilmiş bir sınıf oluşturabilirsiniz. Türetilmiş sınıf normal kod veya bir çalışma zamanı şablonu olabilir.

Örneğin, MyStandardRunTimeTemplate.tt:

This page is copyright <#= CompanyName() #>.
<#+ protected virtual string CompanyName() { return ""; } #>

Bir uygulamanın kodunda:

class FabrikamTemplate : MyStandardRunTimeTemplate
{
  protected override string CompanyName() { return "Fabrikam"; }
}
...
  string PageToDisplay = new FabrikamTemplate().TextTransform();

Tüm T4 Şablonları için Yönergeler

Veri toplamayı metin oluşturma işleminden ayırın.

Hesaplama ve metin bloklarını karıştırmaktan kaçınmaya çalışın. Her metin şablonunda değişkenleri ayarlamak ve karmaşık hesaplamalar gerçekleştirmek için ilk <# kod bloğunu #> kullanın. İlk metin bloğundan şablonun veya ilk <#+ sınıfı özellik bloğunun sonuna kadar #> uzun ifadelerden kaçının ve metin blokları içermedikleri sürece döngülerden ve koşullulardan kaçının. Bu uygulama, şablonun okunmasını ve bakımını kolaylaştırır.

Ekleme dosyaları için kullanmayın .tt .

Ekleme dosyaları gibi .ttinclude farklı bir dosya adı uzantısı kullanın. Yalnızca çalışma zamanı veya tasarım zamanı metin şablonları olarak işlenmesini istediğiniz dosyalar için kullanın .tt . Bazı durumlarda, Visual Studio dosyaları tanır .tt ve işleme için özelliklerini otomatik olarak ayarlar.

Her şablonu sabit bir prototip olarak başlatın.

Oluşturmak istediğiniz kodun veya metnin bir örneğini yazın ve doğru olduğundan emin olun. Ardından uzantısını .tt olarak değiştirin ve modeli okuyarak içeriği değiştiren kodu artımlı olarak ekleyin.

Yazılan modelleri kullanmayı göz önünde bulundurun.

Modelleriniz için bir XML veya veritabanı şeması oluşturabilirsiniz ancak etki alanına özgü bir dil (DSL) oluşturmak yararlı olabilir. DSL, şemadaki her düğümü temsil eden bir sınıf oluşturma avantajına ve öznitelikleri temsil eden özelliklere sahiptir. Bu, iş modeli açısından programlayabileceğiniz anlamına gelir. Örneğin:

Team Members:
<# foreach (Person p in team.Members)
 { #>
    <#= p.Name #>
<# } #>

Modelleriniz için diyagramları kullanmayı göz önünde bulundurun.

Özellikle çok büyük olan birçok model en etkili şekilde metin tabloları olarak sunulur ve yönetilir.

Ancak, bazı iş gereksinimleri için karmaşık ilişki kümelerini ve iş akışlarını netleştirmek önemlidir ve diyagramlar en uygun ortamdır. Diyagramın avantajlarından biri, kullanıcılarla ve diğer paydaşlarla kolayca tartışılmasıdır. İş gereksinimleri düzeyinde bir modelden kod oluşturarak, gereksinimler değiştiğinde kodunuzu daha esnek hale getirirsiniz.

Kendi diyagram türünüzü etki alanına özgü bir dil (DSL) olarak da tasarlayabilirsiniz. Kod hem UML hem de DSL'lerden oluşturulabilir. Daha fazla bilgi için bkz . Mimariyi Çözümleme ve Modelleme.