ІМО, використовуючи клас, повний констант, чудово підходить для констант. Якщо вони періодично змінюватимуться, я рекомендую використовувати натомість AppSettings у вашій конфігурації та класі ConfigurationManager.
Коли у мене є "константи", які насправді витягуються з AppSettings або подібних, у мене все одно буде клас "константи", який обертає читання з диспетчера конфігурацій. Завжди має сенс мати Constants.SomeModule.Settingзамість того, щоб вдаватися безпосередньо до ConfigurationManager.AppSettings["SomeModule/Setting"]будь-якого місця, яке хоче спожити вказане значення налаштування.
Бонусні бали за це налаштування, оскільки SomeModule, швидше за все, це вкладений клас всередині файлу Constants, ви можете легко використовувати ін’єкцію залежності, щоб вводити будь-які SomeModuleбезпосередньо в класи, які від цього залежать. Ви також можете навіть витягти інтерфейс поверх, SomeModuleа потім створити залежність від ISomeModuleConfigurationвашого споживаючого коду, це дозволить вам відокремити залежність від файлів Constants і навіть потенційно полегшити тестування, особливо якщо ці налаштування надходять з AppSettings і ви змінюєте їх за допомогою перетворень конфігурації, оскільки налаштування залежать від середовища.