【发布时间】:2012-10-18 10:37:15
【问题描述】:
我在 T4 模板中塞入了一个相当复杂的东西。基本上我会采取类似
{=foo=} 更多文字...
并将其转换为类(视图),如下所示:
public class MyView
{
public string foo{get;set;}
public string Write()
{
return foo+@" more text...";
}
}
生成的代码当然比这复杂得多。无论如何,T4 模板现在有超过 600 行代码,而且很快就变得难以管理。我认为主要问题是混合代码和“内容”(即静态代码)。我不太确定如何彻底解决这个问题(当然不会影响生成的代码)。除了简单地测试 T4 执行错误之外,我也没有看到任何可行的方法来对我的 T4 代码进行单元测试。当然,测试它生成的代码似乎是几乎不可能完成的任务。
是否有任何“模型-视图”类型的框架或技术可以让我的 T4 模板代码更简洁?
【问题讨论】:
-
这可能不是一个选项,但我更喜欢Resharper Templates 而不是 T4 模板。此外,Resharper 也是用于其他用途的绝佳工具。物有所值。
-
Resharper 是一个很好的工具,但恕我直言,比较 Resharper 模板与 T4 是比较苹果和橘子。 Resharper Templates 正在推广带有工具支持的复制粘贴反模式,导致您必须维护越来越多的冗余代码,从而增加了维护成本。 T4(和其他工具)将冗余最小化,因为您编写了一个生成代码工件(具有大量冗余)的元程序(具有低冗余)。关键是元程序和生成的代码之间的随意连接不会丢失。
标签: c# unit-testing refactoring code-generation t4