2011-10-02 61 views
0

模板/代码生成器是否已经存在,可以跟踪用户对其输出的更改?我还没有posative这是有道理的 - 但在我空间军校学生认为这样的事情会是一个有趣的那种更紧密集成的代码比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> 
    } 
} 

ù SER变化

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> 
    } 
} 
<# } #> 

回答

1

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

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

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

+0

看起来很有趣,但我看不到如何下载它(或者不可能?) –

+0

ABSE只是开发方法。有一个IDE实现了称为AtomWeaver的ABSE,位于http://www.atomweaver.com –

0

有用于diff'ing XML文档的工具。如果可以将代码转换为以xml表示的ast,则可以将这些工具应用于文档,然后将其转换回代码。

+0

你知道吗? (当然,我可以谷歌,只是看到如果你已经为我:)) –

+0

我不知道任何足够的推荐。我建议你从谷歌搜索中选一个。 – troelskn