IMO usando uma classe cheia de constantes é bom para constantes. Se eles mudarem de vez em quando, recomendo usar AppSettings em sua configuração e a classe ConfigurationManager.
Quando eu tenho "constantes" que são realmente extraídas de AppSettings ou semelhante, ainda terei uma classe "constantes" que encerra a leitura do gerenciador de configuração. É sempre mais significativo ter ao Constants.SomeModule.Setting
invés de ter que recorrer diretamente a ConfigurationManager.AppSettings["SomeModule/Setting"]
qualquer lugar que queira consumir o referido valor de configuração.
Pontos de bônus para esta configuração, uma vez SomeModule
que provavelmente seria uma classe aninhada dentro do arquivo Constants, você poderia facilmente usar a injeção de dependência para injetar SomeModule
diretamente em classes que dependem dele. Você também pode extrair uma interface SomeModule
e, em seguida, criar uma dependência ISomeModuleConfiguration
em seu código de consumo, isso permitiria que você desacoplasse a dependência dos arquivos Constants e até mesmo tornaria os testes mais fáceis, especialmente se essas configurações vierem de AppSettings e você os altera usando transformações de configuração porque as configurações são específicas do ambiente.