.net T4对CodeDom对奥斯陆

.net T4对CodeDom对奥斯陆,.net,code-generation,t4,codedom,oslo,.net,Code Generation,T4,Codedom,Oslo,在我正在从事的应用程序搭建项目中,我试图决定是使用还是生成代码。我们的目标是将依赖关系保持在最低限度,并从用户故事中为域驱动的设计生成代码。第一步是根据用户故事创建测试,但我们希望领域专家能够使用各种不同的媒体(例如自定义应用程序、Word等)编写他们的故事,并且仍然可以根据故事生成测试 到目前为止我所知道的: CodeDom需要.NET,但只能输出.NET类文件(例如.cs、.vb)。难度相当高 T4需要CodeDom和VS标准+。难度是相当合理的,尤其是在以下情况下 奥斯陆非常新。我不知道依

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

到目前为止我所知道的:

  • CodeDom需要.NET,但只能输出.NET类文件(例如.cs、.vb)。难度相当高
  • T4需要CodeDom和VS标准+。难度是相当合理的,尤其是在以下情况下
  • 奥斯陆非常新。我不知道依赖关系,但我想您至少应该在.NET3.5上。我也不确定添加新语法的代码生成能力或复杂性。然而,领域专家可能很容易用Intellipad编写用户故事。还不确定将Word中的故事转换为MGramar是否容易

  • 使用上述任何一种工具,你的想法、经验等是什么。我们希望坚持使用Microsoft或开源工具。

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

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

    CodeDOM功能强大,但相当麻烦。它不是一个易于使用的解决方案,也没有真正的模板支持

    我没有使用T4的经验,但它的模板功能是一个预先定义的

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


    希望这能有所帮助。

    选择T4-简单的决定

    • 奥斯陆太新了,工具也太原始了,除了一项仅用于评估的技术外,什么都不是
    • 如果您需要在运行时生成CLR类,并且愿意牺牲对生成的输出的简单修改,那么CodeDOM是强大的
    • T4(使用T4工具包)是一个易于使用的通用代码生成工具。到目前为止,我遇到的唯一困难是构建时集成

      • 嗯,奥斯陆不符合这个名单。到目前为止,它还没有代码生成的故事。因此,请坚持使用T4。奥斯陆无意为您生成代码。您必须创建一个运行时(例如C#程序),根据数据改变它的行为。您可以将其视为internet浏览器


        我不相信奥斯陆需要.NET4.0,就像Rine提到的那样。为了在Avanade Netherland实习,我正在创建Oslo MSchema和Mgramars以及一个C#3.5运行时。根据给定的数据,它将创建(而不是生成)WCF服务并运行这些服务。

        奥斯陆有一些有趣的应用程序

        • “新LDAP”系统。标识,PDC会话视频中的更多信息
        • System.Modeling(我想是)Microsoft.UML2,您可以在其中推送存储库中有关方法、类、模块等的信息,对其进行分析并创建报告。例如,使用在两个构建之间添加/删除的方法创建报告
        • 当然还有模特儿

        我也会认真研究XML:)这是一个极好的响应,与我尝试采用的总体方法相匹配……Word中的模板,带有嵌入式XML模式。。。听起来很有趣,你知道我在哪里可以找到进一步调查的信息吗?谢谢……这更直接地回答了我原来的问题。感谢您的输入,Scott.build time integration要求您自己调用TextTemplate.exe文件,因为VS.NET会锁定您用于读取元数据的任何共享程序集。一旦您完成了(从构建前到构建后的步骤),它真的很好。我使用powershell进行文件日期比较,以确定是否调用模板引擎。