5 Stimmen

Unter welchen Umständen sollte ich eine Singleton-Klasse verwenden?

Geschlossen als exaktes Duplikat von diese Frage . Aber wieder geöffnet, da die anderen Singleton Fragen sind für den allgemeinen Gebrauch und nicht für DB-Zugriff verwenden

Ich habe darüber nachgedacht, eine interne Datenzugriffsklasse zu einem Singleton zu machen, konnte mich aber nicht davon überzeugen, vor allem weil die Klasse außer den lokalen Variablen in ihren Methoden keinen Status hat.

Welchen Sinn hat es schließlich, solche Klassen als Singletons zu konzipieren?
Gewährleistet sie einen sequentiellen Zugriff auf die Datenbank, was nicht überzeugend ist, da die meisten modernen Datenbanken die Gleichzeitigkeit gut handhaben können?
Ist es die Möglichkeit, eine einzige Verbindung wiederholt zu verwenden, die durch das Pooling von Verbindungen behoben werden könnte? Oder ist es die Einsparung von Speicherplatz durch die Ausführung einer einzigen Instanz?

Bitte klären Sie mich diesbezüglich auf.

3voto

hhafez Punkte 37598

Diese Frage wurde, glaube ich, schon einmal gestellt. Schauen Sie nach aquí

Siehe diese Frage:
Über Entwurfsmuster: Wann sollte man Singleton verwenden?

3voto

FlySwat Punkte 165766

Ich habe festgestellt, dass das Singleton-Muster für eine Klasse geeignet ist, die:

  • Hat keinen Zustand
  • Ist voll von einfachen "Service Members"
  • Muss seine Ressourcen streng kontrollieren.

Ein Beispiel hierfür wäre eine Datenzugriffsklasse.

Sie würden Methoden haben, die Parameter aufnehmen und z.B. einen DataReader zurückgeben, aber Sie manipulieren den Zustand des Readers im Singleton nicht, Sie holen ihn nur und geben ihn zurück.

Gleichzeitig können Sie die Logik, die in Ihrem Projekt verstreut sein könnte (für den Datenzugriff), in eine einzige Klasse integrieren, die ihre Ressourcen (Datenbankverbindungen) ordnungsgemäß verwaltet, unabhängig davon, wer sie aufruft.

Abgesehen davon wurde Singleton vor dem .NET-Konzept der vollständig statischen Klassen erfunden, daher bin ich unschlüssig, ob man sich für die eine oder die andere Variante entscheiden sollte. In der Tat ist das eine ausgezeichnete Frage zu stellen.

3voto

Rob Wells Punkte 35303

Unter den von Ihnen beschriebenen Umständen würden Sie wahrscheinlich kein Singleton verwenden wollen. Nachdem alle Verbindungen zu einer DB über eine einzige Instanz einer DBD/DBI-Typ-Klasse gehen würde ernsthaft Ihre Anfrage Durchsatzleistung drosseln.

HTH

Prost,

Rob

3voto

Ian Varley Punkte 8897

Von " Entwurfsmuster: Elemente von wiederverwendbarer objektorientierter Software ":

Für einige Klassen ist es wichtig, dass genau eine Instanz zu haben. Obwohl kann es viele Drucker in einem System geben kann, sollte es nur einen Drucker-Spooler geben. Es sollte nur ein ein Dateisystem und einen Fenstermanager Manager geben. ...

Verwenden Sie das Singleton-Muster, wenn:

  • es muss genau eine Instanz einer Klasse geben, und sie muss für Kunden über einen bekannten Zugangspunkt zugänglich sein
  • die einzige Instanz sollte durch Unterklassen erweiterbar sein, und die Kunden sollten in der Lage sein, eine erweiterte Instanz zu verwenden, ohne ihren Code zu ändern

Im Allgemeinen sollte bei der Web-Entwicklung nur das Web-Framework selbst das Singleton-Muster implementieren. Der gesamte Code, den Sie in Ihrer Anwendung schreiben, sollte (im Allgemeinen) Gleichzeitigkeit voraussetzen und sich auf etwas wie eine Datenbank oder einen Sitzungszustand stützen, um globale (benutzerübergreifende) Verhaltensweisen zu implementieren.

2voto

petr k. Punkte 7910

Ein Beispiel, Objektfabriken sind sehr oft gute Kandidaten für Singletons.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X