Objekt in allen Klassen verfügbar



  • Hallo,

    ich Erstelle in einer Klasse ein Objekt einer weitern Klasse mit der ich auf eine Datenbank zugreife. Genau dieses Objekt benötige ich aber in allen weiteren Klassen, damit ich nicht bei jedem Zugriff auf die DB neu verbinden muss.... wie kann ich also ein Objekt in allen Klassen zur Verfügung stellen?

    Danke, Thomas 😕



  • verschiedene möglichkeiten:

    1. zeiger
    du übergibst einfach jedem neuen objekt welches zugriff zur db haben will einen zeiger zu diesem db-objekt

    2. referenz
    ähnlich wie nr.1,manchmal aber schöner

    3. singleton
    wenn in der ganzen anwendung nur eine instanz dieses objekts existieren soll, dann ist das die erste wahl(mehr infos in der forensuche)

    4. ein globales objekt(nicht zu favorisieren)



  • otze schrieb:

    3. singleton
    wenn in der ganzen anwendung nur eine instanz dieses objekts existieren soll, dann ist das die erste wahl(mehr infos in der forensuche)

    4. ein globales objekt(nicht zu favorisieren)

    Dein hier vorgeschlagenes Singleton ist in diesem Kontext nichts weiter als eine globale Variable im Schafspelz. Es geht dir ja nicht um den "one instance"-Teil sondern um den "global point of access".
    Singleton teilt sich hier viele der Nachteile die ein globales Objekt auch hat. Z.B lässt sich ein klassischer Singleton-Ansatz schwerer testen, da ein Singleton Interface und Implementation vermischt und damit schwer durch ein "Mock-Objekt" ersetzt werden kann.
    Ich würde dann doch eher zu einem DB-Interface und einer Monostate-Implementation tendieren (Borg statt Highlander). Wenn es denn wirklich immer nur eine DB-Connection geben soll.
    Und btw: das *alle* Klassen zugriff auf die DB haben müssen riecht nach Design-Fehler. Normalerweise solltest du deine Klassen z.B. in Datenschicht-Klassen und Anwendungsklassen aufteilen. Die Klassen aus der Datenschicht bekommen eine DB-Referenz (siehe Punkt 1 oder 2). Die aus der Anwendungsschicht verwenden die Datenschicht-Klassen und sind dem Thema Datenbank gegenüber völlig ignorant. Sprich: unabhängig von der tatsächlichen Persistenzstrategie.



  • Danke für die Auskunft, aber:

    Ich würde dann doch eher zu einem DB-Interface und einer Monostate-Implementation tendieren (Borg statt Highlander). Wenn es denn wirklich immer nur eine DB-Connection geben soll.

    kannst du mir dazu vielleicht noch ein paar Worte sagen??? Ich korrigiere auch meine Aussage von "in allen Klassen verfügbar" nach "in mehreren Klassen verfügbar"

    Danke

    Thomas



  • HumeSikkins schrieb:

    (Borg statt Highlander).

    😃



  • Hi,

    hab Punkt 1 von otze genommen.
    Funktioniert 🙂

    Danke


Anmelden zum Antworten