C#中的代码生成器

时间:2009-10-25 07:35:00

标签: c# code-generation

我必须在C#中开发一个多语言代码生成器。实际上,我们的想法是,我们有多个内部应用程序框架,用于以各种语言(Java,Python,C ++)进行数据库访问。但他们的基本工作原理是一样的。我们认为代码生成器将帮助我们缩短开发时间。所以我决定编写一个代码生成器,以便于我们的开发。

从数据库表生成类应遵循哪些标准基本技术步骤?

我应该使用\t\r\n吗?

实现最快速度的技术有哪些?

我不想使用RegEx。

请根据您的个人经验告诉我。

2 个答案:

答案 0 :(得分:4)

这取决于你的意思;有很多选择:

  • CodeDOM - 提供可以为多种语言生成代码的对象模型,但使用起来可能很棘手
  • T4(又名TT) - 当下的“时尚”代码
  • xslt - 一个有用的后备;不像T4那么时髦,但可行 - 对于像VB这样的依赖于空白的语言而言很棘手

在所有情况下,我都会构建一个基本的对象模型来表示数据并从那里开始工作。我知道有人用SELECT从数据库中编写代码生成,但它很丑陋,而且极端难以维护。

重新提出有关\t\r\n等问题的问题 - 我不明白这个问题,但是:无论目标语言想要什么! VB在这里很棘手(C#等更容易,因为它们不太关心空白)。

我已成功使用xslt,但主要是因为我已经知道xslt,并且需要支持2.0(T4不在2.0中);否则T4本来是我的下一次刺,只因为我想学习它;-p

答案 1 :(得分:1)

看起来你需要模板功能,所以Tc和Marc Gravell建议的相当不错。 SubSonic目前使用T4生成代码。过去,SubSonic使用Asp.Net作为模板系统来生成代码。

这可能看起来有点偏离左侧字段,但是John Resig为{Javascript}编写了mirco-template function,它允许您处理具有以下语法的模板:

<script type="text/html" id="item_tmpl">
  <div id="<%=id%>" class="<%=(i % 2 == 1 ? " even" : "")%>">
    <div class="grid_1 alpha right">
      <img class="righted" src="<%=profile_image_url%>"/>
    </div>
    <div class="grid_6 omega contents">
      <p><b><a href="/<%=from_user%>"><%=from_user%></a>:</b> <%=text%></p>
    </div>
  </div>
</script>

您将模板作为数据源提供给JSON对象。这种方法的好处在于您无需编译和部署即可快速创建模板系统 - 只需启动浏览器并生成代码即可。