【问题标题】:How not to repeat yourself across projects and/or languages如何不在项目和/或语言中重复自己
【发布时间】:2008-09-22 07:53:47
【问题描述】:

我正在使用不同的编程语言处理几个不同但相关的项目。其中一些项目需要解析其他项目编写的文件名,并且需要一定的文件名模式。

这种模式现在在多个地方以多种语言进行了硬编码,使其成为维护炸弹。在给定项目中只定义一次这种模式是相当容易的,但是为所有项目和所有使用的语言一次性定义它的技术是什么?

【问题讨论】:

    标签: dry maintainability


    【解决方案1】:

    创建一种特定于领域的语言,然后将其编译成您正在使用的每种目标语言的代码,这将是最好的解决方案(也是最优雅的)。

    制作 DSL 并不难 - 将其嵌入到某些东西中(比如在 Ruby 中,因为它现在是“in”的东西,或者像 LISP/Haskell 这样的另一种语言......),或者从头开始创建语法(使用蚂蚁?)。看起来项目很大,那么这条路值得你一试。

    【讨论】:

      【解决方案2】:

      我会将模式存储在一个简单的文本文件中,并且取决于特定的项目:

      • 在构建时将其嵌入到源代码中(预处理)
      • 如果以上不是选项,则将其视为运行时读取的配置文件

      编辑:我认为该模式并不比正则表达式复杂,否则我会使用另一个答案的 DSL 解决方案。

      【讨论】:

        【解决方案3】:

        您可以使用通用脚本、进程或 Web 服务来生成文件名(取决于您的设置)。

        【讨论】:

          【解决方案4】:

          我不知道您说的是哪种语言,但大多数语言都可以使用外部动态库 dll/共享对象并从该库中导出常用功能。 例如,您在简单的 c lib 中实现函数获取文件名并使用 acrros 其他语言。
          另一种选择是动态创建通用代码,作为每种语言的构建过程的一部分,这不应该太复杂。
          如果可行,我会建议使用动态链接方法(您没有提供足够的信息来确定这一点),因为维护这个解决方案会比维护不同语言的代码生成要容易得多。

          【讨论】:

            【解决方案5】:

            将模式放入数据库 - 最简单和舒适的方法可能是使用 XML 数据库。所有项目都可以访问该数据库,他们将从那里读取模式

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-04-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-04-18
              相关资源
              最近更新 更多