Hallo!
Ich entwickelte früher eigentlich VB und bin noch eher neu in C# und bin mir noch unsicher im Design.
Folgendes Problem:
Ich möchte ein Objekt einer Klasse (diese Klasse ist für die Datenbankkommunikation zuständug) global in meinem Projekt verfügbar haben da ich auf dieses Objekt in mehreren Klassen zugreifen möchte.
In VB war das kein Problem, denn da hab ich dieses Objekt einfach in einem Modul erstellt und es war überall verfügbar...
Nun meine Frage: Was ist der elegante und richtige Weg in C# dies umzusetzen.
P.S Hab auch die Suche benutzt und den Hinweis gefunden, dass ich die Klasse Static machen kann.... aber da gabs auch viele kritische Stimmen dazu...
Danke & lg,
Wolfi
Hi Wolfi,
also das hat ja eher was mit Objektorientierung als mit C# zu tun.
Das was du möchtest wäre aber z.B. eine statische Klasse.
MfG
wax
Das was du möchtest wäre aber z.B. eine statische Klasse.
Korrektur: gemeint war ein nested singleton
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Danke für deine Antwort!
Mit einer statischen Klasse hab ichs schon umgesetzt und es funktioniert einwandfrei..
War mir nur nicht sicher ob dies eine annehmbare Lösung ist.. 😉
Singleton wäre vielleicht auch noch eine brauchbare Variante.
Zu einem Singleton würde ich auch am ehesten raten, wobei das auch nur mit vorgehaltener hand, da man für den Datenzugriff eigentlich keine globale Instanz benötigt, da man ja im Normalfall keine Daten permanent vorhalten muss weil diese aus der Datenbank kommen...
@Abt:
mir ist schleierhaft was Interfaces mit Threadsicherheit zu tun haben.
Danke für die Info, dann werd ich mich mal bei den Design Pattern mit dem Singelton beschäftigen 😉
lg,
Wolfi
mein Favorit hierfür: Implementing the Singleton Pattern in C#
Gerade bei Datenbanken ist das Singleton fehl am platz, wie es überhaupt das am meisten missbrauchte Pattern ist.
@thas:
Das war schon unter VB der falsche weg.
Repository oder UnitOfWork ist hier eher angebracht.
So hab es jetzt mit einem Singleton umgesetzt und es funktioniert wunderbar...
@FZelle
Warum soll das in VB schon der falsche Weg gewesen sein?
Danke an alle für Eure tolle Hilfe & ein schönes WE!
Weil man auch unter VB nicht mit Modulen arbeiten sollte ( ausser bei interop ) weil das nur Probleme bringt und zusätzlich noch gegen die Grundlagen von OOP verstösst.
Aber VBler haben da eh ein anderes Verständnis.
In einem anderen Forum hatten wir mal ne Diskusion bzgl static classes und singletons.
Wenn man darüber nach denkt kommt man darauf, das die static classes von C# auch Singletons sind.
Alle Eigenschaften die Singletons sowie static classes gemeinsam haben. Man kann also sagen das die Singleton durch Sprachen entstanden die kene static classes haben können.
Sinnhaftigkeit, Verwendungszweck und Praktiken bleiben jetzt mal außen vor.
Die Diskussion hatten wir hier im Forum auch schon mehrfach und ausführlich (==> Forensuche), weshalb wir sie nicht erneut führen sollten, schon gar nicht hier als offtopic.
Weil man auch unter VB nicht mit Modulen arbeiten sollte ( ausser bei interop ) weil das nur Probleme bringt und zusätzlich noch gegen die Grundlagen von OOP verstösst.
Aber VBler haben da eh ein anderes Verständnis.
Nicht alle entwickeln nach OO.
Das versteht sich von selbst, allerdings ist das .NET-Framework ganz überwiegend objektorientiert designed, weshalb es für normale C#- und VB.NET-Programme schon ein guter Rat ist, möglichst objektorientiert zu arbeiten. Aber auch das sollten wir bitte hier nicht vertiefen.
mir ist schleierhaft was Interfaces mit Threadsicherheit zu tun haben.
Vor lauter Reps verwechselt. Gemeint war ein nested singleton.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code