好问题!我有同样的问题;我的常量本质上是:我的应用程序支持哪些语言,以及与这些语言有关的附加信息(与应用程序的功能有关)。
不幸的是,我发现的(正如您所拥有的)最好的是,就像您当前正在做的那样,简单地为每种语言重新定义常量(我知道,您一定想听听)。
显然,这是错的,因为它与DRY(WET ??)相反。但是,常量应该很少更改,以至于5-10分钟的时间为每种语言重新定义它们并不会真正困扰我。归根结底,某些“优雅”解决方案(如共享配置或代码生成)的小问题可能需要数小时或数天才能解决,那么,真正获得了什么呢?我要处理的不是增加的复杂性,而有发生错误的风险,可能需要付出更多的努力才能解决。
此外,如果您的应用程序具有如此多的常量,以至于在添加或更改它们时每种语言重新定义它们都需要花费大量时间,那么您可能只需要处理更重要的代码味道,此时,您可能需要转向到更复杂的东西。
简而言之,为每种语言重新定义它们是我最好的解决方案,而且我还没有想到任何DRY不会带来比我要处理的风险更大的风险因素。
但是,绝对要做的一件事是确保以通用(且与语言无关)的方式很好地记录您的常量(我们有公司文档回购,其中包含规范,其他文档,“绘图”文档等)这个文件)。还要确保您有适当的机制来使它们的定义保持同步。与复制方法一样,这与您将面临的问题一样大,除了有意的代码复制造成的少量心理困扰。但是最后,您的不断更改应该是非常有意且很少发生的,因此同步性问题基本上应该是零。
我还要提到的是,多年来,我看到同一个小组编写的各种库的多语言端口(实在很难记住它们的当前含义),这些端口总是在语言本身中定义了常量。没有共享的配置,没有代码生成(除了Google API客户端库...,但是,谷歌有能力负担这种复杂性)。所以我认为我们已经在这堵砖墙上撞了。也许有人最终会想出一个图书馆来解决这个问题;)