是否已存在跟踪用户对其输出的更改的模板/代码生成器?我甚至不认为这是有道理的 - 但是我认为这样的空间学员认为这可能是一种有趣的变化跟踪,它比SCM更紧密地集成到代码中......
data.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>
}
}
- &GT;模板更改为:
<# 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>
}
}
<# } #>
答案 0 :(得分:1)
data.xml中的内容通常称为模型。用XML完成,我们可以称之为“树模型”。换句话说,您正在根据预定义的模型应用(执行)模板。
在这种情况下跟踪用户更改也可称为“往返”工程:双向更改。
ABSE项目(免责声明:我是项目主管)定义了一个非常接近您的请求的模型驱动的代码生成方法:它使用可执行模板并通过树模型生成代码(但是它不是XML)。但是,您可以直接在模型中添加自己的代码,而不是检测代码中的更改,以便跳过“往返”步骤。
答案 1 :(得分:0)
有些工具可以在xml文档上进行差异化。如果您可以将代码转换为以xml表示的ast,则可以在文档上应用这些工具,然后将其转换回代码。