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.Settinginvé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 SomeModuleque provavelmente seria uma classe aninhada dentro do arquivo Constants, você poderia facilmente usar a injeção de dependência para injetar SomeModulediretamente em classes que dependem dele. Você também pode extrair uma interface SomeModulee, em seguida, criar uma dependência ISomeModuleConfigurationem 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.