En mi opinión, el uso de una clase llena de constantes está bien para las constantes. Si cambian de vez en cuando, recomiendo usar AppSettings en su configuración y la clase ConfigurationManager en su lugar.
Cuando tengo "constantes" que en realidad son extraídas de AppSettings o similar, siempre tendré una clase de "constantes" que envuelve la lectura del administrador de configuración. Siempre es más significativo tener en Constants.SomeModule.Settinglugar de tener que recurrir directamente a ConfigurationManager.AppSettings["SomeModule/Setting"]cualquier lugar que quiera consumir dicho valor de configuración.
Puntos de bonificación para esta configuración, dado SomeModuleque probablemente sería una clase anidada dentro del archivo Constants, podría usar fácilmente Dependency Injection para inyectar SomeModuledirectamente en las clases que dependen de ella. También puede extraer una interfaz encima SomeModuley luego crear una dependencia ISomeModuleConfigurationen su código de consumo, esto le permitiría desacoplar la dependencia a los archivos Constants e incluso potencialmente facilitar las pruebas, especialmente si estas configuraciones provienen de AppSettings y los cambia usando transformaciones de configuración porque la configuración es específica del entorno.