Laden...

Aus mehreren Klassen auf 1 Instanz zugreifen?

Erstellt von Lotus vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.610 Views
L
Lotus Themenstarter:in
73 Beiträge seit 2011
vor 13 Jahren
Aus mehreren Klassen auf 1 Instanz zugreifen?

Hallo,

wenn mich nicht alles täuscht sollte man heutzutage ja vieles nur noch mit der Objektorientierung lösen. Ich habe jetzt folgende Frage:

Ich habe mehrere Klassen die auf Methoden einer einzigen Klasse zugreifen müssen, diese braucht aber eigentlich nicht jedesmal ne neue Instanz sondern könnte global für alle nur 1x existieren. Das einzige wie ich darauf zugreifen kann wäre dann aber static.

Ist es heutzutage verwerflich wenn ich jetzt eine komplette Static-Klasse mit Attributen etc. schreibe?

Fällt euch sonst vllt noch eine Möglichkeit ein wie ich das umsetzen könnte?
Wäre für jede Idee dankbar.

S
417 Beiträge seit 2008
vor 13 Jahren

Hallo,

es kommt natürlich schon auf den konkreten Anwendungsfall an. Grundsätzlich finde ich so einen statischen Ansatz (oder alternativ das Singleton-Pattern) eher unsauber.
Als Alternative kannst Du einen Dependency Injection Container (DI-Container) verwenden. Der Container übernimmt dann die Instanzierung der jeweiligen Klassen und versorgt die abhängigen Objekte mit dieser Instanz. Es ist allerdings eine andere Art der Entwicklung und für deinen Anwendungsfall evtl. zu komplex.
Aber generell lohnt es sich schon sich mit dem Einsatz von DI-Containern zu befassen.

L
Lotus Themenstarter:in
73 Beiträge seit 2011
vor 13 Jahren

Hallo, danke für deinen Tip! Sobald ich ein bisschen Freiraum habe, werde ich mir mal diesen Container näher anschauen.

Bisher habe ich jetzt lediglich ein Verwaltungsobjekt erstellt, was quasi die Instanz von den Klassen beinhaltet und diese dann per Reference einfach an die Methoden der Klassen übergibt..

Ich merke in letzter Zeit, dass es mir früher immer nur darum ging mein Problem irgendwie zu lösen. Mittlerweile hat sich das ganze ein wenig verschoben, jetzt möchte ich das ganze auch möglichst effizient lösen.

Wie kann ich mich in diese Thematik einarbeiten? Ich frage mich jedesmal, ist es besser eine Schleife zu basteln für z.B. 3 Elemente, oder lieber die 3 Elemente schnell statisch abzuarbeiten.

Oder sind Listenoperationen zu langsam? Geht es schneller, wenn ich die Liste in ein Array umwandle und dort die Operationen durchführe und das ganze wieder in eine Liste bringe?

Wann wäre es effektiv mit einem Thread zu arbeiten?

Es tauchen eigentlich jede Menge Fragen zu diesem Thema auf, aber ich find keine Anlaufstelle wie ich mich damit genauer auseinandersetzen könnte.

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Lotus,

Aus mehreren Klassen auf 1 Instanz zugreifen?

das Entwurfsmuster, dass dieses Problem vordergründig löst, ist Singleton. Allerdings ist Singleton das am meisten missverstandene und missbrauchte Entwurfsmuster. Es gibt nur sehr, sehr wenige Situationen, in denen Singleton tatsächlich sinnvoll eingesetzt werden können.

Deine anderen Fragen sind offtopic. Daher nur ganz kurz. Du stellst die falschen Fragen. Das sind fast alles Mikrooptimierungen, die unter premature optimization is the root of all evil fallen. Es ist viel wichtiger lesbaren, verständlichen und wartbaren Code zu schreiben. Auch allgemein kann dir dabei http://www.clean-code-developer.de helfen.

herbivore

M
18 Beiträge seit 2008
vor 13 Jahren

Hi,

darf ich bitte eine Verständnisfrage stellen?

Wenn ich eine (Ober-)Klasse habe, die Funktionalität enthalten soll, welche von vielen anderen Klassen benötigt wird, inwiefern brauche ich dann von dieser Oberklasse eine Instanz? Als relativer C#-Neuling würde ich in diesem Fall an den Einsatz einer abstrakten Klasse denken, von der ich die anderen Klassen ableite. Damit stelle ich doch deren Methoden den anderen Klassen zur Verfügung, ohne static usw.
Dann würden Singleton und DI-Container nicht, oder?

Wo ist mein Denkfehler?

Liebe Grüße
Marz

F
10.010 Beiträge seit 2004
vor 13 Jahren

Dein Denkfehler ist, das Lotus die Daten global haben will, nicht Funktionalitäten.

Dazu passt auch gut http://devtrends.co.uk/blog/configuration-settings-are-a-dependency-that-should-be-injected

M
18 Beiträge seit 2008
vor 13 Jahren

Danke.
Habe mich davon täuschen lassen, dass Lotus über Methoden sprach. Der Hinweis auf static hätte mich eigentlich stutzig machen müssen.
... habe jetzt mal in den Artikel reingeschnüffeln, den du verlinkt hast.
Aaaah, das Problem kenne ich auch. Da ich gerne mit Datenbanken rummache, kenne ich auch das Problem, dass ich ständig die Verbindung zur DB aufmache und wieder schließe und ständig auf configs zugreifen muss.
Werde mir diese Dependency Injection mal auf die Agenda schreiben
... und jetzt aufhören, diesen Thread zu shreddern (sorry Lotus).

Liebe Grüße
Marz