IMO używające klasy pełnej stałych jest dobre dla stałych. Jeśli będą się zmieniać od czasu do czasu, polecam zamiast tego użycie AppSettings w konfiguracji i klasie ConfigurationManager.
Kiedy mam „stałe”, które są faktycznie pobierane z AppSettings lub podobnych, nadal będę mieć klasę „constants”, która zawija odczyt z menedżera konfiguracji. Zawsze bardziej sensowne jest mieć, Constants.SomeModule.Setting
zamiast uciekać się bezpośrednio do ConfigurationManager.AppSettings["SomeModule/Setting"]
dowolnego miejsca, które chce skonsumować tę wartość ustawienia.
Dodatkowe punkty za tę konfigurację, ponieważ SomeModule
prawdopodobnie byłaby to klasa zagnieżdżona w pliku Constants, można z łatwością użyć funkcji Dependency Injection, aby wstrzyknąć SomeModule
bezpośrednio do klas, które od niej zależą. Możesz nawet wyodrębnić interfejs na wierzchu, SomeModule
a następnie utworzyć zależność od ISomeModuleConfiguration
używanego kodu, co pozwoli ci oddzielić zależność od plików Constants, a nawet potencjalnie ułatwi testowanie, zwłaszcza jeśli te ustawienia pochodzą z AppSettings i zmieniasz je za pomocą transformacji konfiguracji, ponieważ ustawienia są specyficzne dla środowiska.