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