Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

41

02.09.2016, 23:49

Wenn Du das konkrete Objekt aber eh per Interface in den Nutzer reinreichst, warum machst Du dann überhaupt ein Singleton? Dann kannst Du doch auch einfach das Objekt anlegen und halt reinreichen als klassische Dependency Injection? Oder habe ich da was missverstanden?
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

42

03.09.2016, 00:48

Bei dem Singleton gehe ich davon aus, dass die eine Voraussetzung gegeben ist, die einen Singleton sinnvoll macht: es darf nur 1 Instanz geben.
Dass das oft genug nicht gegeben ist, habe ich ja bereits erwähnt. Und ich wollte nicht sagen, dass man bei einer solchen Implementierung Singleton "ruhigen Gewissens" verwenden kann. Aber die meisten Probleme (globale Zugreifbarkeit, woraus starke Bindung, schlechte Testbarkeit etc. resultieren) sind immernoch durch die Standardimplementierung bedingt.
Wie genau die Instanz weitergereicht wird habe ich nicht bestimmt und ich habe auch geschrieben, dass Dependency Injection weitere Möglichkeiten bieten würde. Dazu kann man auch zählen, dass das Instanziieren durch das Framework übernommen wird. Da ich aber die Beispiele nicht von konkreten Frameworks abhängig machen wollte, habe ich es an einem Beispiel ohne DJ-Framework gezeigt.

Also: jain. Letztendlich würdest du es wohl richtig machen, indem du einfach einen Schritt auslässt und direkt auf Singletons verzichtest.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

43

03.09.2016, 01:37

Ich denke das einzige gute Argument fuer Singletons ist Faulheit.

Sicherlich wuerde es flexibler und besseres testen erlauben wenn man eine Logger Instanz in jede Klasse schieb. Aber es ist doch durchaus angenehmer und weniger Arbeit das einfach als Singleton (oder ein aehnliches global verfuegbares Pattern) zu verwenden. Weniger Code, weniger zu maintainen, weniger zu refactorn... Faulheit hat manchmal durchaus was gutes ;)

Jar

Treue Seele

Beiträge: 197

Wohnort: Lübeck

Beruf: Softwareentwickler

  • Private Nachricht senden

44

05.09.2016, 10:41

Ich denke das einzige gute Argument fuer Singletons ist Faulheit.

Oder wenn eine Instanz einer Klasse nur ein einziges Mal in deiner Software vorhanden sein soll :P

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

45

05.09.2016, 10:48

Ich denke das einzige gute Argument fuer Singletons ist Faulheit.

Oder wenn eine Instanz einer Klasse nur ein einziges Mal in deiner Software vorhanden sein soll :P

Was in keiner Software, von der ich je gehört hätte, sinnvoll ist. Faulheit ist der einzige wirkliche Grund für so ziemlich alle Singletons, die je geschrieben wurden und geschrieben werden. Siehe auch: https://en.wikipedia.org/wiki/Technical_debt... ;)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (05.09.2016, 11:08)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

46

05.09.2016, 13:11

Was in keiner Software, von der ich je gehört hätte, sinnvoll ist.

Wenn man alle Beispiele, die andere anführen ignoriert ist das auch kein Wunder.

Keine Sorge, ich hab mir alle hier im Thread angeführten Beispiele natürlich angeschaut und beim Tippen meiner obigen Aussage bedacht... ;)

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

47

05.09.2016, 14:14

Ich muss mich dot da leider anschließen. Wenn es, wie Jar meinte, nur eine Instanz geben soll, dann reicht es, nur eine zu instanziieren.
Wenn es nur eine geben darf, weil sonst igendwas nicht richtig funktionieren würde, liegt das Problem meist an einer anderen Stelle.
Und wenn man die Standardimplementierung des Singletons verwendet (also mit globalem Zugriff und so), dann ist man ohnehin faul.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

48

05.09.2016, 15:32

Wobei reine Faulheit als in jedem Fall schlecht abzutun auch nicht immer richtig ist. Auch wenn ich euch zustimme und aus vielen Faulheitsfällen später größere Probleme entstehen können, wie zum Beispiel dass dadurch das Softwaredesign gestört wird und am Ende nicht ohne weiteres wieder korrigiert werden kann. Faulheit hat nicht unbedingt immer Nachteile. Wie gesagt, die Aussage bezieht sich jetzt weniger auf Singleton. Eher auf Faulheit im allgemeinen. Es gibt eben manchmal Gründe warum Faulheit vielleicht doch nicht so schlecht sein kann. Als Beispiel muss nicht immer endlos viel Zeit in Dinge gesteckt werden die am Ende nicht benötigt werden. Das ist eben unwirtschaftlich. Aber bitte nicht falsch verstehen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige