Чудове запитання! У мене таке саме питання; мої константи по суті: які мови підтримуються в моїх програмах та додаткова інформація про ці мови, коли вони стосуються функціональності в додатку.
На жаль, найкраще, що я знайшов (як і у вас), - це просто переосмислити константи для кожної мови, як ви зараз робите (я знаю, ви напевно хотіли це почути ).
Очевидно, це почуває себе неправильно, тому що це протилежність DRY ( WET ?? ). Однак константи повинні змінюватися настільки рідко, що 5-10 хвилин переосмислення їх для кожної мови насправді не турбує мене. Зрештою, невеликі проблеми з таким "елегантним" рішенням, як спільне налаштування або генерація коду, можуть зайняти години чи дні, щоб вирішити, що ж насправді отримано? Додаткова складність із ризиком того, що щось піде не так, що може докласти додаткових зусиль для виправлення, - це не те, з чим я хочу мати справу.
Крім того, якщо у вашій програмі є стільки констант, що їх переосмислення за кожною мовою при їх додаванні чи зміні потребує значної кількості часу, ви можете просто мати більш важливий запах коду для вирішення, і в цей момент, можливо, ви захочете звернутися до чогось складнішого.
Отже, коротше кажучи, переосмислення їх для кожної мови було моїм найкращим рішенням, і я ще не повинен придумати щось більше ДУХОГО, яке б не мало більше фактора ризику, ніж я хочу мати справу.
Одне, що потрібно обов'язково зробити, - це забезпечити, щоб ваші константи були добре задокументовані узагальненим (та мовним агностиком) способом (у нас є документальний репортаж компанії із специфікаціями, різними документами, документами «креслярської дошки» тощо), де ми зберігаємо цей документ). Також переконайтеся, що у вас є механізми (механізми) для синхронізації їх визначень. Це настільки ж велика проблема, як у вас буде підхід щодо дублювання, за винятком невеликої кількості психологічних проблем від навмисного дублювання коду. Зрештою, ваші постійні зміни повинні бути дуже обдуманими та нечастими , тому проблеми синхронізації повинні бути по суті нульовими.
Я також повинен зазначити, що протягом багатьох років я бачив багатомовні порти різних бібліотек (надто втомившись, щоб пам’ятати, якими вони є на даний момент), написані тією ж групою, які незмінно мають константи, визначені в самих мовах. Ні спільного конфігурації, ні генерації коду (за винятком бібліотек клієнтів API Google ... але давай, Google має ресурси, щоб дозволити собі таку складність). Тому я думаю, що ми потрапили в цегляну стіну на цій. Можливо, хтось врешті-решт придумає бібліотеку для вирішення цієї проблеми;)