是
- 分離的模型和視圖 - 這有助於保持模板邏輯降至最低(經常的維護問題的原因)。我個人認爲這不需要一個框架,它只需要你這樣做。
- 部分是你的朋友 - 我一般使用T4來從模型生成骨架代碼。具體的行爲可能不值得投入模型,更經常地通過使用部分類或方法來允許這種行爲。
不是很重要,但很好
- 使代碼搜索 - 我不以航行靠T4附加組件,因爲我覺得他們沒有足夠好,再加上缺乏智能感知的代碼我必須使代碼可搜索。它可以像調用Column屬性名稱一樣簡單,我稱之爲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永遠是優雅的,但它仍然是有用的。
這可能不是一個選項,但我更喜歡通過T4模板的[Resharper模板](http://www.jetbrains.com/resharper/features/code_templates.html)。此外,[resharper](http://www.jetbrains.com/resharper/)也是一款令人驚喜的工具,可用於其他用途。這是值得的成本。 – TylerOhlsen
Resharper是一個很好的工具,但恕我直言,比較Resharper模板與T4是比較蘋果和橙子。 Resharper模板正在推廣使用工具支持的複製粘貼反模式,導致您必須維護越來越多的冗餘代碼,從而增加了維護成本。 T4(和其他工具)最大限度地減少了冗餘,因爲你編寫了一個元程序(它具有低冗餘度),可以生成代碼僞像(具有大量的減少量)。關鍵是元程序和生成的代碼之間的偶然連接不會丟失。 – FuleSnabel