我正在使用不同的编程语言从事几个不同但相关的项目。其中一些项目需要解析其他项目编写的文件名,并且需要某种文件名模式。
这种模式现在在多个地方和多种语言中进行了硬编码,使其成为维护炸弹。在给定项目中只定义一次这种模式是相当容易的,但是为所有项目和所有使用的语言一次性定义它的技术是什么?
我正在使用不同的编程语言从事几个不同但相关的项目。其中一些项目需要解析其他项目编写的文件名,并且需要某种文件名模式。
这种模式现在在多个地方和多种语言中进行了硬编码,使其成为维护炸弹。在给定项目中只定义一次这种模式是相当容易的,但是为所有项目和所有使用的语言一次性定义它的技术是什么?
创建领域特定语言,然后将其编译成您正在使用的每种目标语言的代码将是最好的解决方案(也是最优雅的)。
制作 DSL 并不难——将其嵌入到某些东西中(比如在 Ruby 中,因为它现在是“in”的东西,或者像 LISP/Haskell 这样的另一种语言......),或者从头开始创建语法(使用 Antlr?) . 看起来项目很大,那么这条路值得你一试。
我会将模式存储在一个简单的文本文件中,并且取决于特定的项目:
编辑:我认为该模式并不比正则表达式复杂,否则我会从另一个答案中选择 DSL 解决方案。
您可以使用通用脚本、进程或 Web 服务来生成文件名(取决于您的设置)。
我不知道您说的是哪种语言,但大多数语言都可以使用外部动态库 dll/共享对象并从该库中导出通用功能。例如,您在简单的 c lib 中实现函数获取文件名并使用 acrros 其他语言。
另一种选择是动态创建通用代码作为每种语言的构建过程的一部分,这不应该太复杂。
如果可行,我会建议使用动态链接方法(您没有提供足够的信息来确定这一点),因为维护这个解决方案会比维护不同语言的代码生成要容易得多。
将模式放入数据库中——最简单舒适的方法是使用 XML 数据库。所有项目都可以访问该数据库,他们将从那里读取模式