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