Latest / Coding Buddies | Tech & Dev-Mindset / #123 Design Patterns 3 - Das Singleton Dilemma
Transcript
- 0:00Keine Ahnung, welche Privatperson anruft und fragt,
- 0:02wie sieht's aus, alles frei, na du weiß nicht, ja doch hier
- 0:05komm, mach schnell kann ich nach Messe Coding Buddies Dein
- 0:10Podcast rund um Softwareentwicklung und
- 0:12aktueller Tech News. Herzlich Willkommen
- 0:27einen wunderschönen guten Tag und herzlich Willkommen zur
- 0:30neuen Folge vom Coding Buddies Podcast.
- 0:34Fabi und Tino, also ich und Tino, Wir sind wieder am Start
- 0:37bereit für ne neue Folge hoffe ich zumindest.
- 0:40Tino bist bereit. Ich bin bereit.
- 0:43Moin Fabi, Was geht ab, was geht ab, was geht ab, was geht, was
- 0:47geht? Ja, was geht eigentlich alles
- 0:52gut da ich. Dich das jede Woche Frage gibt
- 0:54es auch nicht so viele News, immer dazwischen ne, es hat aber
- 0:57einfach cool alles gut. Ja, ist schwer.
- 1:01Wir müssen irgendwann mal, weißt du, wir machen irgendwann mal so
- 1:04ne halbjährige Podcastpause ne und dann kannst du mich das noch
- 1:09mal fragen, genau. Oder ich frag dich einfach ein
- 1:12halbes Jahr lang nicht. Wir machen weiter folgen, aber
- 1:14ich frag dich einfach nicht und du denkst dir jedes mal so,
- 1:17warum fragt ihr nicht? Was ist los, du?
- 1:19Willst gar nicht mehr wissen, wie es mir geht.
- 1:21Mann, nein wir. Machen natürlich keine
- 1:24halbjährliche Pause. Das ist natürlich alles Quatsch.
- 1:27Es geht Schlach auf Schlag weiter, wir machen weiter, aber
- 1:30bevor wir jetzt wirklich weitermachen, richtig
- 1:32reinstarten wollte ich noch mal ganz kurz anmerken, Tino weil
- 1:36Pass auf, man denkt ja, man weiß alles über Podcast, wenn man
- 1:40selber einen Podcast macht, dann.
- 1:41Aber so ist es nicht, weil es gibt, und das hab ich jetzt
- 1:44erstmal richtig realisiert, in zum Beispiel bei Spotify oder
- 1:49halt auch bei den anderen Plattformen.
- 1:51Gibt es so ne Glocke und die kannst du anmachen, ne für n
- 1:55Podcast und wenn du die Anmachst, dann kriegst du immer
- 1:58ne notification wenn es ne neue Folge gibt.
- 2:01Und ich dachte mir so. Okay sowas gibt es bei youtube
- 2:03auch und so ne ja okay okay. Krass.
- 2:06Und das ist krass und deswegen will ich einmal ganz kurz sagen,
- 2:08Leute, wenn ihr das noch nicht angebracht habt, dann auf jeden
- 2:12Fall diese Glocke anmachen beim Podcast, weil dann verpasst ihr
- 2:15keine neue Folge. Und falls ihr noch nicht
- 2:17abonniert habt, dann natürlich auch, weil dann ist es die
- 2:19wahrscheinlich keine neue Folge zu verpassen, auch geringer.
- 2:21Also Glocke anmachen, abonnieren, das ist wichtig.
- 2:24Ey cool, dann können wir jetzt immer sagen, wenn du keine neue
- 2:27Folge verpassen willst, dann drück auf die Glocke.
- 2:29Ganz genau. Geil.
- 2:31Keiner freut mich drauf. Das war ungefähr das, worauf ich
- 2:34hinaus wollte und da würde ich sagen, lass uns doch jetzt mal
- 2:38so ordentlich mal richtig ins Thema starten und zwar geht es
- 2:42ja heute wieder um unsere neue Reihe, die wir letztens
- 2:46gestartet haben, patterns ne die schönen Design Patterns in der
- 2:50Softwareentwicklung. Wo welches Design Pattern haben
- 2:54wir uns denn heute mal geschnappt?
- 2:55Tino Worum? Geht es heute?
- 2:58Heute haben wir, wie soll ich sagen, so n umstrittenes Pattern
- 3:02ausgewählt, aber es ist eigentlich so 1 der allerersten
- 3:06was man sich so anschaut, wenn man in den Bereich der Design
- 3:10Patterns geht und zwar möchten wir heute Fabi und ich freue
- 3:14mich drauf, wir möchten heute über singleten reden, über das
- 3:17Design Pattern singleten und. Ich würde sagen, wir starten
- 3:23mal. Du hast doch bestimmt ne
- 3:24Analogie oder? Ich freue mich immer so riesig
- 3:26auf deine Analogien und ich sehe es schon in deinen Augen, du
- 3:28kannst das gar nicht abwarten, hau doch mal ne Analogie raus,
- 3:32wie würdest du denn so Singleton umschreiben?
- 3:35Pass auf, ich hole erstmal mein Analogie Märchenbuch heraus, da
- 3:39muss ich erstmal. Suchen?
- 3:40Nein, so heißt so Finger anlecken umblättern, so neue
- 3:43Analogie also. Herrn Singleton, ich glaub man
- 3:48kann da 1000 Analogien für bringen.
- 3:49Wahrscheinlich. Ich stell mir das ganz gerne,
- 3:52zum Beispiel so vor, dass wenn du n Theater hast ne, also stell
- 3:57dir mal so n normales Theater vor, wie man das halt so kennt
- 4:00ne und wir sind aber nicht in der Aufführung an sich, sondern
- 4:05beim Proben ne, also du hast quasi du Probst entsprechende
- 4:09Szenen und. Dann ist es ja im Normalfall so,
- 4:13dass du vielleicht unter Umständen auch verschiedene
- 4:17Szenen parallel proben kannst. Also du könntest ja zum Beispiel
- 4:203 Bühnen bauen oder irgendwie 3 Räume nehmen und da können
- 4:24Leute, die in den entsprechenden Szenen halt sind, diese Szenen
- 4:28eben proben. Wenn es jetzt aber irgendwie
- 4:31Fragen gibt oder diese Szene bewertet werden soll, dann gibt
- 4:35es halt am Ende einen Regisseur, ne, der am Ende sagt, OK, Pass
- 4:39auf, mach du die Szene so, da musst du noch n bisschen was an
- 4:42deiner Aussprache ändern und hier, das war mir zu wenig
- 4:46Gestik und Mimik, also da mal n bisschen das ganze aufpeppen und
- 4:50ich würde gern die Szene noch mal n bisschen ändern an der
- 4:53Stelle ne das heißt es gibt einen Regisseur der allen.
- 4:58Wenn jeder Szene, auf jeder Bühne oder in jedem Raum sagt,
- 5:00wie sozusagen was gemacht werden soll, wie das ganze aussehen
- 5:04soll, ne. Und wenn du jetzt dir überlegst,
- 5:08dass du zum Beispiel sagen würdest, du hast jetzt 2
- 5:10Regisseure, ne, und jetzt kommen die, ich weiß nicht Raum 1 ne wo
- 5:13die Üben kommen zu Regisseur 1 und sagen, wie sollen wir das
- 5:16denn machen, dann sagt er ja, mach das auf jeden Fall so
- 5:19richtig trocken so, und dann machen die das trocken, dann
- 5:22kommt Regisseur 2, guckt sich das an, denkt sich, was macht
- 5:25ihr da für n Quatsch, ja, ihr sollt das mal so richtig peppig
- 5:27machen, das muss richtig. Nicht abgehen so diese Szene.
- 5:29Ne die ist das ist, das herrschte Geistwort so ne und
- 5:33das heißt im Endeffekt wenn du jetzt 2 Regisseure hättest,
- 5:37würde halt totales Chaos entstehen, weil du hast
- 5:40unterschiedliche Ideen oder was auch immer, was du dann im
- 5:43Endeffekt in diese entsprechenden Szenen
- 5:46reinbringst und das kann man sich jetzt natürlich so
- 5:50vorstellen. Ne, der Regisseur ist dann am
- 5:52Ende des Singleton. Ne, also quasi eine
- 5:55Kontrollinstanz, die sagt das und das und das soll passieren,
- 5:58sozusagen die Source of Truth über bestimmte Abläufe
- 6:02beispielsweise und die entsprechenden Szenen in den
- 6:05entsprechenden Räumen sind verschiedene Teile der des
- 6:07Programms, zum Beispiel ne so, aber alle brauchen den Input von
- 6:11dem Regisseur. Genau das heißt jeder ja, also
- 6:16so Schauspieler, die können ja untereinander reden und sich
- 6:18austauschen oder so, aber wenn es darum geht, wirklich
- 6:20Anweisungen zu kriegen oder die. Absolute Wahrheit.
- 6:24Ja, wie du es gerade meintest, dann gehst du halt zum Regisseur
- 6:27und fragst nach ne, das ist eigentlich n ganz cooles
- 6:30Beispiel so n anderes Beispiel auch so n Klassiker wenn du
- 6:34jetzt überlegst ich hab jetzt meine Software ist jetzt n
- 6:37Flughafen oder so ja also ich nehm jetzt mal das Gedankenspiel
- 6:40Ich bin auf dem Flughafen auf einen ne nicht jetzt weltweit
- 6:44mit mehreren wir machen es nicht komplexer wir sind auf einem
- 6:47Flughafen. Und um den Flugverkehr zu
- 6:50steuern, hast du ja im Prinzip n Kontrollturm so n Tower ne und
- 6:54da gibt es halt einen von. Ja, also ist ja nicht so, dass
- 6:57jetzt jede jedes Flugzeug so verschiedene Tower anfunkt oder
- 7:02keine Ahnung welche Privatperson anruft und fragt, wie sieht es
- 7:05aus, alles frei na du weiß nicht, ja doch hier komm mach
- 7:10schnell kann ich nach Messler. Und das ist, das kann man sich
- 7:15ja auch so vorstellen, dass im Prinzip dieser Kontrollton auch
- 7:18einzigartig ist in in Scope unserer Software oder des
- 7:23Flughafens. Ja, und quasi immer angefragt
- 7:26wird für Infos und es gibt ihn halt nur einmal.
- 7:30Und genau diese Grundidee und dieses Prinzip verkörpert das
- 7:34Single N Pattern. Ja, das heißt.
- 7:37Mit dem Pattern sorgt man dafür, dass es genau eine Instanz einer
- 7:42bestimmten Klasse gibt. Klasse Regisseur, Klasse
- 7:45Kontrolltom, was auch immer, jetzt mal angepasst an unsere
- 7:50Beispiele. Ja, und dass alle Teile des
- 7:53Programms dann auf diese gemeinsame Instanz zugreifen,
- 7:57richtig, ja, also das heißt, du Erzeugst eine Instanz und auch
- 8:01nur eine und alle können gemeinsam diese Instanz
- 8:05verwenden. Jetzt denkt sich vielleicht der
- 8:08ein oder andere Leute, was ist das für n Pattern?
- 8:11Das klingt total nach einer globalen Variable.
- 8:13Ja, auch auf diesen Punkt werden wir eingehen in dieser Folge und
- 8:18das Halt mal beleuchten, wie gut ist dieses Pattern, wofür kann
- 8:22man es verwenden, jetzt wo wir es mal so grob abgesteckt haben
- 8:25und warum ist es umstritten, hatte ich ja schon angedeutet,
- 8:28das lass mal jetzt in dieser Folge bequatschen, Fabi und
- 8:31natürlich auch, was gibt es denn zum Beispiel auch für
- 8:34Alternativen, wenn man sagt, OK, es ist umstritten.
- 8:36Hin, weil es bringt ja nichts, wenn man sagt, es ist
- 8:38umstritten. Na ja, gut, aber du musst es
- 8:39nehmen, natürlich auch blöd, aber das sind auf jeden Fall
- 8:44wichtige Fragen, die wir jetzt in der Folge klären wollen.
- 8:46Und um jetzt aber mal so n bisschen wegzugehen von den
- 8:49entsprechenden Analogien, sondern mal wirklich hin zur
- 8:52Technik und man sich vielleicht jetzt fragt, ja OK, aber was
- 8:55bringt mir das ganze, wenn das alles Quatsch ist?
- 8:58Also es gibt natürlich auch. Wirklich sinnvolle Sachen oder
- 9:02oder Dinge wo ist wo so n Single oft genutzt wird, da gibt es
- 9:06schon n paar Beispiele wie zum Beispiel jetzt ein Logger, ne
- 9:10kann man sich so vorstellen. Also wenn du jetzt irgendwo n
- 9:12Logger in deiner Software hast, dann macht es halt eben nicht so
- 9:14viel Sinn wenn du sagst OK du hast jetzt weiß nicht du willst
- 9:18in deiner Anwendung möchtest du sagen OK wir gehen jetzt auf n
- 9:21bestimmtes Log level ne das hast du ja meistens so dass du n
- 9:24logger hast wo du sagst OK ich kann irgendwie mir Infos
- 9:26rausspucken ich kann mir aber auch.
- 9:28Wirklich komplett sozusagen auf Debug das ganze Stellen, dass du
- 9:31wirklich alle Informationen rausgeklatscht bekommst, die du
- 9:34aber eigentlich als Anwender vielleicht gar nicht brauchst.
- 9:36Ne, aber unter Umständen als Entwickler vielleicht schon oder
- 9:39als Entwicklerin. Und wenn du jetzt aber n Logger
- 9:41hast, der nicht, sag ich jetzt mal zum Beispiel in so einer
- 9:45Singleton Instanz existiert. Dann würdest du zum Beispiel in
- 9:48in dem einen Teil deiner Software beispielsweise den
- 9:52Logger auf Info stellen und in dem anderen Teil deiner Software
- 9:55hast du ne andere Instanz von diesem Logger, der aber dann auf
- 9:58Debug steht und dann fragst du dich vielleicht, hey, ich hab
- 10:01doch meinen Logger instanziiert und hab eine, also ne, ich hab
- 10:05irgendwie n Logger in meiner Software, der auf der einen
- 10:07Seite als in also info auf Info eingestellt ist.
- 10:10Und jetzt krieg ich doch die ganze Zeit irgendwo ab in einem
- 10:13bestimmten Teil krieg ich irgendwie debug Informationen ne
- 10:16das ist. Beispielsweise so n so n Ding,
- 10:19aber dir fällt bestimmt auch noch was ein, wenn es jetzt
- 10:22nicht dran locker ist. Ja, was halt auch so n Klassiker
- 10:28ist, ist so ne Art Konfigurationsmanager.
- 10:30Wenn ich halt ne config habe in meiner Software ne und die soll
- 10:33halt von allen möglichen Stellen ausgelesen werden, dann macht
- 10:37das da auch Sinn, weil ich möchte ja nicht unterschiedliche
- 10:40Konfigurationen rumgeistern haben, ne?
- 10:42Sondern ich bau eine Instanz auf meiner Config und die kann halt
- 10:46abgerufen werden von allen und immer die gleiche config.
- 10:49Das wär halt auch n Beispiel wie gesagt, es gibt auch andere
- 10:53Umsetzungsmöglichkeiten, aber es ist auf jeden Fall erstmal n
- 10:56Anwendungsfall für n Singleton oder halt auch n Klassiker ist
- 11:00auch so n Cash ne wenn ich sage ich möchte ne Art Cash haben der
- 11:03sozusagen wirklich global ist. Ne dass ich halt zum Beispiel
- 11:07Ergebnisse, Ergebnisse, Ergebnisse.
- 11:10Zwischenspeicher und damit sie halt nicht mehrfach berechnet
- 11:15werden oder mehrfach ausgeführt werden und ich kann dann wieder
- 11:18aus diesem Cache diese Ergebnisse laden und dann
- 11:20brauche ich natürlich auch die Gewährleistung, dass alle vom
- 11:23gleichen Cache arbeiten. So ne Source Trust dann am Ende,
- 11:26weil es bringt ja nichts wenn du was Cache und dann kriegst du
- 11:28aber hinterher weiß ich nicht von einem anderen Cache n
- 11:31Zwischenergebnis was du aber eigentlich gar nicht berechnet
- 11:33hast. Folgefehler.
- 11:36Ist dann kacke? Genau.
- 11:39Das wär halt auch noch so n Anwendungsfall.
- 11:40Genau. Also im Endeffekt ist es halt,
- 11:42wird es halt wie gesagt oft da verwendet, wo man halt
- 11:44irgendwie, sagen wir mal globale Zustände vielleicht braucht
- 11:49speichern möchte und es jetzt vielleicht aber auch nicht.
- 11:53Also da muss man natürlich auch noch n bisschen unterscheiden
- 11:55zwischen einem Persistenten. Persistenten Speicherung oder so
- 12:00einer flüchtigen Speicherung ne. Also wenn du sagen wir mal die
- 12:02Software anschmeißt und so lange wie die Software lebt halt eben
- 12:06auch oder läuft halt eben auch diesen Zustand speichern
- 12:09möchtest. Ne.
- 12:09Also sonst wäre zum Beispiel ne Datenbank irgendwas was du
- 12:11nehmen könntest. Aber das ist es jetzt quasi
- 12:13nicht. Wir sind jetzt quasi wirklich
- 12:14nur rein in unserer Software unterwegs und schließen jetzt
- 12:17nicht noch ne Datenbank an genau aber.
- 12:20Genau. Also das ist auch schon n guter
- 12:22Punkt, ne. Also n Singleton ist natürlich,
- 12:24also es ist n. Ne Instanz eines einer Klasse,
- 12:28die ja instanziiert wird zur Laufzeit der Software.
- 12:32Das heißt du hast halt auch n abgesteckten Lebens ne
- 12:36abgesteckte Lebenszeit, sozusagen ne.
- 12:38Also wenn ich die Software beende quasi, dann ist das
- 12:42natürlich weg, ne, also da haben wir jetzt nichts persistentes
- 12:45also nur ist ne gute Anmerkung, dass wir da halt auch vom
- 12:47richtigen Scope gerade reden. Ja genau, und genau wie du
- 12:52meintest, wenn man so globale Zustände gemeinsam Ressourcen
- 12:55oder so. Braucht, dann denkt man oft an
- 12:58direkt an den Singleton das. Klingt ja auch schon.
- 13:00Du hast ja auch gesagt, ja, globale Variablen.
- 13:03Ne. Kann man daran denken, ist ja
- 13:06auch irgendwo. Wie gesagt, kommen wir später
- 13:08noch drauf zurück, wir sind ja auch jetzt schon, also wir sind
- 13:12natürlich bei diesen ganzen Design pattern sind wir
- 13:14natürlich schon irgendwie hart in einem in einem.
- 13:16Im Objektorientierungskontext unterwegs, da hatten wir letztes
- 13:19Mal auch so n bisschen bei der letzten Folge auch so n kleinen
- 13:22Exkurs gemacht und ich würd diesmal auch wieder n kleinen
- 13:24Exkurs machen, weil es schon glaub ich sinnvoll ist das
- 13:28einmal in diesem Kontext gehört zu haben.
- 13:30Ne und zwar über das über den das Schlüsselwort static ne und
- 13:38weil gerade wenn du zum Beispiel mit so Singleton arbeitest hast
- 13:41du meistens irgendwie dieses Wort Static mit drin in ne also
- 13:46im. Größeren also ne, es gibt, ich
- 13:48weiß jetzt nicht ob es vielleicht Sprachen gibt, wo
- 13:50Static vielleicht anders heißt. Beispielsweise kann ja auch
- 13:53sein, hab ich jetzt nicht im Kopf, deswegen will ich es jetzt
- 13:55nicht ausschließlich auf Static runterbrechen, aber nur, dass
- 13:59man ungefähr weiß worum es geht, ne und Static ist im Endeffekt
- 14:04ich, ich versuch das noch mal wieder mit einer Analogie ne
- 14:06wenn wenn du jetzt sagen wir mal du hast Häuser ne und Häuser
- 14:08sind jetzt Objekte und die stehen alle in einer Straße ne
- 14:11dann hat ja jedes Haus ne Hausnummer ne das heißt?
- 14:15Das ist n Attribut, was an dem Haus hängt an dem Objekt Haus,
- 14:19wo aber sich dieses Attribut unterscheidet, das heißt jedes
- 14:22ein, jeder jede Instanz dieses Hauses bekommt eine eigene
- 14:26Hausnummer, ne, das heißt, dass diese diese Hausnummer gilt
- 14:29immer nur für ein Haus, für eine Instanz von Haus.
- 14:33So ne jetzt hast du aber zum Beispiel noch ne Postleitzahl,
- 14:37die ja wenn die Häuser zum Beispiel in der Gleichenstraße
- 14:40stehen auch. Immer die gleiche Postleitzahl
- 14:42ist, das heißt, rein theoretisch kannst du jetzt sagen,
- 14:44Postleitzahl an sich ist Static für das Objekt Haus angenommen
- 14:48die stehen alle in einer Stadt oder in einer Straße ne weil
- 14:52diese Postleitzahl für dieses Haus halt einfach immer, also
- 14:57für für für jede Instanz von Haus gleich ist.
- 15:00Weißt du wenn du sagst ich instanziere instanziere ein
- 15:03Haus, also ein Objekt der Klasse, dann kriegt dieses Haus
- 15:07zwar eine. Hausnummer eine eigene, aber die
- 15:10Postleitzahl, die musst du nicht immer noch mal zuweisen, weil
- 15:12die ist halt einfach da. Das ist immer die gleiche so ne.
- 15:16Also vorausgesetzt, dass du dieses Haus auch nur
- 15:19instanziieren möchtest in einem Postleitzahlgebiet.
- 15:22Ja genau. Das hab ich jetzt.
- 15:24Also wir stecken. Das jetzt mal in den kleinen
- 15:27Bereich? Ja nur nicht, dass jetzt jemand
- 15:29denkt, dass es denn für alle gilt.
- 15:30Also aber das wär n Anwendungsfall genau weil wenn
- 15:32du sagst es gibt sozusagen kein Objekt Haus wo die Postleitzahl
- 15:37anders ist, dann ist das. Ist ein statisch gegebener
- 15:40Kontext am Ende genau und im Endeffekt ist es ja so, dass
- 15:44quasi Static am Ende bedeutet, dass etwas nicht zu einem
- 15:49einzelnen Ding gehört, sondern zu allen Dingen von dieser
- 15:54Klasse sozusagen ne genau genau kurz zusammengefasst.
- 15:58Das heißt, du musst kein Haus erzeugen, um auf die
- 16:02Postleitzahl zuzugreifen? Genau, genau, genau.
- 16:05Wie gesagt, immer in dem Scope jetzt angenommen, wir bleiben
- 16:08natürlich in der gleichen Stadt, die Postleitzahl kann sich jetzt
- 16:10nicht ändern. Ne, das war jetzt die kleine
- 16:12Voraussetzung für diese Analogie, aber wenn wir das
- 16:15ganze jetzt noch mal technischer machen, weil jetzt kann man sich
- 16:18hinstellen, OK, ich versteh jetzt noch nicht warum das jetzt
- 16:21n Singleton ist, weil du ja gerade gesagt hast, Fabian N
- 16:24Haus kannst du instanzieren hast verschiedene Häuser mit
- 16:27verschiedenen Hausnummern, ne so all das hast du.
- 16:29Gerade gesagt, das ist richtig. Das hab ich gerade gesagt.
- 16:33Nee, also natürlich ist das jetzt kein Single an sich, aber
- 16:36das Wort Static oder dieses, dieses, dieses Schlüsselwort
- 16:40static ist halt wichtig an der Stelle um überhaupt am Ende zum
- 16:43Beispiel so n Single erzeugen zu können.
- 16:45Ne genau und da können wir ja gleich mal so n bisschen jetzt
- 16:49technischer drauf eingehen wie das also wieso n Single jetzt
- 16:53quasi technisch aussieht, weil wir haben ja jetzt n Beispiel ne
- 16:55Logger genannt und so weiter aber wie kann man das jetzt?
- 16:58Genau. Also wir müssen ja jetzt quasi
- 17:00sicherstellen, dass von einer Klasse zum Beispiel na, das
- 17:05Haus, gehen wir mal n bisschen weg von dem Haus, weil da hast
- 17:08du jetzt mehrere Instanziiert, ne, aber wenn wir jetzt wirklich
- 17:11sagen, wir wollen jetzt die Klasse singleten, wir nennen sie
- 17:14jetzt so richtig lehrbuchhaft singleten ja instanziieren und
- 17:19wollen aber sicherstellen, dass es immer nur eine.
- 17:21Instanz geben kann. Ja, das müssen wir jetzt
- 17:24technisch gewährleisten und wie du ja gerade erklärt hast, gibt
- 17:27es halt sozusagen ne globale Zugriffsmöglichkeit auf eine
- 17:31Klasse über Static über den statischen Kontext sozusagen
- 17:36oder scope so und typischerweise so Lehrbuchhaft machst du das
- 17:40so, dass du die. Klasse den Konstruktor erstmal
- 17:44private setzt ja also zum Beispiel jetzt in Java oder so
- 17:49und das ist. Einfach deshalb macht man das,
- 17:52damit du halt schon mal verhindern kannst, dass der
- 17:55Coder oder der die Software halt programmiert, die Coderin keine
- 18:00Instanzen davon erzeugen kann, weil der private ist halt der
- 18:03Konstruktor, der ist nicht mehr public.
- 18:04Das heißt, ich kann den nicht aufrufen von außen und ich kann
- 18:06jetzt kein Haus erzeugen mehr oder Single in die Klasse haben
- 18:10wir sie jetzt genannt, so dann ist schon mal der erste Schritt
- 18:13gewährleistet, ich kann nicht beliebig viele erzeugen.
- 18:17Aber das Ding ist, jetzt kann ich nicht mal eine erzeugen.
- 18:20Ja, jetzt hab ich mich komplett ausgesperrt und jetzt kommt gut,
- 18:23dass du es auch noch mal eingebaut hast, weil das hätte
- 18:25ich jetzt zum Beispiel vergessen das Static mal zu erklären,
- 18:28jetzt kommt halt der statische Aufruf die statische Methode
- 18:31dazu, dass du halt ich glaub in Büchern heißt es meistens sowas
- 18:34wie Get instance oder so ja also dass du halt ne statische
- 18:37Methode bereitstellst, die quasi dir diese Instanz zurückgibt.
- 18:42Genau ne, dass du halt ne Möglichkeit hast an eine Instanz
- 18:46von Singleton ranzukommen. Und jetzt liegt da auch die
- 18:49Pattern Logik drin, weil wenn du das jetzt einfach so machst,
- 18:53kriegst du wieder so viel Instanz wie du willst.
- 18:54Wenn du jetzt einfach Return New Singleton drin ist, dann ja nix,
- 18:58nix gewonnen ja also das heißt diese Get instance Methode muss
- 19:02ja jetzt dafür sorgen, dass wenn noch keine Instanz erzeugt
- 19:07wurde. Mhm.
- 19:08Eine Instanz erzeugt wurde genau von Singleton eine Instanz
- 19:12erzeugt wird und zurückgegeben wird.
- 19:14Und falls schon mal eine erzeugt wurde, genau die wieder
- 19:18zurückgegeben wird und dann hast du nämlich genau diese diese
- 19:21Pattern Logik abgebildet, erstmal in einem sehr einfachen
- 19:24Stil. Es gibt da auch noch so ein 2
- 19:25Probleme, die kannst du ja vielleicht gleich mal erläutern.
- 19:28Aber dann hast du eine sehr einfache Logik implementiert, um
- 19:31dieses Pattern abzubilden, weil dann kriegst du, wenn es noch
- 19:34keine gibt, eine neue Instanz von Singleton und wenn es schon
- 19:37eine gibt, dann kriegst du die, die schon mal erzeugt wurde, das
- 19:40heißt, du speicherst dir quasi intern diese Instanz ab und
- 19:44gibst die dann immer wieder zurück, es sei denn, es gibt
- 19:47keine, musst du sie halt einmalig erzeugen, richtig?
- 19:50Und das interessante an diesem Static oder diesem statischen,
- 19:53dieser statischen Funktion ist ja, dass du im Endeffekt, sagen
- 19:57wir mal, du bist in einem Objektorientierungskontext
- 19:59unterwegs und möchtest eine Funktion auf einer Klasse
- 20:01aufrufen, dann brauchst du ja erstmal eine Instanz dieser
- 20:03Klasse, das heißt, du brauchst ja erstmal dieses New ne
- 20:06normalerweise, um ein neues Objekt anzulegen, um dann
- 20:09sozusagen auf diesem erstellten Objekt dann diese entsprechenden
- 20:11Funktionen aufzurufen. Wenn du jetzt aber diesen diesen
- 20:14statischen Kontext hast, dieses Static davor setzt, dann hast du
- 20:17die Möglichkeit einfach auf. Der Klasse sozusagen ne diese
- 20:23Funktion aufzurufen. Das heißt du brauchst keine
- 20:24Instanz, sondern kannst einfach sagen, OK, ich möchte diese
- 20:26Funktion aufrufen, das heißt du sagst dann sowas wie Singleton
- 20:29Punkt, Get instance beispielsweise ne, ohne dass du
- 20:32jetzt vorher sagen musst, New Singleton ist mein Singleton und
- 20:35dann sag ich Singleton Punkt, also Singleton kleingeschrieben,
- 20:38die variable Punkt get instance, das ist sozusagen hier so
- 20:41nochmal der Unterschied, falls das jetzt noch nicht richtig
- 20:44rübergekommen ist, ne. Das ist jetzt auf jeden Fall so.
- 20:46Die klassische blazy Variante nennt man das Ganze, das heißt
- 20:52du hast noch eventuell noch keine, kein Singleton und wenn
- 20:57du 1 brauchst, dann holst du dir 1.
- 20:58Und wenn du schon 1 da hast, dann halt eben nicht und.
- 21:03Das kann natürlich aber jetzt sein, dass das vielleicht mit
- 21:05Multi threading oder so noch nicht so richtig funktioniert.
- 21:07Ne, musst du das ganze vielleicht noch synchronisieren
- 21:09oder andere Mechanismen verwenden, um wirklich
- 21:12sicherzustellen, dass du jetzt auch wirklich nur auf einer
- 21:14Instanz unterwegs bist und nicht auf einmal?
- 21:17Wichtiger Punkt genau, definitiv, also das ist auch im
- 21:21Endeffekt so n bisschen so n wie sagt man so schon so ne kleine
- 21:25Limitierung davon, ne, da muss man halt auch wirklich richtig
- 21:27aufpassen, wenn es um Multi threading geht, ne?
- 21:30Aber wie gesagt, das ist jetzt auf jeden Fall nicht unbedingt
- 21:34Teil der Folge multistrailing oder?
- 21:37Das Problem können wir aber gerne auch noch mal besprechen,
- 21:40wenn es jemanden interessiert. Genau.
- 21:44Und ja, das ist eigentlich so die klassische Implementierung,
- 21:48oder? Genau.
- 21:50Also so so, wenn ich es mal verwendet habe oder mal
- 21:53programmiert habe ich es auch so gemacht.
- 21:56Und es ist auf jeden Fall auch nicht verkehrt, das Mal
- 21:58auszuprobieren, weil wie gesagt, in in in Pattern hat ja irgendwo
- 22:05irgendwo seine Daseinsberechtigung, aber in dem
- 22:08Fall ist es natürlich auch schon so, dass man beim Single so n
- 22:11bisschen sagt, Na Singleton, das ist vielleicht auch nicht gerade
- 22:15so die geilste Variante und das Beste.
- 22:18Und mal, wir können ja mal n bisschen gucken, was oder wo man
- 22:21vielleicht so n Single vielleicht lieber nicht
- 22:24verwenden sollte und warum auch beispielsweise ne, also ich
- 22:27weiß. Noch als wir damals im Studium
- 22:30angefangen haben, Design Pattern, also Pattern, zu
- 22:32lernen, ne, also hatten wir ja auch so in verschiedenen
- 22:34Vorlesungen, und dann hat man es ja auch gecoded und gerade am
- 22:37Anfang lernst du Design Patterns kennen, also auch vielleicht du,
- 22:41liebe Zuhörer, liebe Zuhörer, falls du jetzt.
- 22:43Dir gerade jetzt diese Folge anhörst und dir denkst, das
- 22:46klingt geil, das ist, das kann ich jetzt echt oft verwenden, ne
- 22:48und mir ging es damals so, ich weiß nicht wie es bei dir war,
- 22:51fabi, ich hab das Ding kennengelernt und immer wenn ich
- 22:54so n Pattern kennengelernt hab, dann hab ich es auch erstmal
- 22:56überall verwendet gefühlt und beim Singleton das was oft
- 23:00kritisiert wurde hat sich erstmal richtig angefühlt.
- 23:03Weißt du, du hast halt ne einfache Möglichkeit Daten
- 23:07überall bereitzustellen oder Funktion.
- 23:10Ja dann sagt er Ja mach doch n Single draus, dann kannst du
- 23:12doch überall aufrufen. Ja, aber genau das ist ja das
- 23:16Problem, ne also in diese Falle zu tappen zu sagen nee jetzt
- 23:20Kapsel ich alles in dieses Design Pattern und bau überall
- 23:24also ich mach aus allen klassengefühl singletens ne und
- 23:27dann bist du halt bei diesem was wir meinten.
- 23:31Ja, was ist jetzt der Unterschied zu globalen
- 23:32Variablen? Oder?
- 23:33Dann kannst du einfach globale Funktionen haben oder sowas ne,
- 23:36weil das ist genau das Problem, warum viele Leute das Pattern
- 23:41nicht mögen oder sehr sehr umstritten betrachten.
- 23:46Ja, das haben wir jetzt ja schon mehrfach erwähnt und das möchte
- 23:49ich jetzt einfach mal kurz erläutern mit dir, denn Fakt ist
- 23:53ja du erschaffst sehr schnell viele versteckte Abhängigkeiten.
- 24:00Oder wie siehst du das? Ja.
- 24:01Auf jeden Fall. Also ich find es gut, dass du
- 24:02das Studium erwähnt hast, weil ich auch damals im Studium an n
- 24:06Punkt gekommen bin, wo ich mir dachte es wär so geil, wenn ich
- 24:09jetzt einfach nicht immer dieses, also ich bräuchte jetzt
- 24:12eigentlich n Objekt was ich erzeuge und dann.
- 24:15Kann es nicht noch mal 1 davon geben?
- 24:17Also ich, dass ich immer das nehme und dann kam halt
- 24:19irgendwann so, ja nimm doch n Single und ich dachte mir so
- 24:21Alter, wie geil ist das denn, das ist ja.
- 24:24Ist ja. Mein changing weißt du, weil ich
- 24:27mir dachte, es kann doch nicht wahr sein, es gibt es geht, es
- 24:29gibt da sogar n Pattern für das muss gut sein.
- 24:31Also ich mein, wenn es dafür Begriff gibt in der Informatik,
- 24:34dann ist es ja wohl der Knaller. So ne hab ich auch gemacht und
- 24:37das und genau diese Abhängigkeiten von denen du
- 24:39redest ne das ist find ich dann am Ende richtig richtig schwer
- 24:43weil angenommen du hast. Dein Single Ne und du benutzt es
- 24:48irgendwo an der einen Seite deiner Software und irgendwo auf
- 24:50der anderen Seite deiner Software und du stellst
- 24:53vielleicht irgendwas um ne in deinem in deinem Single und
- 25:00denkst dir so in deinem Programmablauf.
- 25:02Ja erstmal komme ich da durch und dann würde ich zum Beispiel
- 25:06weiß nicht die und dieses Attribut beispielsweise auf den
- 25:10Wert. X stellen und dann funktioniert
- 25:12die Software mit dem Wert x und dann komme ich ja irgendwann an
- 25:15die andere Stelle meines Codes und da muss ich die den das
- 25:19Attribut aber auf Wert Y stellen, easy peasy gar kein
- 25:22Problem und schon läuft die Bude und ich muss aber nicht noch
- 25:26irgendwas anderes machen oder ich stell zum Beispiel dieses
- 25:29Attribut anhand von dem vorherigen Wert um oder sowas
- 25:32ne. Was auch immer, ne, also dass
- 25:34ich sozusagen nicht von x statisch auf Y schalte, sondern
- 25:37sage unter bestimmten Umständen, wenn es vorher x war, dann stell
- 25:40ich aber hier das auf Y um in meinem nächsten Programmablauf
- 25:43bedeutet aber, dass du in deinem Single irgendwo global etwas
- 25:47änderst, was du mit hundertprozentiger Sicherheit an
- 25:50einer anderen Stelle wieder vergisst.
- 25:52Dieser Wert wieder genutzt wird und irgendein Quatsch in einer
- 25:54Software passiert und du dir denkst, warum ist das gerade
- 25:58passiert? Das sind genau diese
- 25:59Abhängigkeiten, diese Verstecken, von denen du gerade
- 26:01geredet hast. Und das zu Debacken und
- 26:05hinterher zu schnallen, was da los ist.
- 26:06Wenn du vielleicht gerade nicht unbedingt verstanden hast, wie
- 26:10ich zum Beispiel damals, was so ein Singleton eigentlich macht
- 26:13oder wo man es vielleicht nicht verwenden sollte oder was
- 26:16vielleicht die Einschränkungen oder die Probleme damit sind,
- 26:19dann bist du ewig dabei, deinen Code zu debacken, weil du dir
- 26:22denkst, hä, was soll das ne, wo kommt das her, ja.
- 26:28Du hast halt. Also die Versuchung ist extrem
- 26:31groß, gerade am Anfang, wenn man mit dem Pattern arbeitet, halt
- 26:35diese globalen Zustände auszunutzen oder es als Verein,
- 26:38also es ist halt so easy Lunch am Anfang ne, weil du sagst, OK,
- 26:42ich kann jetzt schnell ne Lösung damit basteln, aber du
- 26:44untergräbst ja schon Prinzipien der Objektorientierung, also es
- 26:49ist. Sag ich mal.
- 26:51Globale Zustände gelten ja auch oft als Antipattern.
- 26:55Ja, also globale Variablen oder so, weil du halt damit in
- 26:57Teufels Küche kommst. Irgendwann.
- 26:59Und genauso kann es dir mit dem Singleton halt auch ergehen und
- 27:04n riesen unterschied, das muss ich auch einfach mal so sagen,
- 27:07früher wo ich das verwendet hab oder viel verwendet hab gerade
- 27:10so am Anfang sag ich mal zweites Semester oder so, wir haben ja
- 27:13viel am Anfang des Podcast über unsere Studienzeit erzählt, das
- 27:19ist einfach. Da war mir das egal.
- 27:22Die Abhängigkeiten, weil weil ich habe keine Tests
- 27:25geschrieben, ich wollte einfach nur irgendwie diese Aufgaben in
- 27:29den Programmierkursen lösen und einreichen.
- 27:32Ja und irgendwie Lösungen schaffen, aber ich habe mir
- 27:34überhaupt keine Gedanken darüber gemacht, ob das Abhängigkeiten
- 27:40hat, ob das Testbar und wartbar ist, weil das war sehr
- 27:43flüchtiger Code. Ja, du hast jede Woche deine
- 27:45Übungsaufgaben bekommen, du hast es gelöst und danach war das für
- 27:48dich gegessen das Thema. Und dementsprechend hat man auch
- 27:51leider sehr schnell die Versuchung gehabt, sich so nicht
- 27:54gerade Best Practices anzueignen.
- 27:56Ja, die du dann halt auch wieder loswerden muss und verstehen
- 27:58muss. Warum ist es denn eigentlich
- 28:01nicht gut und das kann man ja auch ganz einfach an Beispiel
- 28:06von Unit Test mal erklären. Ja, ich würde das jetzt mal kurz
- 28:08ein bisschen technischer machen, nehmen wir noch mal das Beispiel
- 28:12Logger, es ist ein Anwendungsfall, keine Frage,
- 28:16aber wenn ich jetzt wirklich testen möchte ob.
- 28:19Ob das mit meinem Logger klappt, also unter gewissen Umständen.
- 28:22Ich möchte jetzt wirklich auf Ebene testen, dass ein Log zum
- 28:25Beispiel geschrieben wird, ja und ich instanziiere den Logger
- 28:31und mache ein Log und gucke ob das da drin steht, zum Beispiel
- 28:33ich Speicher mir jetzt wirklich ganz ganz simpel ein ganz
- 28:36simpler Logger selbst geschrieben, ja und ich Speicher
- 28:38mir einfach eine Message in der Liste oder so ab ja und gucke
- 28:43dann ob die Liste jetzt einen Eintrag hat.
- 28:45So ja hat sie. OK.
- 28:47Test 1 ist grün. Ja ich wollt jetzt n Error
- 28:49loggen und der ist da drin so und in Test 2 sag ich log mir
- 28:54mal ne message ne normale Info hast du es genannt, ist ja auch
- 28:58so n gängiger Begriff ja als als log Level log mal ne Info ja ist
- 29:03drin aber die Länge der Liste ist 2 wieso?
- 29:07Ich habe ja nur ne Info gelockt ja aber da ist ja noch n Error
- 29:10drin so und dann denkst du ja. OK, warum ist da denn jetzt noch
- 29:15n Error drin? Und da kommst du halt je nach
- 29:18Test Framework und je nachdem wie du es aufbaust genau in
- 29:21diese Teufelsküche, weil du hast einfach die gleiche Instanz von
- 29:25deinem Logger und hast schon Test laufen lassen.
- 29:29Ja hast den Error gelockt, der Test war grün und der zweite
- 29:33Test sagt jetzt. Nee, aber die Länge ist nicht 1
- 29:37von deinen Blogs, die ist 2. Ja, das.
- 29:39Droht der Test, du. Kannst ja nicht in jedem in
- 29:41jedem Test n neues Objekt erstellen oder das irgendwie
- 29:44resetten, weil du hast es einmal.
- 29:45Also du hast halt keine Kontrolle mehr da drüber.
- 29:47Du hast keine Kontrolle mehr, du hast dich quasi selbst ja
- 29:50ausgeschlossen und jetzt fängst du an zu frickeln, irgendwie
- 29:53diesen Ausgangszustand wiederherzustellen, wenn du mit
- 29:56n Singleton arbeitest. Und das ist wirklich n Problem
- 29:59mit in Sachen Testbarkeit, vor allem der Witz.
- 30:03Und das ist das das Gemeine. Du schreibst diesen zweiten
- 30:06Test, lässt den alleine laufen, fährst die Testsuite hoch und
- 30:10der Test ist grün. Ein Log ist drin.
- 30:13Info alles perfekt. Ja gut, lass alle Tests laufen
- 30:16rot ja genau weißt du, du kriegst halt, du hast halt diese
- 30:20Abhängigkeiten die je nach Ausführung dann.
- 30:24Echt unterschiedliche Ergebnisse liefern und das ist natürlich in
- 30:27Sachen testen die absolute Hölle und da ist Single wirklich
- 30:30gefährlich und deswegen kann ich auch verstehen, dass es
- 30:32umstritten ist dabei. Ja, auf jeden Fall.
- 30:36Es ist ja auch, es ist ja auch nicht nur unbedingt, also es
- 30:38gibt ja auch n andere Beispiele, ne, also es ist es, es macht
- 30:42manchmal Sinn Single vielleicht zu verwenden, ne oder es ist
- 30:45durchaus möglich, ich finde immer ich ich finde das immer so
- 30:49schön, weil das hat einmal jemand gesagt in in in auch n
- 30:53sehr. Würde ich sagen.
- 30:54Begnadeter Coder, der Mal gesagt hat, du kannst alles machen,
- 30:59wenn du weißt, wie es geht, so weißt du und im Endeffekt würde
- 31:03ich mich auch hinstellen und sagen, OK, wenn du Herr oder
- 31:07Frau darüber bist, sozusagen ne n Single zu verwenden, dann ist
- 31:11es kein Problem, wenn du weißt was da los ist.
- 31:13Wenn du um wenn du verstanden hast was n Single ist, wenn du
- 31:16wenn wenn du dir dessen bewusst bist, dass du das jetzt wirklich
- 31:20tust und nicht einfach nur sagst, OK, ich hab gerade Single
- 31:23kennengelernt, los, los, los, los, ne, dann kannst du das
- 31:26machen, wenn du es verstanden hast und.
- 31:28Ne, das ist ja dann auch deine eigene, dein wie sagt man deine
- 31:32eigene Entscheidungsgewalt darüber?
- 31:34Ne, aber es gibt auch Beispiele wo es halt absolut gar keinen
- 31:37Sinn macht zum Beispiel ne also klar, Logger hat mir gesagt OK
- 31:40macht vielleicht Sinn, ist vielleicht an der Stelle nicht
- 31:43so gut testbar, was natürlich auch auf jeden Fall n sehr sehr
- 31:45wichtiger Punkt ist, weil testbarer Code ist natürlich
- 31:48guter Code, wenn man ihn nicht testen kann, ist natürlich
- 31:50schlecht, aber angenommen du hast zum Beispiel n Single der
- 31:54dir sagt OK ich hab jetzt zum Beispiel n User Session.
- 31:57Ne, also das Singleton nimmt n speichert ne User Session.
- 32:00Du denkst dir so ja ist doch ne geile sache, du hast doch eh
- 32:03immer nur einen User der gerade irgendwie aktiv ist und dann
- 32:05sozusagen du brauchst ja nicht mehr in deiner Session gerade
- 32:09ne, also angenommen du hast jetzt ne ne API ne und n Rest
- 32:13Call und jetzt kommt n Call rein und jetzt zum Beispiel hat
- 32:16irgendwie der erste Call ist zum Beispiel von Alice ne es wird
- 32:20alles abgearbeitet und Returned und Alice war in dieser Session
- 32:23gerade drin und dann kommt zum Beispiel n zweiter Call danach.
- 32:26Zum Beispiel ne vom Bob. So, und jetzt hast du das
- 32:31funktioniert soweit so gut, solange diese Calls jetzt nicht
- 32:34zeitgleich kommen, aber wenn die jetzt zum Beispiel zeitgleich
- 32:36kommen ne und du hast jetzt zum Beispiel Call 1, ne Alice ruft
- 32:39es auf Alice als oder die ganzen Infos über Alice werden in
- 32:43dieser Session gespeichert, jetzt kommt kurz danach weil es
- 32:46fast zeitgleich ist. Kommt ne ne Anfrage vom Bob ne?
- 32:50Das heißt, jetzt werden die Infos über Bob in der User
- 32:52Session gespeichert und dann wird aber quasi der Call von
- 32:55Alice Returnt. Bekommt aber alle Infos von Bob
- 32:58zurück. So und damit siehst du, dass du
- 33:00im Endeffekt quasi irgendwas änderst, was du aber in dem
- 33:03Moment eigentlich gar nicht ändern wolltest.
- 33:04So, obwohl es sich vielleicht erstmal schön anfühlt, weil du
- 33:06sagst, ja, da kann ich ja irgendwie global meine ganzen
- 33:09Daten drin speichern, so ne und das ist aber wieder blöd, ne?
- 33:13Das wäre jetzt mal das ist. Ja, das ist halt genau der
- 33:16Punkt. Also du musst halt irgendwie
- 33:18abstecken können und das macht nachher auch so ein bisschen die
- 33:21Erfahrung wie wie Wartbar und skalierbar muss meine Software
- 33:27am Ende sein, welche Änderungen können noch reinkommen, also wie
- 33:29überschaubar ist es diesen Anwendungsfall einzuschätzen und
- 33:33jetzt kann man natürlich sagen, ja lieber immer auf die
- 33:35skalierbare und wartbare Lösung setzen, wir wollen ja gleich
- 33:38noch eine kleine Alternative an teasern, so ne, weil ganz
- 33:41ausführlich werden wir es nicht besprechen können in einer
- 33:43Folge. Aber manchmal gibt es Fälle, wo
- 33:46es halt so wirklich kleine Softwarelösungen sind, wo du
- 33:48genau überblicken kannst, wie du meintest.
- 33:50Wenn man weiß, was man tut, wo das halt dann einfach auch Sinn
- 33:53macht. Ja, also auf diese Lösung zu
- 33:54gehen. Bestes Beispiel, Wir hatten ja
- 33:57vor kurzem mal so n ganz kleines Mini Beispiel Backend
- 34:00geschrieben und da gab es also ohne jetzt irgendwelche
- 34:03Frameworks zu verwenden ja also wirklich so so wirklich plain
- 34:08und. Dann mussten wir uns halt auch
- 34:10ne Art Mechanismus bauen um ne Art Service bereitzustellen.
- 34:14Ja und da haben wir dann einfach auch schnell n Singleton
- 34:18gemacht, so klar, wir konnten dann auch direkt zeigen was das
- 34:21Problem ist beim Testen. Ja, also das hat man dann auch
- 34:24direkt gespürt, konnte man lösen, aber man merkt halt immer
- 34:27wieder wo denn halt die die Nachteile sind und genauso kann
- 34:32man sagen es gibt ne andere Möglichkeit das umzusetzen ein
- 34:36ähnliches Verhalten. Und da möchte ich jetzt noch
- 34:38ganz kurz mit dir darauf eingehen, was so ne Alternative
- 34:42wäre und ich glaub da ist so n großes Stichwort, was auch
- 34:44schnell genannt wird, auch gerade von Kritikern gegenüber
- 34:47den Singleton Peppern is dependency Injection, magst du
- 34:51das vielleicht das Konzept dahinter mal kurz erklären?
- 34:55Kann ich machen. Ich würd es glaub ich auch nicht
- 34:57wirklich sehr vertiefen. Also wir können gerne auch noch
- 34:59mal ne eigene Folge über die Penency Injection machen, wenn
- 35:01ja gerne. Das ist nämlich super geiles
- 35:03Thema. Genau.
- 35:03Also wenn auch gerade wenn es euch interessiert, liebe zura
- 35:07Liebe zura, wenn du sagst, ey ist ne coole Sache, würd ich
- 35:09gern was drüber hören, dann sag uns auf jeden Fall mal Bescheid,
- 35:12dann können wir das auch, ein Scadulen sozusagen das Thema
- 35:18kurz gesagt ist die Penency Injection, ich glaub wir hatten
- 35:21das auch mal in irgendeiner Folge kurz angesprochen, ich bin
- 35:23mir nicht ganz sicher. Aber da geht es im Endeffekt
- 35:25darum, dass du beispielsweise, also du nimmst eine eine Instanz
- 35:32einer Klasse und injizierst sie in eine andere, was im Endeffekt
- 35:36im Code, sagen wir mal, nichts großartig anderes ist als
- 35:39beispielsweise ein Parameter, den du übergibst.
- 35:42Aber wenn du jetzt zum Beispiel sagst, du hast irgendwo in
- 35:45deiner Main, legst du dir eine Instanz eines Loggers an und
- 35:50kannst jetzt diese Instanz des Loggers einfach.
- 35:53Immer weiter sozusagen in deine Software rein injizieren
- 35:57sozusagen ne die Dependency diese Abhängigkeit rein injecten
- 36:00sozusagen in deine Software, das heißt du brauchst zum Beispiel
- 36:03von der Main irgendwann nen Service und dieser Service zum
- 36:05Beispiel der aufgerufen wird, der braucht n Logger und das
- 36:07heißt dieser Logger wird dann diesem Service übergeben.
- 36:11So das heißt kannst dann im Endeffekt rein theoretisch ne
- 36:15und das ist jetzt wieder das andere.
- 36:16Du kannst natürlich auch jedem Service ne eigene Instanz
- 36:19übergeben. Was du dann natürlich nicht
- 36:22machen solltest. An der Stelle.
- 36:23Frameworks haben sowas auch zum Beispiel so n bisschen
- 36:26eingebettet, dass das nicht unbedingt passieren kann.
- 36:29Ne, dass du sowas halt eben ist es komfortabel gemacht mit
- 36:34dieser dependence injection, dass du halt eben sagst, OK, ich
- 36:36möchte jetzt dieses eine Ding was ich mir da angelegt hab
- 36:38möchte ich jetzt nehmen, so fühlt sich mal n bisschen an wie
- 36:41n Singleton, dann aber ist es nicht.
- 36:43Und das ist halt das geile ne, dass große Frameworks.
- 36:47Genau, weil wir auch gerade Backend hatten.
- 36:49Ne, also sowas wie Spring Boot oder auch cater und so die Beat
- 36:52natürlich Packages und Lips sozusagen wo du genau das hast.
- 36:58Ne du hast das Gefühl von ich habe diese eine Instanz wieso n
- 37:01Singleton kaufst dir aber nicht die Nachteile ein, weil es halt
- 37:04über dependency Injection gelöst ist.
- 37:05Am Ende richtig. Das ist halt geil, genau, aber
- 37:07nichtsdestotrotz. Kleine Side Note brauchst da
- 37:11trotzdem ne ganz gute Architektur deiner Software,
- 37:13weil ansonsten kommst du nämlich auch schnell mal in diese
- 37:15Möglichkeit, dass du vielleicht dann doch noch mal ne neue
- 37:17Instanz erstellst. Also es ist, du bist nicht
- 37:20gewahrt davor neue Instanzen von so einem ne von den Objekten
- 37:23dann zu erstellen, also auch von Logger.
- 37:25Ne, du kannst mehrere erstellen, das das muss einem dann
- 37:28Bewusstsein, aber Fakt ist ist es ist ne Möglichkeit wenn du
- 37:32weißt wie gesagt wenn du weißt was du tust, dann kannst du es
- 37:34super machen und dann hast du eben auch gerade weil du die
- 37:37Testbarkeit angesprochen hast die Möglichkeit zu sagen ich
- 37:39teste. Es dir jetzt das ganze erstell
- 37:41mir n neuen Logger und entjekte den sozusagen in meine Funktion,
- 37:44in meinen Service, was auch immer ne, das heißt du kannst
- 37:47jetzt. Immer ne saubere Ausgangslage.
- 37:48Genau, und das ist halt natürlich der der Vorteil und im
- 37:52Normalfall würde ich so als Daumenregel auch sagen, man kann
- 37:56Single verwenden, wenn man weiß was es ist und wenn man weiß,
- 37:58was man tut, sollte man aber definitiv nicht überall und
- 38:01immer machen und gerne auch auf Dependency Injection auf
- 38:04ausweichen, was definitiv ne super mega Alternative ist.
- 38:09Aber auch da muss man wissen, was da passiert, ne?
- 38:12Ja, die Menge macht das Gift, oder wie sagt man so schön.
- 38:14Also wenn ich jetzt anfange, überall alles zu injekten, dann
- 38:18kriege ich halt auch unfassbar viele Abhängigkeiten rein und
- 38:20komme auch wieder in Teufelsküche am Ende.
- 38:22Man muss halt immer gucken, ja wie du schon meinst ne gute
- 38:26Architektur aufbauen, ne das da gibt es ja dann auch, es gibt ja
- 38:29auch Architektur Pattern und alles ne das sind wir ja heute
- 38:32nicht, aber. Ich mein nicht ohne Grund
- 38:34beschäftigen sich sehr viele und schlaue Leute sehr viel mit
- 38:37solchen Themen. Ne um einfach ne gute Software
- 38:39am Ende entwickeln zu können und Dependency Injection ist n
- 38:43cooles Prinzip und hat halt auch seine Tücken am Ende oder muss
- 38:47man halt auch aufpassen richtig klare klarer Disclaimer hier so.
- 38:52Genau. Und wir wollten das ja auch
- 38:53immer n bisschen einordnen, wie stark das zum Beispiel verwendet
- 38:55wird. Also Single gehört schon das
- 38:57Pattern zu einem bekannten Design Pattern.
- 39:00Also man stolpert eigentlich sofort darüber.
- 39:03Ja, also jetzt mal ohne Scheiß ne, ist doch eigentlich glaub
- 39:06ich das bekannteste und das erste was man so hört oder weil
- 39:10es halt auch ich, also ich weiß nicht irgendwie hab ich immer
- 39:12das Gefühl ist das erste worüber man stolpert, weil es halt so
- 39:16pro und contra hat, weil es halt auch n gutes Beispiel ist um
- 39:19direkt zu zeigen es ist nicht die absolute Wahrheit so ne
- 39:23Pattern zu verwenden, aber man muss immer wissen was vor und
- 39:26Nachteil ist und wann sie Sinn machen.
- 39:28Genau. Aber wie gesagt also.
- 39:30Es es ist es, ich würde sagen, in modernen
- 39:34Softwarearchitekturen wird es wird das Pattern Single eher
- 39:37sparsam eingesetzt, aber wie gesagt, nichtsdestotrotz ist es
- 39:43gut es zu kennen und ich würde es auf jeden Fall auch wenn man
- 39:46sich jetzt zum Beispiel gesagt hat, ey ich hab das noch nie
- 39:48programmiert, ich würde vorschlagen, dass man sich
- 39:52hinsetzt mal und sagt OK ich mach das mal, probier das mal.
- 39:56Und Versuche zum Beispiel erstmal einmal, dass es
- 39:59überhaupt funktioniert, ne, also beispielsweise also wirklich zu
- 40:05verifizieren, dass es dann am Ende auch wirklich nur eine
- 40:07Instanz gibt, ne und dann vielleicht auch mal zu gucken,
- 40:11OK, wie krieg ich es hin, dass. Ich so eine richtige Falle mir
- 40:16aufbauen kann in meinem Code mit so einem Single, weil klar kann
- 40:19man sich jetzt hinstellen und sagen, ja, wenn es jetzt nicht
- 40:21so verbreitet ist, gerade in modernen Softwarearchitekturen,
- 40:24warum soll ich es denn dann verwenden?
- 40:26Warum soll ich denn dann darüber wissen?
- 40:29Es hilft halt einfach manchmal um das große Ganze sozusagen
- 40:32besser zu verstehen und deswegen ist es auf jeden Fall hilfreich,
- 40:36sich das anzugucken und auch mal auszuprobieren.
- 40:40Ja. Eigentlich kann man genau das
- 40:42Loggerbeispiel, wie wir heute erklärt haben.
- 40:45Mal nachcoden ne, dass du jetzt sagst, OK, ich hab n logger, ich
- 40:48hab jetzt den das den Bedarf, dass es ihn nur einmal gibt,
- 40:52weil ich ja immer in den gleichen Speicher sozusagen
- 40:55loggen möchte. Ich code das wie du meintest
- 40:57einfach mal n Single und dann Leute schreibt ruhig mal n Test
- 41:00dazu und probiert das mal aus was denn beim Testen da die
- 41:03Probleme sind und. Dann sieht man einfach.
- 41:07Also dann hat man es wirklich mal erlebt.
- 41:08Weißt du und ich finde, man muss das auch mal erleben, diesen
- 41:11Pain dabei und dann hat man das glaube ich auch ganz cool
- 41:14verinnerlicht. Also es ist ne geile Übung, auf
- 41:16jeden Fall gut, dass du das angesprochen hast.
- 41:18Aber lass uns mal jetzt zum Abschluss der Folge noch mal
- 41:22kurz zusammenfassen. Also ich fang noch mal an
- 41:26Singleton, was ist das Pattern dahinter, also das Singleton
- 41:30Design Pattern stellt sicher, dass es genau eine Instanz einer
- 41:34Klasse gibt. Und dass quasi diese Instanz von
- 41:38überall erreichbar ist. Ja, also ich kann halt nur eine
- 41:41Instanz erzeugen und sie von überall verwenden.
- 41:44Das ist erstmal das Petter tipptopp genau, also wir hatten
- 41:50ja schon gesagt, das ist super für so Dinge, die man vielleicht
- 41:54zentral steuern möchte, auch mit Bedacht natürlich, wie zum
- 41:56Beispiel sowas wie n Logger oder was wir jetzt schon paar Mal
- 42:00genannt haben oder vielleicht auch sowas wie ne bestimmte Art
- 42:02von Konfiguration. Threadpools oder zum Beispiel
- 42:07Caches oder sowas in die Richtung ne ist aber kann aber
- 42:10durchaus wie gesagt gefährlich werden, wenn es halt zu globalen
- 42:12Zuständen kommt. Und es ist natürlich auch
- 42:17ratsam, vielleicht gerade wenn es jetzt um die Testbarkeit
- 42:21geht, muss man mal gucken, da eignen sich.
- 42:26Solche Singletons nicht so gut hattest du ja auch ein super
- 42:29Beispiel geben Kino und wenn man da jetzt vielleicht auch mal in
- 42:32Teufels Küche kommt und sich denkt, verdammt, was habe ich
- 42:35hier nur gemacht, wieso kann ich das nicht testen, einfach mal
- 42:39probieren das Ganze mit dem Dependency Injection umzusetzen,
- 42:42vielleicht flutscht es dann besser.
- 42:43Ja, und falls ihr da eine eigene Folge zu wollt, dann schreibt
- 42:46uns gerne, dann machen wir das sehr gerne, weil es wirklich ein
- 42:49cooles Thema ist. Auch ein sehr lehrreiches Thema
- 42:51ist und ein cooles Prinzip dahinter.
- 42:54Ja, ansonsten, liebe Zuhörerinnen, liebe Zuhörer,
- 42:57stellt sich uns natürlich jetzt die Frage, hast du schon mal mit
- 42:59dem Singleton Pattern gearbeitet?
- 43:01Hast du positive oder negative Erfahrungen damit gemacht, wann
- 43:04hat es dir vielleicht auch mal wirklich geholfen?
- 43:07Teile gerne deine Erfahrung mit uns, dann können wir sie auch,
- 43:10wenn du möchtest natürlich gerne mal in einer nächsten Folge mal
- 43:14vorstellen oder wenn du ergänzende Infos dazu hast, dann
- 43:16immer raus damit. Wir sind eine große Community
- 43:19und helfen uns gegenseitig. Und ansonsten schau auch gerne
- 43:23mal in die Show Notes. Gerade wenn du unsere anderen
- 43:26Plattformen kennenlernen möchtest.
- 43:27Du findest auch einen kleinen Spenden Link, falls du uns
- 43:29unterstützen möchtest. Das würde uns mega freuen.
- 43:33Bewerte diesen Podcast, wenn Dir die Folge gefallen hat, wie
- 43:35gesagt Abonnier die Glocke oder da drauf drücken was war wie
- 43:38weiter empfiehlt gerne den Podcast weiter, das würde uns
- 43:42mega mega freuen und ansonsten würde ich sagen hören uns alle
- 43:45beim nächsten Mal wieder und bis dahin habt eine gute Zeit.
- 43:50Ciao, ciao, deine Kunden bei dies.
- 43:52Gemeinsam besser.