如何不跨项目和/或者语言重复自己
时间:2020-03-06 14:31:42 来源:igfitidea点击:
我正在使用不同的编程语言来开发几个不同但相关的项目。其中一些项目需要解析其他项目编写的文件名,并期望使用某种文件名模式。
现在,此模式已在多个位置和多种语言中进行了硬编码,使其成为维护炸弹。在给定的项目中仅一次定义该模式是相当容易的,但是对于所有项目和所使用的所有语言,一次又一次地定义它的技术是什么?
解决方案
将模式放在数据库中,最简单,最舒适的方法就是使用XML数据库。所有项目都可以访问该数据库,并且它们将从那里读取模式
创建一种领域特定的语言,然后将其编译为我们所使用的每种目标语言的代码,将是最佳的解决方案(也是最优雅的方法)。
使DSL枯萎嵌入某种东西并不困难(就像现在在Ruby中嵌入它一样,或者像LISP / Haskell这样的另一种语言……),或者从头开始创建语法(使用Antlr?)。似乎项目很大,那么这条路径值得我们花时间。
我将模式存储在一个简单的文本文件中,具体取决于特定项目:
- 在构建时将其嵌入到源中(预处理)
- 如果以上都不是选项,则将其视为在运行时读取的配置文件
编辑:我认为模式比正则表达式更复杂,否则我会从另一个答案中选择DSL解决方案。
我们可以使用通用脚本,进程或者Web服务来生成文件名(取决于设置)。
我不知道我们在谈论哪种语言,但是大多数语言都可以使用外部动态库dll /共享对象,并从该库中导出通用功能。
例如,我们可以在简单的c lib中实现函数get file name并使用其他语言。
另一种选择是在每种语言的构建过程中动态创建通用代码,这不应该太复杂。
我将建议使用动态链接方法(如果可行)(我们没有提供足够的信息来确定这一点),因为维护此解决方案要比维护针对不同语言的代码生成容易得多。