C# : Also wenn eine statische Klasse ist eine schlechte Praxis für die Speicherung von globalen Zustand info, was ist eine gute alternative, die bietet den gleichen Komfort?

Habe ich schon bemerkt statische Klassen immer eine Menge von schlechten rep auf, SO dass in Bezug auf die zum speichern der globalen Informationen. (Und globalen Variablen wird verschmäht im Allgemeinen) möchte ich nur wissen, was eine gute alternative für mein Beispiel unten...

Ich entwickle eine WPF-Anwendung, und es hat viele Ansichten auf die Daten aus meiner db gefiltert werden basierend auf der ID des aktuell angemeldeten Benutzers. Ebenso werden bestimmte Punkte in meiner app sollte nur zugänglich für Benutzer, die als 'admins'.

Ich bin derzeit die Speicherung einer loggedInUserId und ein isAdmin bool in einer statischen Klasse.

Verschiedenen Teile meiner app benötigen diese info, und ich Frage mich, warum es nicht ideal, in diesem Fall, und was die alternativen sind. Es scheint sehr komfortablen Einrichtung und Ausführung zu erhalten.

Das einzige, was ich denken kann als eine alternative ist der Einsatz eines IoC-Container injizieren eine Singleton-Instanz in Klassen, die Notwendigkeit dieser globalen Informationen, die Klassen könnten dann sprechen Sie dies durch die Schnittstelle. Jedoch ist diese übertrieben /führt mich in Analyse-Paralyse?

Dank im Voraus für jede Einsicht.


Update

So, ich bin Neigung in Richtung dependency injection via IoC, wie wäre Es eignet sich besser, um die Testbarkeit, da ich swap in einem Dienst, der eine "Globale" info " mit einem Modell, wenn nötig. Ich nehme an, was bleibt, ist, ob oder nicht das injizierte Objekt sollte ein singleton oder statische. 🙂

Wird prob pick Mark ' s Antwort zwar warten, um zu sehen, ob es irgendeine weitere Diskussion. Ich glaube nicht, dass es einen richtigen Weg als solchen. Ich bin nur daran interessiert zu sehen, einige der Diskussion, die würde mich aufklären, wie es zu sein scheint, eine Menge von "das ist schlecht" "das ist schlecht" - Aussagen auf einige ähnliche Fragen, ohne Konstruktive alternativen.


Update #2
Also suchte ich Robert ' s Antwort sehen, wie es ist, eine gute alternative (ich vermute, die alternative ist ein komisches Wort, wahrscheinlich der Wahre Weg, zu sehen, wie es gebaut ist, in den Rahmen). Es ist nicht zwingen, mir das erstellen einer statischen Klasse/singleton (obwohl es ist thread-statisch).

Die einzige Sache, die macht mich immer noch neugierig ist, wie dieser gewesen wäre, angegangen wird, wenn die "globalen" Daten, die ich hatte, um zu speichern, hatte nichts zu tun mit Benutzer-Authentifizierung.

  • Ich denke, dass die globalen Daten ist in Ordnung in diesem Fall. Kann es geändert werden überall in Ihrer Anwendung, oder kann es nur in einem Ort? Letzteres wäre besser, wenn möglich. Manchmal braucht man einfach nur die globalen Daten, und es macht keinen Sinn zu haben, es auf andere Weise. Menschen neigen dazu, religiöse Zeug dazu.
  • Regeln werden aufgestellt, um gebrochen zu werden. ASP.NET bietet statische Orte, um Daten zu speichern, zum Beispiel.
  • Diese Eigenschaften werden festgelegt, nachdem ich meine login-Bildschirm, wenn es ausführt, die überprüfung der Benutzer in der DB
  • Es ist keine Analyse-Paralyse, wenn Sie es einfach tun 🙂
  • in meiner situation kann es nur einen Benutzer angemeldet, da es eine WPF-client-app.
  • Wenn es nur wenige Orte, um zu injizieren, dann nutzen Sie DI. Mein Antwort war basiert auf Sie müssen die Informationen in der gesamten Anwendung. Wenn nicht, dann nicht.

Schreibe einen Kommentar