Was ist in C # die beste Vorgehensweise zum Einkapseln von Variablen, die ich in mehreren Methoden verwenden muss? Ist es in Ordnung, sie einfach über den beiden Methoden an der Spitze meiner Klasse zu deklarieren?
Auch wenn ich App-Einstellungen aus meiner Konfigurationsdatei verwende, sollte ich einen Getter verwenden? so was...
private string mySetting{ get { return WebConfigurationManager.AppSettings["mySetting"]; } }
Was ist die beste Vorgehensweise?
c#
programming-practices
user1944367
quelle
quelle
WebConfigurationManager.AppSettings
weil es viel einfacher ist, später zu ändernAntworten:
Es ist nicht nur OK. Laut dem Buch Clean Code ist es tatsächlich eine sehr gute Praxis, und Onkel Bob ermutigt sie wirklich. Eine von vielen Methoden verwendete Variable könnte einen hohen Grad an Kohäsion zwischen den Methoden aufweisen. Darüber hinaus könnte ein hoher Grad an Objektvariablen auch darauf hindeuten, dass diese Klasse in zwei Teile geteilt werden sollte, sodass die Deklaration als Objektvariablen Ihnen helfen könnte, versteckte Klassenkandidaten zu finden.
Variablen auf Objektebene sind keine globalen Variablen. Haben Sie also keine Angst, sie zu verwenden, wenn sie von verschiedenen Methoden gemeinsam genutzt werden sollen.
quelle
Es ist eine großartige Idee, Ihre Einstellungen konstant zu kapseln.
Ich erstelle eine Einstellungsklasse, entweder eine statische globale eine oder mehrere Instanzklassen, die ich dann mit der Abhängigkeitsinjektion verwalten werde. Dann lade ich beim Start alle Einstellungen aus der Konfiguration in diese Klasse.
Ich habe auch eine kleine Bibliothek geschrieben, die Reflexion nutzt, um dies noch einfacher zu machen.
Sobald meine Einstellungen in meiner Konfigurationsdatei sind
Ich erstelle je nach Bedarf eine statische oder Instanzklasse. Für einfache Anwendungen mit nur wenigen Einstellungen ist eine statische Klasse in Ordnung.
Dann benutze ich entweder meinen Bibliotheksaufruf
Inflate.Static
oderInflate.Instance
und das Coole ist, dass ich jede Schlüsselwertquelle verwenden kann.Der gesamte Code hierfür befindet sich in GitHub unter https://github.com/Enexure/Enexure.Fire.Configuration
Es gibt sogar ein Nuget-Paket:
Code als Referenz:
quelle