【问题标题】:What code would you consider using a code generator like CodeSmith for?您会考虑将 CodeSmith 之类的代码生成器用于哪些代码?
【发布时间】:2011-01-18 03:20:59
【问题描述】:

我使用 CodeSmith 作为 PLINQO 模板,从我的 DB 对象构建我的 DAL;效果很好!

我相信这是代码生成器应用程序的主要用途,但我很好奇……您会考虑将代码生成器用于哪些其他代码?您是否有任何经常使用的 CodeSmith 模板(如果有,它的作用是什么)?

【问题讨论】:

    标签: code-generation codesmith


    【解决方案1】:

    我没有使用过 CodeSmith,但我已经完成了相当多的代码生成。值得注意的是,我为 WiMAX 系统编写了大部分配置管理 (CM) 系统,其中 CM 代码是为 3 个不同的平台生成的。唯一的区别是每个平台的 CM 模型。

    该模型采用我们构建的自定义领域特定语言 (DSL),并为其提供了解析器。该语言是一种基本的容器/元素样式,其中容器可以嵌套并具有标识符,并且元素具有预定义的类型。文档是元素和容器的属性。您可以将Luasn-ps 添加到元素和容器定义中以进行语义验证(例如,该值在正确的范围内,如果它是一个 IP 地址,它是否在其他地方定义的 CIDR 范围内,等等)。

    解析器生成了一个语法树,然后我们将其推送到模板中。模板语言是StringTemplate 的部分 C 实现。我们用它来生成:

    • 应用程序可以调用以获取配置值的特定于模型的 C API,
    • 收集的 Lua 代码用于验证模型并提供有用的错误消息,
    • API 的两个“后端”用于管理内存中的值(用于模型的临时操作)和数据库系统中的值(用于在进程之间共享),
    • 配置文件解析器和写入器,
    • HTML 文档,以及
    • 用于交互式查看和更改配置的命令行界面 (CLI) 实施。

    回想起来,我应该直接使用 Lua 作为 DSL。本来会更冗长,但是有了解析器和大量可用的 Lua 模板选择,我会节省大量的开发工作。

    对于具有重复结构和明确定义的关于这些事情需要做什么的规则的事情,代码生成可能是一件很棒的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 2014-05-06
      • 2011-10-21
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多