Gute Frage! Ich habe genau das gleiche Problem. Meine Konstanten sind im Wesentlichen: Welche Sprachen werden in meinen Anwendungen unterstützt? Und zusätzliche Informationen zu diesen Sprachen, da sie sich auf die Funktionalität in der App beziehen.
Leider ist das Beste, was ich (wie Sie) gefunden habe, einfach Konstanten für jede Sprache neu zu definieren, wie Sie es gerade tun (ich weiß, das wollten Sie unbedingt hören ).
Offensichtlich fühlt es sich falsch an weil es das Gegenteil von DRY ( WET ?? ) ist. Konstanten sollten sich jedoch so selten ändern, dass mich die fünf bis zehn Minuten, in denen sie für jede Sprache neu definiert wurden, nicht wirklich stören. Letztendlich können kleine Probleme mit „eleganten“ Lösungen wie der gemeinsamen Konfiguration oder der Codegenerierung Stunden oder Tage in Anspruch nehmen. Was ist also wirklich gewonnen? Zusätzliche Komplexität mit dem Risiko, dass etwas schief geht und zusätzliche Anstrengungen erforderlich sind, ist etwas, mit dem ich mich nicht befassen möchte.
Wenn Ihre Anwendung über so viele Konstanten verfügt, dass die Neudefinition dieser Konstanten pro Sprache beim Hinzufügen oder Ändern viel Zeit in Anspruch nimmt, ist möglicherweise nur ein wichtigerer Codegeruch zu behandeln, und an diesem Punkt möchten Sie möglicherweise die Konstante aktivieren zu etwas Komplexerem.
Kurz gesagt, es war meine beste Lösung, sie für jede Sprache neu zu definieren, und ich habe noch nichts TROCKENERES gefunden, das keinen größeren Risikofaktor hätte, als ich behandeln möchte.
Eine Sache, die Sie auf jeden Fall tun sollten, ist sicherzustellen, dass Ihre Konstanten in einer verallgemeinerten (und sprachunabhängigen) Weise gut dokumentiert sind dieses Dokument). Stellen Sie außerdem sicher, dass Mechanismen vorhanden sind, um die Definitionen synchron zu halten. Das ist ein ungefähr so großes Problem mit dem Duplizierungsansatz wie Sie, abgesehen von einer kleinen psychischen Belastung durch absichtliche Code-Duplizierung. Aber am Ende sollten Ihre ständigen Änderungen sehr bewusst und selten sein , so dass Synchronitätsprobleme im Wesentlichen gleich Null sein sollten.
Ich sollte auch erwähnen, dass ich im Laufe der Jahre mehrsprachige Ports verschiedener Bibliotheken gesehen habe (zu müde, um sich daran zu erinnern, was sie im Moment sind), die von derselben Gruppe geschrieben wurden, deren Konstanten immer in den Sprachen selbst definiert sind. Keine gemeinsame Konfiguration, keine Codegenerierung (mit Ausnahme der Google API-Clientbibliotheken ... Google verfügt jedoch über die Ressourcen, um sich eine solche Komplexität zu leisten). Ich denke, wir haben eine Ziegelmauer getroffen. Vielleicht kommt irgendwann jemand mit einer Bibliothek, um dieses Problem zu lösen;)