複雑なテンプレートを作成する際の2つの最も重要な概念は
- モデルとビューの分離-これは、テンプレートロジックを最小限に抑えるのに役立ちます(多くの場合、メンテナンスの問題の原因になります)。個人的には、これにはフレームワークは必要ないと思います。必要なのはそれだけです。
- パーシャルはあなたの友達です-私は一般的にT4を使用してモデルからスケルトンコードを生成します。特定の動作は、モデルに組み込む価値がない場合があります。多くの場合、部分的なクラスまたはメソッドを使用してその動作を実行できるようにします。
それほど重要ではありませんが素晴らしい
- コードを検索可能にする-コードを検索可能にするためにコードをナビゲートするためのIntelliSenseがないため、T4アドオンのどれも十分に優れているとは思えないため、T4アドオンに依存していません。ColumnプロパティNameを呼び出す代わりに、ColumnNameと呼ぶのと同じくらい簡単にすることができます。
- 出力に「タグ」を挿入します-出力のその部分を生成したコードを見つけやすくします。
モデル/ビューを分離する例:
<#
// Model for Dependency Pooperties
Model = new []
{
new ClassDefinition ("MyDataGrid")
{
P ("CultureInfo" , "CultureInfo"),
P ("Pen" , "CellBorderPen"),
P ("IEnumerable<object>" , "Rows"),
C ("WColumnDefinition" , "Columns"),
},
};
#>
// Include the view
<#@ include file="..\T4\DependencyProperties.ttinclude" #>
次に、ビューはモデルを反復処理し、依存関係プロパティを生成します。
次に、依存関係プロパティの動作が部分的なメソッドとして実装されます
partial void Changed_Columns(
ObservableCollection<WColumnDefinition> oldValue,
ObservableCollection<WColumnDefinition> newValue
)
{
HookUpColumns(oldValue, null);
HookUpColumns(newValue, this);
}
この特定の動作をモデルに組み込むと、モデルが大幅に複雑になることに注意してください。
ついに; 有能なプログラマーでさえ、メタプログラムを有能に書くには時間がかかります。維持できると思うスタイルにたどり着くまでに何度か試みましたが、品質をより速く出荷できるので、努力する価値がありました。
これがお役に立てば幸いです...
PS。T4がこれまでにエレガントであると誰もが主張することはないと思いますが、それでもそれは非常に便利です。