W języku C # jaka jest najlepsza praktyka w zakresie enkapsulacji zmiennych, których muszę używać na wiele metod? Czy wystarczy zadeklarować je na szczycie mojej klasy powyżej dwóch metod?
Również jeśli używam ustawień aplikacji z mojego pliku konfiguracyjnego, czy powinienem użyć gettera? lubię to...
private string mySetting{ get { return WebConfigurationManager.AppSettings["mySetting"]; } }
Jaka jest najlepsza praktyka?
c#
programming-practices
użytkownik1944367
źródło
źródło
WebConfigurationManager.AppSettings
ponieważ później łatwiej jest go zmienićOdpowiedzi:
To nie tylko OK. Według książki Clean Code jest to w rzeczywistości bardzo dobra praktyka, a wujek Bob naprawdę ją zachęca. Zmienna stosowana w wielu metodach może wykazywać wysoki stopień spójności między metodami. Co więcej, wysoki stopień zmiennych obiektowych może również sugerować, że wspomnianą klasę należy podzielić na dwie części, więc zadeklarowanie ich jako zmiennych obiektowych może pomóc w znalezieniu kandydatów na ukryte klasy.
Zmienne na poziomie obiektu nie są zmiennymi globalnymi, więc nie bój się ich używać, jeśli powinny być udostępniane różnymi metodami.
źródło
Ciągłe kapsułkowanie ustawień to świetny pomysł.
To, co robię, to tworzenie klasy ustawień albo jednej statycznej globalnej jednej, albo wielu klas instancji, którymi będę zarządzał z wstrzykiwaniem zależności. Następnie ładuję wszystkie ustawienia z konfiguracji do tej klasy podczas uruchamiania.
Napisałem też małą bibliotekę, która wykorzystuje refleksję, aby uczynić to jeszcze łatwiejszym.
Gdy moje ustawienia znajdą się w moim pliku konfiguracyjnym
Tworzę klasę statyczną lub instancję w zależności od moich potrzeb. W przypadku prostych aplikacji z kilkoma ustawieniami jedna klasa statyczna jest w porządku.
Następnie za pomocą mojej bibliotece połączenia albo
Inflate.Static
czyInflate.Instance
i fajne jest to mogę użyć dowolnego źródła wartości klucza.Cały kod do tego jest w GitHub na https://github.com/Enexure/Enexure.Fire.Configuration
Istnieje nawet pakiet nuget:
Kod referencyjny:
źródło