2010-11-03 57 views
2

在我看来,这听起来像一个非常棒的想法。使用EnvDTE也可以实现这一点,为什么没有更多的例子可用?使用T4模板生成ViewModels

也许我错过了这样做的缺点......?

任何指向良好的T4和EnvDTE资源的指针都会很棒。 :)

+0

从什么生成它们? – SLaks 2010-11-03 12:50:39

+0

SLaks:从我的模型开始......所以不是先改变模型,然后再改变视图模型,我可以依靠代码生成生成我的视图模型的无聊部分(例如,公开的属性) – rozon 2010-11-03 13:03:17

回答

3

你可能不会看到它很多,因为它实际上很难实现。我一直在使用T4从WCF DTO生成模型类,以便在WinForms MVP变体中使用一段时间,并且花了相当长的时间才使它正常工作。

将一个类用作模板的“数据”源自身是非常困难的。您需要选择使用反射(或类似的API)来读取编译的IL或CodeDom来阅读源代码。如果您选择使用编译程序集,则需要解决文件锁定和加载引用程序集等问题。如果您选择使用源代码,则需要处理潜在的不可编译的代码。

一旦你做出了这个决定,复制属性将是你需要做的最微不足道的事情。您还需要决定将源类中的哪些接口和属性(如果有)重新实现/复制到生成的类中。根据你如何执行验证等事情,这可能会引发各种小挑剔的问题。关于如何处理继承层次结构和对其他模型类的引用,还有很多有趣的决定。

以上所有内容都是可寻址的,但一个通用的方法实现起来相当困难。回到你的问题的“例子”部分,还有一个潜在的问题,就是没有得到报酬而做了很多工作。我很乐意能够分享我为模型生成而创建的T4,但它属于我的雇主,而且我有更多的空闲时间去做,而不是重新实施在网络上发布的方法......