Отличный вопрос! У меня точно такая же проблема; мои константы по существу: какие языки поддерживаются в моих приложениях, а также дополнительную информацию об этих языках, поскольку они относятся к функциональности в приложении.
К сожалению, лучшее, что я нашел (как и у вас), - это просто переопределить константы для каждого языка, как вы это делаете в настоящее время (я знаю, вы определенно хотели это услышать ).
Очевидно, что это неправильно, потому что это противоположно СУХОЙ ( ВЛАЖНОЙ ?? ). Однако константы должны меняться так редко, чтобы 5-10 минут переопределения их для каждого языка меня не особо беспокоили. В конце концов, небольшие проблемы с некоторыми «элегантными» решениями, такими как общая конфигурация или генерация кода, могут занять несколько часов или дней, так что же в действительности получается? Сложность и риск того, что что-то пойдет не так, что может потребовать дополнительных усилий, - это не то, с чем я хочу иметь дело.
Кроме того, если ваше приложение имеет так много констант, что их переопределение для каждого языка, когда вы добавляете или изменяете их, занимает значительное время, вы можете просто иметь более значительный запах кода для работы, и в этот момент вы можете захотеть включить к чему-то более сложному.
Короче говоря, переопределение их для каждого языка было моим лучшим решением, и мне еще предстоит придумать что-нибудь более СУХОЕ, которое не будет иметь большего фактора риска, чем я хочу иметь дело.
Одна вещь , чтобы определенно сделать, хотя, чтобы убедиться , что ваши постоянные хорошо документированы в обобщенном (и от языка) способ ( у нас есть компания documentarion репо с спецификации, прочие документы, «чертежной доски» документы и т.д. , где мы храним этот документ). Также убедитесь, что у вас есть механизм для синхронизации их определений. Это примерно такая же большая проблема с подходом дублирования, как и у вас, за исключением небольшого психологического стресса от намеренного дублирования кода. Но, в конце концов, ваши постоянные изменения должны быть очень осознанными и нечастыми , поэтому проблемы с синхронностью должны быть практически нулевыми.
Я должен также упомянуть, что за эти годы я видел многоязычные порты различных библиотек (слишком утомленные, чтобы помнить, что они есть в данный момент), написанные одной и той же группой, в которой неизменно определены константы в самих языках. Нет общей конфигурации, нет генерации кода (за исключением клиентских библиотек API Google ... но давай, у Google есть ресурсы, чтобы позволить себе такую сложность). Так что я думаю, что мы натолкнулись на кирпичную стену на этом. Может быть, кто-то в конце концов придумает библиотеку для решения этой проблемы;)