[英]Is there anything out there to make T4 code more… clean?
我有一个相当复杂的东西塞进T4模板。 基本上我采取类似的东西
{= foo =}更多文字...
并将其转换为类(视图),如下所示:
public class MyView
{
public string foo{get;set;}
public string Write()
{
return foo+@" more text...";
}
}
生成的代码当然要复杂得多。 无论如何,T4模板现在超过600行代码,并且真正变得难以管理。 我认为主要问题是混合代码和“内容”(即静态代码)。 我不确定如何干净地解决这个问题(当然不会影响生成的代码)。 我也没有看到任何可行的单元测试我的T4代码的方法,除了简单地测试它的T4执行错误。 当然,似乎几乎不可能测试它生成的代码。
我可以使用任何“模型 - 视图”类型的框架或技术来使我的T4模板代码更干净吗?
恕我直言,编写复杂模板时最重要的两个概念是
不那么重要但很好
分离模型/视图的示例:
<#
// 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是优雅的,但它仍然是有用的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.