我使用CodeSmith作为PLINQO模板,从我的DB对象构建我的DAL;它很棒!
我认为这是代码生成器应用程序的主要用途,但我很好奇......你会考虑使用代码生成器的其他代码吗?您是否经常使用任何CodeSmith模板(如果有,它会做什么)?
答案 0 :(得分:3)
我没有使用CodeSmith,但我已经完成了相当多的代码生成。值得注意的是,我为WiMAX系统编写了大部分配置管理(CM)系统,其中CM代码是为3个不同的平台生成的。唯一的区别是每个平台的CM模型。
该模型采用自定义域特定语言(DSL),我们构建了一个解析器。该语言是一种基本的容器/元素样式,容器可以嵌套并具有标识符,元素是预定义的类型。文档是元素和容器的属性。您可以将Lua片段添加到元素和容器定义中以进行语义验证(例如,值在正确的范围内,如果它的IP地址是在其他地方定义的CIDR范围内等)。
解析器生成了一个语法树,然后我们将其推送到模板。模板语言是StringTemplate的部分C实现。我们用它来生成:
回想起来,我应该直接使用Lua作为DSL。它会更加冗长,但是解析器已经存在并且可以使用很多Lua模板选项可以节省大量的开发工作。
对于具有重复结构和明确规则的事物,这些事情需要做的事情,代码生成可能是一件很棒的事情。