T4 vs CodeDom vs Oslo

时间:2009-01-29 14:56:24

标签: .net code-generation t4 codedom oslo

在我正在使用的应用程序脚手架项目中,我正在尝试决定是使用OsloT4还是CodeDom来生成代码。我们的目标是将依赖关系降至最低,并从用户故事中为域驱动设计驱动代码生成。第一步是从用户故事创建测试,但我们希望领域专家能够在各种不同的媒体(例如自定义应用程序,Word等)中编写故事,并且仍然可以从故事。

到目前为止我所知道的:

  1. CodeDom需要.NET,但只能输出.NET类文件(例如.cs,.vb)。难度水平相当高。
  2. T4需要CodeDom和VS Standard +。难度级别相当合理,尤其是T4 Toolbox
  3. 奥斯陆很新。我不知道依赖项,但我想你必须至少使用.NET 3.5。我也不确定代码生成能力或添加新语法的复杂性。但是,领域专家可能很容易在Intellipad中编写用户故事。也不确定将Word中的故事转换为MGrammar的容易程度。
  4. 使用上述任何工具,您有什么想法,经验等等。我们希望坚持使用Microsoft或开源工具。

5 个答案:

答案 0 :(得分:9)

使用T4 - 轻松决定。

  • 奥斯陆太新了,而且这些工具太过于原始而不是一种只有eval技术的工具
  • CodeDOM非常强大,如果您需要在运行时生成CLR类,并且愿意牺牲对生成的输出的简单修改。
  • T4(使用T4工具包)是一种易于使用的通用代码生成工具。到目前为止,我遇到的困难只是构建时集成。

答案 1 :(得分:3)

一般来说,我将代码生成视为完整建模/编码故事的一部分。它应该伴随着一个通用框架,其中大部分管道都已完成。在我看来,生成大型类没有用,而具有明确定义的扩展点或钩子的体面框架将更好地维护和扩展。

您需要为用户故事定义一些形式化语言,无论是XML还是Oslo域语言。奥斯陆将要求您的领域专家学习奥斯陆工具。您可以使用Word + XML。然后在Word中定义一个好看的模板,使用嵌入式XML模式,在编写故事之后,您可以使用正式的XML语法从Word中获取它。这个XML当然可以通过XSLT或Linq用于驱动生成器。 / p>

CodeDOM功能强大,但相当繁琐。恕我直言,这不是一个易于使用的解决方案,它没有真正的模板支持。

我没有使用T4的经验,但它的模板功能是预备。

奥斯陆产品确实很新,需要.Net 4.0,一个运行时环境。它仍然只是一个CTP。这是一个非常强大的环境,虽然我对数据库生成故事有些怀疑。

希望这有帮助。

答案 2 :(得分:1)

嗯,奥斯陆不适合这份名单。到目前为止它还没有代码生成故事。所以坚持使用T4。

答案 3 :(得分:0)

奥斯陆无意为您生成代码。您将不得不创建一个运行时(例如C#程序),它根据数据改变它的行为。您可以将其视为互联网浏览器。

我不相信奥斯陆需要.Net 4.0,就像Rine提到的那样。对于我在Avanade Netherland的实习,我正在创建Oslo MSchema和MGrammars以及C#3.5运行时。根据给定的数据,它将创建(不生成)WCF服务并运行它们。

答案 4 :(得分:0)

奥斯陆有一些有趣的应用

  • “新LDAP”System.Identity,更多内容见于PDC会话视频http://microsoftpdc.com/Sessions/SVC28
  • System.Modelling(我认为)Microsoft.UML2,您可以在其中推送有关存储库中的方法,类,模块等的信息,分析它并创建报告。例如,创建报告,在2个构建http://microsoftpdc.com/Sessions/SVR19
  • 之间添加/删除方法
  • 当然还有建模