【问题标题】:Template based code generation that tracks/merges user changes?跟踪/合并用户更改的基于模板的代码生成?
【发布时间】:2012-02-08 02:30:38
【问题描述】:

是否已经存在一个模板/代码生成器来跟踪用户对其输出的更改?我什至不肯定这是有道理的 - 但我的太空学员认为这样的事情可能是一种有趣的变更跟踪,它比 SCM 更紧密地集成到代码中......

数据.xml

<Classes>
 <Class>Class1</Class>
</Classes>

模板

<# for(var c in XDocument.Load("Data.xml").Element("Classes").Elements("Class")) { #>
     class <#=c.Value#> {
       public <#=c.Value#>() {
         // <InsertPoint>
         // </InsertPoint>
       }
     }
<# } #>

输出

class Class1 {
  public Class1() {
    // <InsertPoint>
    // </InsertPoint>
  }
}

用户变更

class Class1 {
  public Class1() {
    // <InsertPoint>
    System.Console.WriteLine("I am Class1");
    // </InsertPoint>
  }
}

--> 模板更改为:

<# for(var c in XDocument.Load("Data.xml").Element("Classes").Elements("Class")) { #>
class <#=c.Value#> {
  public <#=c.Value#>() {
  // <UserInsert id="1">
  System.Console.WriteLine("I am Class1");
  // </UserInsert>

  // <InsertPoint>
  // </InsertPoint>
  }
}
<# } #>

【问题讨论】:

    标签: c# code-generation


    【解决方案1】:

    data.xml 中的内容通常称为模型。在 XML 中完成,我们可以称其为“树模型”。换句话说,您正在根据预定义的模型应用(执行)模板。

    在这种情况下跟踪用户更改也可以称为“往返”工程:双向更改。

    ABSE 项目(免责声明:我是项目负责人)定义了一种非常接近您的要求的模型驱动代码生成方法:它使用可执行模板并通过树模型生成代码(但它不是XML)。但是您可以直接在模型中添加自己的代码,而不是检测代码中的更改,这样您就可以跳过“往返”步骤。

    【讨论】:

    • 看起来很有趣,但我不知道如何下载它(或者不可能?)
    • ABSE 只是开发方法。有一个实现 ABSE 的 IDE,称为 AtomWeaver,位于 atomweaver.com
    【解决方案2】:

    有一些用于对 xml 文档进行比较的工具。如果您可以将您的代码转换为以 xml 表示的 ast,您可以将这些工具应用于文档,然后将其转换回代码。

    【讨论】:

    • 你知道一个吗? (当然我可以谷歌,看看你是否已经为我做了:))
    • 我不知道有什么好推荐的。我建议你从谷歌搜索中选择一个。
    猜你喜欢
    • 2016-02-01
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多