Latest / Coding Buddies | Tech & Dev-Mindset / #127 Dependency Injection - Das unterscheidet Juniors von Pros
Transcript
- 0:00Ich zum Beispiel jetzt einfach immer meinen Kaffee schwarz
- 0:02trinke. Du bist ja so ein Milchtrinker,
- 0:05aber ich sehr. Irgendwie ne Beleidigung mach.
- 0:09Das weiß ich so nicht. Nein, nein, nein, obwohl ich
- 0:11trotzdem. Milch trinke selber Milch,
- 0:14trinke Coding Buddies, Dein Podcast rund um
- 0:18Softwareentwicklung und aktueller Tech News.
- 0:20Herzlich Willkommen. Halli Hallo und herzlich
- 0:35Willkommen zur neuen Folge des Cody Buddies Podcasts.
- 0:37Schön, dass du wieder eingeschaltet hast, deine
- 0:39Gastgeber und wie soll es anders sein, meine Wenigkeit, der Tino
- 0:43und der fantastische Fabi, der mir hier schon wieder virtuell
- 0:46gegenüber sitzt. Fabi, ich begrüße Dich zur neuen
- 0:49Folge. Was geht ab?
- 0:50Tino, Tino, Wie geht's, wie steht's?
- 0:53Danke für alles, super für die nette Anmoderation mal wieder du
- 0:59schmeichelst. Ja, also man braucht jetzt so
- 1:02ein paar Konstanten. Weißt du so, wenn schon immer
- 1:04ein anderes Thema in der Podcast Folge, dann sollte ich zumindest
- 1:07die Anmoderation gleich machen. So ein Wiedererkennungswert
- 1:10weißt du, man muss dazu sagen. Du machst es ja aber so, dass
- 1:13also du machst es ja auch immer ne, es ist ja nicht so, als
- 1:16würde man das irgendwie so. Weißt du so vom irgendwie von
- 1:19der Platte einspielen, das ist ja immer wieder live neu
- 1:23performt. Nein, also treue Zuhörerinnen
- 1:27und Zuhörer merken, dass ich es immer ein bisschen anders
- 1:29betone. Also es gibt da schon
- 1:32Variationen, aber geht's dir gut, Tino Jo alles ist alles fit
- 1:38bei mir, soweit der Stress nimmt so langsam ein bisschen ab sag
- 1:43ich mal so die Sommerzeit, diese stressige hat man ja so gesagt,
- 1:47also Stress in Anführungszeichen ist natürlich schön, immer was
- 1:50los, ist aber auch schön wenn immer wieder so ein bisschen
- 1:52mehr Ruhe einkehrt und wie sieht's bei dir aus, Jo Jo?
- 1:55Ich will mich nicht beklagen. Das ist gut.
- 1:59Klar, das. Ist gut, das ist n gutes
- 2:01Zeichen. Aber bevor wir heute richtig
- 2:04loslegen, weil wir haben heute n cooles Thema, denn das ist n
- 2:06Community Thema was ich gewünscht wurde wo wir heute
- 2:09drauf eingehen wollen, möchte ich vorher mich aber noch beim
- 2:14Oliver bedanken für die Podcast Spende Oliver Herzlichen Dank
- 2:18Wir haben uns mega gefreut vielen vielen vielen Dank dafür
- 2:20aber das das er hat uns sehr vielen Dank.
- 2:23Und er hat uns auch mit so tollen Attributen.
- 2:27Belegt, wie cool und immer bestens gelaunt.
- 2:29Also das ist schön, das freut uns natürlich vielen, vielen
- 2:34Dank auch dafür, das ja hat auf jeden Fall ein Schmunzeln, ein
- 2:40Lächeln in unser Gesicht gezaubert.
- 2:41Direkt wieder gute Laune, ne Fabi.
- 2:44Auf jeden Fall. Ja, ansonsten liebe zuhören,
- 2:46Liebe zuhören. Falls du auch dir denkst,
- 2:48Mensch, cooler Podcast. Die Jungs möchte ich
- 2:50unterstützen in ihrem Vorhaben, aber.
- 2:52Das freut uns dann sehr, wenn das dein Vorhaben ist.
- 2:54Den Link dazu findest du, wie man den Shownotes dann schon mal
- 2:56vielen Dank für den Support. Ja, vielen Dank und auch vielen
- 2:59Dank an den ganzen Support, den wir bisher schon bekommen haben
- 3:02und dann möcht ich auch noch mal quasi so allgemein da draußen
- 3:05bei. Sein, der hab ich.
- 3:07Richtig toll. Vielen vielen dank Tino das
- 3:10Thema. Du hast ja gesagt wo du sich
- 3:11gewünscht, es geht um Dependency Injection heute ja.
- 3:18Quasi ein ein, ich sag mal, ein Thema, wo man in der
- 3:21Softwareentwicklung gar nicht drumherum kommt.
- 3:22Ja, wir hatten es. Ja, so n bisschen angerissen bei
- 3:25unserer Design Pattern Folge zum Thema Singleton, weil wir gesagt
- 3:30haben OK, Singleton hat ja einfach definitiv Nachteile die
- 3:34es mit sich bringt und dass da oftmals dependency Injection der
- 3:40bessere Weg ist, den man da gehen kann.
- 3:42Ja. Und hatten ihr Angebot.
- 3:44Nee, wenn ihr Bock habt zu dem Thema machen wir ne Folge.
- 3:47Und genau das kam auch. Also vielen Dank für die
- 3:50Nachrichten und hier ist die Folge.
- 3:53Genau sie ist sie lebt. Und Dependency injection ich,
- 3:59ich glaube, manche würden wahrscheinlich sagen, das ist
- 4:01ein Thema für für Anfänger, sozusagen ich, ich weiß es gar,
- 4:07ich kann es gar nicht richtig sagen, weil ich glaube, ich bin
- 4:10damit nicht sofort. Beim Start in der
- 4:15Softwareentwicklung mit konfrontiert gewesen, aber ich
- 4:18weiß nicht wie das heutzutage ist.
- 4:20Wie gesagt, war ja bei uns auch ein bisschen Holprigatino, von
- 4:23daher kann es ja vielleicht sein, dass andere da generell
- 4:26ein bisschen schneller sind, auch so vom vom von der
- 4:29Lernkurve her. Aber die Penancy Injection an
- 4:32sich ist ja auch eine Art Entwurfsmuster, könnte man es
- 4:35nennen. Es ist aber unabhängig jetzt von
- 4:37unserer Design Pattern Reihe was wir die wir gemacht haben, weil
- 4:39es sozusagen nicht unter diese Design Pattern nicht in diese
- 4:42Sparte, sage ich jetzt mal mit reinfällt genau und es geht im
- 4:48Endeffekt darum, dass wenn du wir sind, aber trotzdem in der
- 4:52Objektorientierung unterwegs, das heißt wenn du Objekte hast,
- 4:57dann. Haben mehr Objekte oder Klassen,
- 5:00sag ich jetzt mal. Haben ja meistens irgendwie
- 5:01Abhängigkeiten zu anderen Teilen aus der Software, die du
- 5:05schreibst. Und diese Abhängigkeiten kann
- 5:08man auf verschiedene Art und weisen eben irgendwie im Objekt,
- 5:13ich sag mal verankern oder mitgeben und bei Dependency
- 5:16Injection ist es ja, wie der Name schon sagt, dass diese
- 5:18Abhängigkeit, also diese dependency halt eben injiziert
- 5:22wird, ne also injected wird. Ja.
- 5:25Da hast du ja schon 2 gute Wörter gesagt.
- 5:27Einmal dieses mitgeben oder verankern, das trifft es ja
- 5:30schon ganz gut, weil diese beiden Möglichkeiten habe ich ja
- 5:32im Prinzip, wie ich Abhängigkeiten definieren kann.
- 5:36In meiner Klasse entweder ich veranker es wie du es so schön
- 5:39meintest, dass es halt hart da drin gekapselt ist, sozusagen ne
- 5:44und n fester Bestandteil ist innerhalb meiner Klasse oder
- 5:47mitgeben ist das schöne Wort, wenn ich sage ey du brauchst das
- 5:50und das zukünftig für deine Aufgaben hier, nimm mal so weißt
- 5:54du ich geb dir das jetzt mal mit arbeite damit, mach das Beste
- 5:58draus. Ich stell mir das immer so.
- 6:00Weißt du, wenn du so. Das Real Life ne so hast ohne
- 6:05Dependency Injection, dann ist das ungefähr so.
- 6:08Du kannst dir das ungefähr vorstellen, so angenommen guck
- 6:10mal das das machen wir beide, wir stehen morgens aufgehen zur
- 6:12Kaffeemaschine und ziehen uns n Kaffee so ich hab damit weniger
- 6:16n Problem weil ich zum Beispiel jetzt einfach immer meinen
- 6:19Kaffee schwarz trinke, du bist ja so milchtrinker aber ich hab
- 6:22sehr. Irgendwie ne Beleidigung
- 6:24gemacht. Das weiß ich so nicht.
- 6:27Nein, nein, nein, obwohl ich trotzdem Milch trinke.
- 6:31Selber milch. Trinker mit Milch, Trinker ja
- 6:36ne, also alles gut, keine Beleidigung, nur n kleiner
- 6:40Angriff, dass man Kaffee nicht mehr Milch trinkt Spaß, aber
- 6:43stell dir vor du hast so ne Kaffeemaschine und willst dir so
- 6:45nen schönen Cappuccino machen ne und du sagst ja OK ich will den
- 6:47jetzt mit Kuhmilch und dann. Sagst du aber morgen, also am
- 6:53nächsten Tag sagst du ey ich will den aber jetzt mit
- 6:55hafermilch ne und wenn du jetzt keine Dependency Injection
- 6:58hättest bei deiner Kaffeemaschine ne, dann wäre es
- 7:01so, dass du theoretisch 2 Kaffeemaschinen bräuchtest,
- 7:03nämlich einmal ne Kaffeemaschine mit Milch, ne, also mit Kuhmilch
- 7:06und eine mit Hafermilch so und im im im absoluten Worst Case
- 7:11müsstest du dir, wenn die Milch alles ne neue Kaffeemaschine
- 7:13kaufen oder weil sie dich du kennst ja wahrscheinlich auch
- 7:18noch die guten alten CD Player von damals.
- 7:21Ja, also absolut war ne geile Zeit mit Anti Schock, die man
- 7:26sogar in ne Hosentasche stecken konnte.
- 7:28Na ja gut, die waren krass, die waren krass.
- 7:29War richtig krass, aber auch da wäre es da da als also so diese
- 7:34Analogie oder der Vergleich, dass du halt für jede CD, ja die
- 7:37du irgendwie hören willst, wieder einen eigenen CD Player
- 7:40bräuchtest, weil du halt einfach die CD wird da reingebaut, die
- 7:43kannst du nicht wechseln, ne ja das ist sozusagen das wäre die
- 7:48Situation. Und jetzt kannst du dich
- 7:50natürlich hinstellen und sagen, ja, Fabi, das sind aber ganz
- 7:52schön realitätsferne Beispiele und ich würd sagen, Sie sind
- 7:56auch aus gutem Grund sehr realitätsfern.
- 7:59Weil man es so einfach nicht machen würde.
- 8:02Ja, ist richtig, man kann sich das auch so vorstellen.
- 8:09Das ist gar nicht so realitätsfern, wenn du dir
- 8:12einfach mal aktuelle Smartphones anguckst und du zum Beispiel
- 8:15sagst, ist der Akku fest verbaut oder kann ich n Akku
- 8:18austauschen? Wäre ja auch mal so ein so ein
- 8:20Gedankenspiel, weil dependency Injection nach dem Prinzip
- 8:25müsste ich ja sagen okay ich habe ein Handy und ich gebe ein
- 8:28Akku dazu und den verwende ich für dieses Handy, damit es
- 8:32läuft, wenn er fest verbaut ist. Dann habe ich nämlich genau
- 8:34dieses verankert, was du meintest.
- 8:36Das heißt der Akku ist fester Bestandteil des Handys und ich
- 8:42kann ihn halt nicht wechseln, sondern der da drin ist.
- 8:45Ist der Akku des Handys und wenn der kaputt geht habe ich ein
- 8:47Problem. Also jetzt für den Line ne.
- 8:50Natürlich kann ich das Handy aufmachen und den Akku tauschen,
- 8:52aber es ist nicht mehr wie früher unsere gute alte Nokia
- 8:553310 Zeit wo du hinten mal die Schale abgemacht hast die
- 8:58sowieso ständig abgefallen ist und du den Akku einfach
- 9:01rausnehmen konntest. Ne das wär so auch der
- 9:04Unterschied und ich find halt diese Analogien und Beispiele
- 9:07immer sehr gut, deswegen gefallen mir deine auch sehr gut
- 9:10mit dem CD Player, zum Beispiel weil man daran einfach erkennt,
- 9:13dass du ja Konzepte auch versuchst.
- 9:15Zu übernehmen sozusagen auch in der Softwareentwicklung, ja.
- 9:18Vor allen Dingen auch so was das Konzept.
- 9:20Bewährt hat so ja. Genau, ja, auf jeden Fall.
- 9:24Aber also deswegen ist halt ne das was du meintest.
- 9:27Du kannst es halt von außen reingeben, ne bei einem CD
- 9:30Player wie man ihn kennt nimmst du halt ne CD, Pack sie rein wie
- 9:33zum Beispiel auch den Akku den man dann vielleicht wechseln
- 9:35kann. Du kannst die CD wechseln, du
- 9:36kannst vielleicht einfach bei einer normalen Kaffeemaschine
- 9:39sag ich jetzt mal die halt eben auch Cappuccino Fisch ist ist
- 9:41meine übrigens nicht. Die mag ich nicht, aber komisch
- 9:46so als Milchtrinker. Ja, schon n bisschen, der aber
- 9:53auf jeden Fall. Kannst du da theoretisch.
- 9:56Eigentlich brauchst du ja nur irgendwie, sag ich jetzt mal ne
- 9:58Art so Schlauch, wo du dann halt dir die Milch anzapfen kannst.
- 10:01Wo du also egal ist, welche Art von Milch dann am Ende
- 10:04reinkommt, ne und das ist halt im Endeffekt so das Prinzip von
- 10:08Dependency Injection, dass man einfach sagen kann, OK, du hast
- 10:10halt eben dein Objekt ne und kannst eben diese Abhängigkeiten
- 10:14zu etwas anderem was du brauchst für dein Objekt, was da drin
- 10:18verwendet wird eben von außen reingeben und das ist halt.
- 10:24Also die Penancy Injection an sich.
- 10:26Ich fand das ganz interessant, weil mich hat das am Anfang
- 10:29total verwirrt irgendwann als ich damit mal in so ne Berührung
- 10:31gekommen bin, hatte mal n Alter ist wirklich schon länger her,
- 10:35Kollege irgendwann mal gesagt ja hier inversion of control ne und
- 10:38ich dachte mir so oh Gott ey was ist das jetzt schon wieder ne
- 10:41klingt. Krass.
- 10:42Das ist richtig krass, aber Inversion of Control ist ja
- 10:46eigentlich auch nur wie sagt man, also ist das ist das
- 10:49Prinzip und die Penancy Injection ist eine Verwendung
- 10:53des Prinzips, kann man das so sagen?
- 10:55Umsetzung. Ja, und im Endeffekt ist es ja
- 10:58nichts anderes, ne. Ja, was dabei ganz witzig ist,
- 11:02weil es ja auch es vielleicht auch dem einen oder anderen Mal
- 11:06begegnet, dass es so n bisschen das Hollywood Prinzip ist.
- 11:10Nach dem Leitsatz Don't Call US, We will Call you.
- 11:14Das find ich auch sehr witzig. Weil das genau das
- 11:18widerspiegelt. So ne.
- 11:19Also du musst jetzt nicht da anrufen, sondern die melden sich
- 11:22bei dir. Die Infos werden schon zu dir
- 11:24kommen, dann wenn es soweit ist sollte es soweit sein.
- 11:30Genau also Inversion of Control die Kontrolle umkehren ja genau,
- 11:35ich find das klingt immer super crazy, weil ich mich genau immer
- 11:38gefragt hab, also dieses. Ich find, das ist so abstrakt.
- 11:41Weißt du, du sagst OK, du kehrst die Kontrolle um und ich hab
- 11:44mich immer ganz am Anfang hab ich mich immer so gefragt, was
- 11:47soll denn das heißen, die Kontrolle umkehren, das klingt
- 11:50irgendwie so weißt du, du bist dann so irgendwie in nem
- 11:52Programmflussdenken und denkst dann so fließt das jetzt in die
- 11:55andere Richtung zurück oder was also was heißt Kontrolle
- 11:58umkehren weißt du also ich ich weiß nicht ob ob das für dich
- 12:01auch mal so n Verständnisproblem war einfach nur von diesem.
- 12:05Von von diesem Naming her weißt du, weil es heißt ja einfach,
- 12:08Kontrolle. Hattest du da mal n Problem mit
- 12:10ich? Also ich fand es immer sehr sehr
- 12:11komisch das zu greifen. Na, ich hatte am Anfang oft das
- 12:18Problem damit, dass ich mich mal gefragt hab, warum das Ganze,
- 12:21also warum Kontrolle umkehren, weil irgendwie macht es doch
- 12:25Sinn das Ganze zu Kapseln. So ne.
- 12:27Also ich hab jetzt n Objekt und das braucht n anderes Objekt um
- 12:30davon Funktionen aufzurufen beispielsweise ja.
- 12:33Dann war es für mich früher immer so.
- 12:34Ja, warum soll ich das jetzt irgendwie von draußen reingeben?
- 12:36Ich brauch das ja nur in diesem Objekt, da sozusagen ne, also
- 12:39das hat jetzt ne Instanz davon und ich möchte mit der Instanz
- 12:42von dem Objekt B nenn ich es mal auch wirklich nur in Objekt
- 12:46arbeiten damit also es soll jetzt nicht noch ne andere
- 12:48kriegen und hab halt immer nicht den Vorteil da dran gesehen
- 12:51warum ich das jetzt von außen reingeben sollte wenn ich es
- 12:54doch so schön kapseln kann, darum muss ich mir von außen gar
- 12:56keine Gedanken machen, der hat dann einfach sein Objekt b da
- 12:59drin. Und das geht halt auch so in die
- 13:02Richtung was du meintest mit diesem sich das vorstellen zu
- 13:05können. Was ist jetzt das Inverse dabei
- 13:08und was bringt mir das Ganze? Ja, also im Endeffekt ist es ja,
- 13:13also ich, ich konnte es mir irgendwann so vorstellen,
- 13:15zumindest, dass ich mir gesagt hab, OK, es ist nicht so, dass
- 13:20das Objekt jetzt sich sozusagen das holt, was es braucht, ne
- 13:24also beziehungsweise. Das Objekt in sich selber wie du
- 13:27meintest hast du hast nur dort diese Abhängigkeit innerhalb des
- 13:31Objektes, das heißt, das Objekt kann sich das einfach holen was
- 13:34es braucht, weil es das schon hat, weil es darauf Zugriff hat,
- 13:37sondern es bekommt es sozusagen geliefert, also das was es
- 13:41braucht bekommt es halt eben geliefert und das ist halt
- 13:44sozusagen diese, diese diese das umkehren der Kontrolle.
- 13:48Weil das Objekt nicht mehr selber die Kontrolle hat und
- 13:51sagen kann, OK, ich weiß, was ich also was ich habe, also zum
- 13:54Beispiel der CD Player, sagt Ey, das ist meine CD, nur ich krieg
- 13:58die sondern. Es hat halt eben nicht mehr
- 13:59diese Kontrolle, sondern muss darauf warten, dass eben etwas
- 14:03anderes, nämlich der Mensch, dann am Ende die entsprechende
- 14:06CD einlegt, um zu sagen, OK, jetzt kriegst du diese CD.
- 14:09Ne, das heißt diese diese Abhängigkeit wird von außen von
- 14:13was anderem kontrolliert und nicht von dem Objekt selber und
- 14:17das war für mich dann irgendwann so der OK, das meinen die mit
- 14:20Kontrolle umdrehen, weil irgendwie dachte ich immer so,
- 14:22weil am Ende weißt du ich, ich hab manchmal glaub ich so n
- 14:25richtig verquerten. Sachverstand, der sich irgendwie
- 14:28Sachen komisch vorstellt. Und ich dachte halt immer so hä,
- 14:31das Objekt macht doch trotzdem noch die Sachen, weißt du also
- 14:34das Objekt hat doch trotzdem noch die Kontrolle, weil es ja
- 14:37trotzdem irgendwie am Ende die entsprechenden Funktionen und so
- 14:40aufrufen. Ja, und genau das war halt auch
- 14:43das Thema am Anfang bei mir, wo ich mir dann dachte, warum baue
- 14:47ich das ganze ne, aber im Prinzip ich lös die
- 14:50Abhängigkeiten auf, ja. Hab aber jetzt die Verantwortung
- 14:54von draußen und das war immer so.
- 14:55Auch mein Klemmer ne so, ja du kriegst das jetzt übergeben.
- 14:58OK das Objekt selbst macht sich jetzt keine Gedanken mehr wie
- 15:00das Objekt aussieht, was von draußen reinkommt, es verwendet
- 15:03das einfach nur, also hab ich diese Abhängigkeit irgendwo
- 15:05aufgelöst. Hab ja aber das Problem, dass
- 15:07ich jetzt draußen darüber entscheiden muss und da dachte
- 15:10ich mir anfangs dann halt immer so ja, aber warum macht es denn
- 15:12nicht Sinn das zu Kapseln? Und dann hab ich so ne
- 15:15geschlossene Einheit weißt du wo alles safe ist so.
- 15:20Ich kann diesen Gedankengang auch heute noch nachvollziehen,
- 15:23allerdings gibt es viele Faktoren, die genau dann für
- 15:25Dependency Injection sprechen und ich finde was also wenn man
- 15:28sich überlegen möchte, was das Ganze bringt, können wir ja mal
- 15:32n kleines Beispiel machen um das relativ schnell zu
- 15:34verdeutlichen, weil ich glaube wir hatten in der Singleton
- 15:37Folge gerade in Bezug auf Testbarkeit drüber gesprochen,
- 15:42warum da dependency Injection gut wäre.
- 15:45Das wär jetzt so ein Punkt, der ganz klar dafür spricht, halt
- 15:48ja. Aber lass uns mal ein Beispiel
- 15:51machen. Wir haben ja ganz oft
- 15:56essensbeispiele bei uns gehen wir mal so ein bisschen in die
- 16:02Richtung, aber da damit es nicht langweilig wird, nicht direkt
- 16:05auf die Essensherstellung wie sonst, sondern lass uns mal über
- 16:08so eine Art Lieferservice sprechen und stell dir vor, du
- 16:12hast so einen Orderservice, worüber du bestellen kannst und
- 16:18jetzt möchtest du darüber bestellen und was beinhaltet so
- 16:23ne Bestellung? Du hast einerseits n Payment ja,
- 16:25also dass du sagst ich möchte das halt auch gleich bezahlen
- 16:28wenn ich bestelle also der Kunde möchte das gleich bezahlen und
- 16:31ich als Anbieter möchte gewährleisten, dass er das auch
- 16:34bezahlen kann und hab natürlich auch sag ich mal ne Art
- 16:38Shipping. Ja also beispielsweise.
- 16:42Er muss angeben, wo er wohnt. Wohin muss das geliefert werden
- 16:46und so weiter wenn es jetzt so um Essensbestellung geht, ja und
- 16:50angenommen ja gut, finanziere das angenommen ich implementiere
- 16:55das jetzt ohne Dependency Injection, das heißt ich hab
- 16:59jetzt n Order Service und wenn ich den Anlege.
- 17:05Instanziiert er für sich selbst einen Shipping Service und
- 17:08Payment Service und den braucht er ja, er braucht diese beiden
- 17:11Services um seine Aufgabe vollenden zu können und da sieht
- 17:16man jetzt vielleicht schon oder kann man sich schon denken, so
- 17:18okay jetzt entscheidet der Order Service selbst da drüber wie
- 17:24bezahlt wird und wie ausgeliefert wird, das muss er
- 17:28ja jetzt für sich ohne Wissen von außen festlegen.
- 17:32Ja, wenn ich keine Dependency Injection hab, so dann sagt er
- 17:36zum Beispiel weiß nicht bezahlen Paypal Guthaben viele vielleicht
- 17:42nicht alle, wir machen Kreditkarte, wir machen jetzt
- 17:45einfach Kreditkarte, jetzt Visa, ja und das ist jetzt eingestellt
- 17:49und Versand ja keine Ahnung essensbestellung wir haben wir
- 17:56schicken den mit Fahrrad los so der fährt immer mit Fahrrad.
- 18:00So, das ist jetzt so. Unser Shipping Service ist n
- 18:03Mitarbeiter auf dem Weg weißt du glaub ich ne ja so heißt das
- 18:06glaub ich so heißen die hier ja schön Rucksack hinten drauf, da
- 18:10ist die Pizza drin und los geht es so das heißt du hast ne sehr
- 18:14sehr enge Kopplung, weil das ist jetzt dein Order Service jetzt
- 18:18bestellen die Leute und können nicht wählen wie Sie bezahlen
- 18:22wollen wie es geliefert werden soll, die geben jetzt so ihre
- 18:25Daten ein ich wohne da und da und bestellen.
- 18:28Ja, so, für viele mag das jetzt gut gehen, ne Fahrrad, ja wie
- 18:31weit? 5 Straßen weiter kein Thema Fahr
- 18:33ich hin jetzt bestellt aber einer der im Nachbarort wohnt
- 18:37weißt du und 10 Kilometer bergauf mit dem Fahrrad nervig.
- 18:42Da wird das. Abendbrot Schneidig genau so,
- 18:47aber du kannst es nicht ändern, weil das ja so eng gekoppelt
- 18:49ist. Ja, also der Orderservice hat
- 18:51sich jetzt nur mal so aufgebaut. Doof.
- 18:53Schwierig. Sehr schwierig und da denk ich
- 18:57merkt man schon so. Na, wär schon cool, wenn ich
- 19:00vielleicht das von außen so n bisschen reingeben könnte.
- 19:03Ja und entscheiden kann mit meinen, mit meiner Außenwelt,
- 19:07mit meinen Infos von draußen, was den Service an sich ja nicht
- 19:10interessiert, der will eigentlich nur wissen, ich
- 19:14möchte also was für n shipment Service hab ich wo ihm das
- 19:17vielleicht noch nicht mal richtig wichtig ist.
- 19:18Was das für einer ist im besten Falle, sondern er möchte einfach
- 19:22n Service haben womit bezahlt werden kann, also nicht shipment
- 19:25geliefert werden kann und payment bezahlt werden kann.
- 19:28Und von außen möchte er einfach nur vorgegeben oder mitgegeben
- 19:31bekommen, was das für einer ist. Weißt du ja ja klar genau, also
- 19:35im Endeffekt, du hast ja schon gesagt, du bist ja viel
- 19:38flexibler dadurch ne, also du hast ja ne viel viel höhere
- 19:40Flexibilität, einfach allein dadurch, weil du ja zum Beispiel
- 19:43sagen kannst, Pass auf, ich möchte jetzt, ich hab zum
- 19:47Beispiel keine Visa Karte, ich möchte das mit Paypal oder so
- 19:49bezahlen, ne oder keine Ahnung, vielleicht geht es auch darum,
- 19:52dass du das vielleicht auch der. Der Lieferservice selber zum
- 19:59Beispiel gucken kann also nicht, dass du das selbst entscheidest.
- 20:02Das ist ja immer die Frage, von wo sozusagen diese Entscheidung
- 20:04kommt, was jetzt injected wird, sag ich jetzt mal.
- 20:07Aber vielleicht sagt der Lieferservice selber, guck mal
- 20:09absurd, so viel Kilometer müssen wir das Auto nehmen und nicht
- 20:11mehr das Fahrrad oder keine Ahnung, vielleicht gibt es ja
- 20:13verschiedene Lieferservices, beispielsweise die.
- 20:17Irgendwie an also die sagen, OK, ich würde das liefern, ne und
- 20:20der eine sagt ich brauch 3 Stunden weil die Halt nur
- 20:23Fahrräder haben und der andere braucht halt 10 Minuten, weil
- 20:26sie halt eben auch Autos haben oder Roller oder frag mich nicht
- 20:29ne also wird im Endeffekt einfach flexibel in der Software
- 20:32gesagt OK pass auf wir wir können das, wir können wir wir
- 20:35haben überhaupt diese Möglichkeit die diese Auswahl
- 20:40oder dieses dieses Dynamische ja auswählen von Zahlungen und
- 20:46Lieferungen ne. Und du bist natürlich auch super
- 20:49gut dabei, dass du auch alles natürlich deutlich einfacher
- 20:54erweitern kannst. Am Ende ne, weil also nicht nur
- 20:58die Flexibilität, sondern auch die Erweiterung deiner Software.
- 21:01Wenn du sagst okay du möchtest jetzt zum Beispiel noch einen
- 21:03neuen Zahlservice beispielsweise einführen, weil du sagst ja,
- 21:06paypal, Visa ist irgendwie blöd, vielleicht noch mastercard oder
- 21:09keine, ich weiß gar nicht, was es da noch alles gibt.
- 21:12Aber dass du halt irgendwie noch ne mögliche oder klarer hast.
- 21:14Du glaub ich auch sowas. Ne was irgendwie.
- 21:16Ja, das ist so n Ding. Heutzutage, das ist so n Ding.
- 21:18Klarer ist so n Ding. Kannst du eigentlich essen, auch
- 21:21auf Raten bezahlen? Ich weiß es nicht.
- 21:24Du. Kriegst aber auch nur so n
- 21:25Sechstel geliefert. Ja einmal 30€ oder jeden Tag im
- 21:29Monat einen Euro genau, aber das war halt ein Stück Pizza genau
- 21:34und da kannst du halt einfach relativ schnell eben deine
- 21:37Software erweitern, weil du halt noch NN weiteren
- 21:38Zahlungsanbieter hast, den Du dann auswählen kannst, den du
- 21:42dann im Endeffekt nutzen kannst. Und der Orderservice will ja
- 21:45nicht nichts anderes wissen als zu sagen, OK, wie du schon
- 21:48meintest, du brauchst irgendwie n Payment Service.
- 21:50Der irgendwie Pay machen kann, also der will ja nichts wissen,
- 21:54der also das ist ja auch wieder diese Umkehr, diese Inversion of
- 21:57Control, ne, also der der Order Service sagt jetzt ey, ich muss
- 22:02irgendwie sagen bezahl ne und das geb ich aber jetzt
- 22:06beispielsweise eben an den Payment Service ab und der
- 22:10Payment Service, egal was das ist, ob jetzt gerade am Ende da
- 22:14n Claner drunter liegt oder Paypal oder Visa ist mir völlig
- 22:18egal. Aber du machst das.
- 22:20Payment Service du zahlst das Ding so nach dem Motto.
- 22:24Ja, aber im Prinzip lass uns mal noch ein Gedankenbeispiel
- 22:29weitergehen. Ich gebe dir mal so ein kleines
- 22:30Szenario, ja, weil wir ja gesagt haben, Testbarkeit und jetzt
- 22:37möchte ich eine Funktion haben, also das ist jetzt so deine
- 22:41Anforderung, die ich dir jetzt gebe, ne, dass quasi.
- 22:45Im Order Service ermittelt wird. Wenn ich bestellt habe, wie
- 22:49lange ungefähr die Lieferzeit ist.
- 22:53So und das möchtest du jetzt abtesten was für Probleme das
- 22:57geht ja jetzt in die gleiche Richtung was wir gerade
- 22:58besprochen haben, aber um mal das an einem klaren Feature ja
- 23:01auch mal zu geben, was ist jetzt der bessere Weg wenn ich es
- 23:05testen möchte also ja Spoilerwarnung das mit
- 23:08Dependency Injection zu machen aber wieso?
- 23:11Weil wer auf welche Probleme treff ich denn wenn ich das
- 23:14nicht mache? Na also ich geh erst mal weiter
- 23:19mit deinem, mit deinem, mit deinem Lieferzeit.
- 23:22Weil also das erste was mir einfallen würde wäre, dass du ja
- 23:25auf jeden Fall in deinem Test nicht tatsächlich einen
- 23:27Lieferservice ansprechen möchtest.
- 23:28Nee, du möchtest nicht tatsächlich bezahlen und du
- 23:30möchtest auch nicht tatsächlich jetzt etwas verschiffen.
- 23:33Ne, deswegen möchtest du nicht diese Services nehmen, sondern
- 23:36du kannst es halt zum Beispiel Mocken und einfach zum Beispiel
- 23:38sagen, ja OK, ich nehme jetzt aber meintest Payment Service
- 23:41und mein Testlieferservice so als Beispiel ne das wäre ja ne
- 23:45Möglichkeit, aber du hattest jetzt zum Beispiel noch
- 23:48angesprochen lieferzeitraum oder sowas.
- 23:52Ne Lieferzeit, weil das ist ja genau der Punkt.
- 23:55Ne wenn ich jetzt verschiedene shipment services hab ne und ich
- 23:58möchte zum Beispiel wissen wie lange dauert das?
- 24:01Wenn er mit Fahrrad fährt, mit dem Roller oder mit dem Auto
- 24:03oder zum Beispiel das abhängig machen von der Entfernung.
- 24:06Wer bestellt hat, dann will ich ja so ne Szenarien testen und
- 24:09aufbauen können und da bist du ja gerade schon genau in die
- 24:12richtige Richtung gegangen. Warum das mit Dependency
- 24:15Injection einfach viel besser funktioniert.
- 24:18Ja, ja, also es ist ja beispielsweise, wenn du jetzt
- 24:21zum Beispiel wirklich sagst, ey, ich möchte jetzt.
- 24:25Verifizieren, dass ab der und der Kilometerlänge
- 24:28beispielsweise auch wirklich n Auto genutzt wird.
- 24:30Dann kannst du das ja wie ich halt eben auch schon n bisschen
- 24:33so meinte. Du kannst es mocken, du kannst
- 24:34ja sagen OK pass auf, du gibst jetzt zum Beispiel vor, das sind
- 24:39die Bedingungen ne und anhand dieser Bedingung teste ich
- 24:43jetzt, dass dass halt eben zum Beispiel auch wirklich das Auto
- 24:45verwendet wird und dafür, dass du es aber auch so machen kannst
- 24:48und das so vorgeben kannst. Mogst du halt deine
- 24:50entsprechende, sag ich mal deine entsprechenden Kriterien
- 24:54innerhalb der Services, die halt diese Dependencies beinhalten.
- 24:57Ne, also alles was Abhängigkeiten sind kannst du
- 25:01sozusagen einfach faken, ne, also du kannst halt einfach
- 25:05vorgeben was da passieren soll, ohne dass du halt am Ende
- 25:08wirklich das nutzt, was wirklich, ich sag mal in echt
- 25:12irgendwie passiert. Das heißt du kannst es halt
- 25:14explizit auf deine sag ich mal Testfälle auch anpassen.
- 25:18Das, was du für mich testen willst.
- 25:19Und das ist halt n Riesen riesen Benefit und das können ja auch
- 25:24mogs, also können ja auch sehr stumpf sein ne?
- 25:28Also ich kann ja jetzt zum Beispiel auch nen Shipment
- 25:31Service implementieren, der einfach dann sagt ja wie lange
- 25:34brauchst du 10 Minuten ja immer 10 Minuten, aber das ist ja
- 25:38egal, weil ich gebe diese Abhängigkeit ja rein.
- 25:41In mein Order Service und dann kriegt er halt immer 10 Minuten
- 25:45angegeben, aber das ist ja genau das, was ich jetzt gerade
- 25:48vielleicht in meinem Testfall verwenden möchte.
- 25:50Ja, dass du halt sowas sagst wie ich möchte, gewisse
- 25:54Funktionalitäten im Order Service testen, wenn der
- 25:57Shipment Service sagt ich brauch 10 Minuten oder bei meinem
- 26:01Payment Service ist mir im Test vielleicht egal wer das jetzt
- 26:05bezahlt, ich möchte einfach nur von außen vorgehen können ob es
- 26:08bezahlt wurde oder zum Beispiel n Transaktionsfehler war so.
- 26:11Solche Geschichten, und das kann ich ja alles von außen
- 26:14reingeben, und das ist mein riesen riesen Vorteil in Sachen
- 26:17Testbarkeit. Ja, auf jeden Fall.
- 26:20Also das Testbarkeit sowieso. Es ist n Riesenthema, ich weiß,
- 26:26das klingt manchmal so n bisschen so, als würden wir
- 26:28irgendwie das ganze. Haben wir so ne Tester Sekte,
- 26:33aber es ist halt wirklich sehr sehr wichtig, dass man sich halt
- 26:36eben dann auch auf den Code verlassen kann und dazu zählt
- 26:39halt eben, dass man eben seinen Code auch richtig testet und da
- 26:42ist es halt wieder wichtig, dass der Code auch testbar ist und
- 26:44das geht halt zum Beispiel zumindest aus unserer Erfahrung
- 26:48auch immer sehr gut, zum Beispiel mit Dependency
- 26:50Injection. Also das ist NNN sehr sehr
- 26:53großer Vorteil, ansonsten hast du natürlich auch noch, weil wir
- 26:57ja gerade noch n bisschen bei Vorteilen sind, auch zum
- 27:00Beispiel die. Die Lesbarkeit also du hast halt
- 27:03klar, du siehst halt relativ klar und nachvollziehbar wo die
- 27:10Abhängigkeiten. Ich sag jetzt in
- 27:11Anführungsstrichen mal fließen, weißt du?
- 27:13Ja. Und das hatten wir vorhin auch
- 27:15schon n bisschen angesprochen und da hatten wir auch schon mal
- 27:18ne Folge drüber gemacht. Über die Solid Prinzipien und
- 27:20gerade dieses Single Responsibility Principal, was
- 27:23wir auch besprochen hatten, also die Beziehung lieber hör da
- 27:27gerne mal rein, wenn dich das interessiert und du sagst Ey
- 27:28solid ey, das klingt cool, wollte ich schon immer mal was
- 27:31drüber hören, da haben wir ne Folge drüber gemacht, aber genau
- 27:33diese Single Responsibility, die hast du ja dadurch gegeben, weil
- 27:38du ja zum Beispiel sagst OK du hast n Order Service der sagt OK
- 27:40ich nehme zum Beispiel diese entsprechende Order entgegen.
- 27:43Ne und berechne vielleicht wieviel bezahlt werden muss und
- 27:47wohin es geliefert werden muss, aber die tatsächliche Ausführung
- 27:51des Zahlens, das wird halt woanders hingegeben.
- 27:54Ne an den Payment Service und die tatsächliche Lieferung des
- 27:58Ganzen wird halt dann wieder n shipment Service gegeben und das
- 28:01ist halt genau diese Verantwortlichkeit die da im
- 28:05Endeffekt auch getrennt wird, was am Ende natürlich auch ne
- 28:07gute Architektur der Software zugrunde hat, ne oder dann?
- 28:12Als Grundstein sozusagen. Ich finde halt den Punkt auch
- 28:17wirklich wichtig, Lesbarkeit zu sagen.
- 28:19Ich sehe, welche Klassen verwendet werden von anderen
- 28:24Klassen, indem ich zum Beispiel im Konstruktor ja schon nehmen,
- 28:28also wir kommen gleich auf die Form der Dependence Injection,
- 28:30aber gehen wir jetzt mal vom Konstruktor aus, dass ich eine
- 28:33Constructor injection mache und den Service über den Konstruktor
- 28:38in meinen Service reingebe ja. Und dadurch sehe ich halt auch
- 28:42gleich schon von der Architektur her, welche Abhängigkeiten da
- 28:45sind, weil ich möchte noch mal ganz kurz auf das Singletonpad
- 28:48dann eingehen, weswegen hier überhaupt diese Folge jetzt da
- 28:51ist. Ja, weil wir, da hatten wir ja
- 28:52gesagt, du hast irgendwann keinen Überblick mehr, wer
- 28:55verwendet jetzt diese Singleton Instanz und manipuliert sie
- 28:59vielleicht ja oder ruft da Funktionen auf und du weißt
- 29:01einfach gar nicht mehr, wo sie überall in deiner Software ist,
- 29:04weil sie so global am Ende ist. Und das ist der Vorteil an
- 29:07Dependency Injection. Wenn ich jetzt sage, ich möchte
- 29:10es nicht als Single umsetzen, sondern ich habe eine Klasse,
- 29:13die ich sehr viel brauche überall, dann kann ich sie aber
- 29:17genauso da, wo ich sie brauche, via dependency Injection halt
- 29:23mit Reingeben und seh aber dann auch, dass sie da verwendet
- 29:27wird. Und das ist halt auch n Prinzip,
- 29:29was ja auch viele Frameworks verwenden, zum Beispiel wenn
- 29:33Leute mit Angular arbeiten. Die Services werden ja auch
- 29:36injiziert in deine Components beispielsweise, und das ist auch
- 29:41ne ne sehr coole Art und Weise damit zu arbeiten am Ende, um
- 29:46zum Beispiel auf gleichen Instanzen zu arbeiten.
- 29:48Wir hatten jetzt zum Beispiel gesagt, N Logger Service, so
- 29:50beispielsweise wär jetzt so n so n klassisches Beispiel, dann
- 29:54möchte ich natürlich. Eine Instanz eines Loggers haben
- 29:57und wenn ich irgendwo n log aufrufe, dann möchte ich zum
- 30:00Beispiel, dass es auch wirklich im gleichen Logfile landet oder
- 30:02in der gleichen Ausgabe allgemein, aber das kann ich
- 30:06dann halt mit dependency Injection lösen und hab halt
- 30:09auch im Test dann die Möglichkeit von außen
- 30:11vorzugehen, wie dieser Loggerservice aussieht.
- 30:14Ne und das ist n Riesenvorteil dabei.
- 30:17Im Umkehrschluss wär es n Single nur und der wär einfach überall
- 30:20fest integriert. Da hab ich in meinen Tests auf
- 30:22einmal irgendwelche logs wo ich mir denke hä mal so weißt du so
- 30:27als Side? Effects mal.
- 30:28Na ja, das kommt dann so flaky Tests unter Umständen gerade bei
- 30:32Singletons hatten wir auch besprochen, das kann man
- 30:35natürlich super vermeiden dann durch Dependency Injection, du
- 30:38hattest ja gerade zum Beispiel angesprochen Constructor
- 30:41injection ne, also das ist auch glaub ich das was.
- 30:45Irgendwie super häufig vorkommt. Also eigentlich, ich würde
- 30:49sagen, wenn man die Penancy Injection benutzt, kenn ich das
- 30:52eigentlich hauptsächlich so, dass es über Constructor
- 30:54Injection passiert. Du hattest das ja schon mal n
- 30:58bisschen angesprochen, eben gerade Constructor Injection,
- 31:01die Abhängigkeiten werden über den konstruktor Halt injiziert,
- 31:05ne, also es klingt halt immer so.
- 31:07Wie gesagt, ich ich meinte wär vorhin schon das klingt so
- 31:10hochtrabend manchmal, Injection ist ja nichts anderes, als dass
- 31:13du n Parameter übergibst, dass du einfach sagst.
- 31:15Du erzeugst jetzt zum Beispiel diesen Order Service, den wir
- 31:18hatten und dann gibst du in den Konstruktor den Payment Service
- 31:21mit rein, als Parameter Übergabe sozusagen ne in den Konstanz
- 31:25davor, genau genau und halt den Shipping Service genauso ne und
- 31:29dann hast du die halt und musst die dann halt eben so wie man es
- 31:34halt kennt über den Konstruktor in das Objekt reingeben ne so,
- 31:37aber das ist ja beispielsweise halt eine Sache die man jetzt
- 31:40gibt ja noch andere Formen hast du noch ne andere?
- 31:44Was es halt auch gibt ist so Setter Injection, also so auch
- 31:50klassisch über eine Set Funktion macht das Ganze natürlich noch
- 31:57ein Stück weit flexibler, weil es nicht an den Konstruktor
- 32:00gebunden ist. Das heißt ich kann diesen
- 32:03Service Instanziieren ohne diese Abhängigkeit reinzugeben und
- 32:09kann zur. Also irgendwie an einer anderen
- 32:11Stelle zur Laufzeit. Zum Beispiel dann das Setten,
- 32:15also dann wirklich setzen. Diese Abhängigkeit, das klingt n
- 32:19Stück weit flexibler, ist es irgendwo auch, aber ich finde
- 32:22mir ist das manchmal nicht so explizit genug, wenn ich so
- 32:25drüber nachdenke, weil ich halt mich vielleicht zu sehr
- 32:29entkoppel davon, ich weiß nicht, wie es anders sagen soll, aber.
- 32:32Was ist, wenn du diesen Setter nie aufrufst oder vergisst, ihn
- 32:35aufzuhören? Richtig so, ja, das ist oder
- 32:37oder rufst ihn einfach aus Versehen noch mal irgendwann auf
- 32:40und überschreibst dir wieder Sachen, weil du halt wie gesagt
- 32:43diese Instanz neu setzt da drin, das find ich, ist halt auch
- 32:46immer so n bisschen schwierig, aber hat also wenn du diese
- 32:51Flexibilität brauchst ist es auf jeden Fall n valider
- 32:53Anwendungsfall das so zu machen. Ja, also ich glaub es gibt es,
- 32:57weil man das vielleicht wirklich irgendwie verwenden kann.
- 32:59Ich hab das glaub ich selbst noch nie verwendet.
- 33:01Ich find es halt auch genau aus den Gründen, die du gerade
- 33:04genannt hast, finde ich es schwierig, weil du kannst ja
- 33:07irgendwie gar nicht gewährleisten, ob dann zum
- 33:10Beispiel dieser Setter, also ob ob das wirklich gesetzt ist, was
- 33:14du setzen sollst. Oder du musst vielleicht
- 33:17irgendwie wieder ne Behandlung dahinter irgendwie machen, wenn
- 33:20du sagst, ja, das gibt es aber gar nicht, weil du halt die
- 33:22Dependency eben nicht injected hast.
- 33:24Ne, das ist wahrscheinlich sehr. Anwendungsspezifisch, dass man
- 33:30bestimmt sagt. Ja, wenn du, ich glaube halt.
- 33:33Wenn du es also ich will, sagen wir mal so ne Art lazy load ja,
- 33:36also wenn du quasi zum Erstellen deines eigentlichen Service noch
- 33:42nicht die Abhängigkeit definieren kannst oder so und
- 33:44das irgendwie nachgelagert kommt.
- 33:46Aus Gründen einfach aus Gründen deiner Software.
- 33:50OK, dann ist das ne ne ne architekturentscheidung die
- 33:53vertretbar ist. Aber wenn ich es eigentlich
- 33:56schon zum Erstellen des Service weiß, würd ich es halt auch n
- 33:58Konstruktor hauen, ehrlich gesagt.
- 34:00Ja, dann gibt es ja glaub ich noch ne dritte Sache.
- 34:03Das ist diese Interface Injection, da bin ich ganz
- 34:06ehrlich, das hab ich auch noch nie genutzt so eine Interface
- 34:10injection ich weiß nicht wie es wie es dir geht, ob du das schon
- 34:13mal verwendet hast oder nicht. Also nee, ich.
- 34:18Bin ja meins. Es wird auch relativ wenig
- 34:20verwendet, aber keine Ahnung hab ich.
- 34:25Also das ist halt noch mal noch mal n Schritt weiter ne, also
- 34:29dass du sagst ich gebe jetzt keine Instanz einer festen
- 34:34Klasse rein. Ja und hab so meine Dependency
- 34:38Injection, sondern ich verwende jetzt noch Interfaces dafür, so
- 34:41versteh ich das Prinzip dahinter.
- 34:44Das heißt, ich implementiere meine Klasse.
- 34:47Also nein, meine Klasse implementiert ein Interface, was
- 34:51zum Beispiel sagt Inject, also ich hab ne Funktion inject und
- 34:54da muss ich einen gewissen Typ reingeben.
- 34:58Ja. Ja, in diese Funktion, um so
- 35:02dann quasi bereitzustellen, wenn ich das als klasse
- 35:05implementiere, dass es eine inject Methode von außen gibt,
- 35:08wo ich meine Abhängigkeit dann mitgeben kann.
- 35:12Aber was ich dabei wieder schwierig finde, ich mein gut,
- 35:14das hast du immer. Am Ende ist es ne Coding Frage
- 35:16ne aber mein erster Gedanke war ja dann sag ich ich implementier
- 35:20inject und mach da einfach gar nichts drin sowas dann hab ich
- 35:24da nämlich überhaupt nichts injiziert am Ende andererseits
- 35:27kannst du natürlich sagen ich kann auch n Parameter n
- 35:29Konstruktor reingehen und dich ignorieren ja also weißt du es
- 35:32denn halt wirklich dass ja weißt du was mir gerade einfällt, ich
- 35:35hab das doch schon mal verwendet, das ist jetzt gerade
- 35:37in dem Moment fällt mir das ein, weil was auf der das
- 35:39Anwendungsbeispiel war. Du hast n Repository, ne, also
- 35:44das ist jetzt wirklich codebase, also codetechnisch ne, also n
- 35:46Repository ist ja zum Beispiel sozusagen der die Schnittstelle
- 35:50die zur Datenbank geht ne und wenn du jetzt sagst du hast
- 35:53diese Schnittstelle in deiner Software die zur Datenbank geht,
- 35:55ne dein Repository also wir hatten das zum Beispiel
- 35:58Repository genannt und du willst es testen, ne, dann kannst du ja
- 36:02rein theoretisch sagen ja OK, ich hab aber jetzt in meinen
- 36:04Tests zum Beispiel nicht meine echte Datenbank, also haben wir
- 36:08sozusagen immer in unserem produktiven Code.
- 36:11N Interface von dem entsprechenden Repository zum
- 36:15Beispiel, sagen wir mal in also User Repository Interface, nenn
- 36:19ich das jetzt mal ne haben wir immer injected und in
- 36:23Produktivcode wurde sozusagen immer, also wurde die Instanz
- 36:26Injected des richtigen User Repositories weißt du was dann
- 36:31im Endeffekt dieses User Repository Interface
- 36:34implementiert? Und dann gab es noch n Test User
- 36:37Repository, was eben auch dieses User Repository Interface
- 36:41implementiert hat und dann konntest du halt.
- 36:43Fällt mir jetzt gerade ein rein theoretisch relativ easy sagen
- 36:47OK pass auf, du kannst in deiner produktiven Anwendung ne, also
- 36:50so wie es halt wie der Code halt wirklich läuft hattest du
- 36:53wirklich die zu den Zugriff auf die Datenbank über das echte
- 36:56Repository in Anführungsstrichen?
- 36:58Und im Test war es dann aber so, dass man eigentlich nur gegen so
- 37:01n gewissen Fake gegangen ist. Ne den man dann injected.
- 37:03Hat an der Stelle aber den Anwendungsfall kenn ich auch und
- 37:06der ist auch richtig gut das so zu machen.
- 37:09Aber ich. Wenn ich sowas verwendet hab,
- 37:11hab ich es aber nicht so in diesem klassischen Interface
- 37:13Injection Prinzip umgesetzt, dass ich halt quasi in meiner
- 37:16Klasse ein Interface implementiere mit einer inject
- 37:19Methode, sondern ich hab halt gesagt, es gibt so Interfaces
- 37:23die Abhängigkeiten darstellen, aber ich kann sagen wie dieses
- 37:25Interface aussieht von außen oder wie ich es implementiere
- 37:30deswegen. Also ich weiß nicht, also wenn
- 37:32das darunter zählt, ja dann hab ich es so auch verwendet, aber
- 37:36so nach der Recherche wieso dieses klassische?
- 37:39Aber da dieses klassische Interface Injection aussieht,
- 37:42muss ich sagen, so hab ich es. So lieb gemacht.
- 37:45Also Liebe zu, lieber Zuhörer, wenn du Interface Injection
- 37:48schon mal verwendet hast oder sagst, ja, das ist so.
- 37:51Richtig lehrbuchhaft. Dann sag es uns.
- 37:53Dann schreib uns das auf jeden Fall, aber ich würd sagen,
- 37:58genau, also es gibt auf jeden Fall verschiedene Möglichkeiten
- 38:00diese Dependence Injection am Ende wirklich umzusetzen und.
- 38:05Ich würde sagen, wir können ja noch mal irgendwie gucken, dass
- 38:07wir so ein paar Tipps und Best Practices vielleicht so
- 38:10mitnehmen, die man vielleicht noch mal dann so zum Abschluss
- 38:15so was auf dem Weg mitgeben kann.
- 38:19Ja, ich fange mal an, es ist naheliegend, aber wir möchten es
- 38:24trotzdem anmerken, denke ich. Dependency Injection ist eine
- 38:28sehr, sehr gute Sache. Aber auch bitte hier Vorsicht,
- 38:33wenn ich anfange, alles darüber zu machen, nur so als Reminder,
- 38:37wie ich damals im Studium mich verhalten hab, wenn ich
- 38:39irgendwie was Neues gelernt hatte oder neues Pattern
- 38:41kennengelernt hab, dann hab ich es einfach überall erstmal
- 38:43verwendet. Also ja kann man machen, aber
- 38:46auch Dependency Injection hat seine Grenzen wenn ich jetzt zum
- 38:50Beispiel merke ich hab ne klasse und ich muss da irgendwie 56
- 38:53Instanzen von Klassen injizieren um die zu verwenden.
- 38:57Und mir denke, na ja, ist ja dependency Injection, kann ja
- 38:59von außen alles vorgeben, ja und nein, weil das schon wieder n
- 39:04Anzeichen ist, dass es denn doch an der Architektur, an der ein
- 39:07oder anderen Stelle klemmt, zumindest aus unserer Sicht.
- 39:10Wir lassen uns da auch gerne belehren oder korrigieren, wie
- 39:14sagt man, weil das zeigt, dass es schon wieder unnötig
- 39:19kompliziert wird, dass man einfach denn zu viel
- 39:21Abhängigkeiten hat und da mal refectern sollte.
- 39:24Ja, also klar ist zum Beispiel, wenn wir über Single über Single
- 39:28Responsibility gesprochen haben, könnte es vielleicht sein, dass
- 39:31dieser Service oder diese klasse oder ne wo halt eben 567
- 39:37Injections stattgefunden haben. Vielleicht macht diese Klasse
- 39:40dann doch zu viel, man weiß es nicht, es könnte sein.
- 39:44Und es ist n valider Anwendungsfall, weil ich hatte
- 39:47ja Angular erwähnt und da haben wir auch selbst die Erfahrung
- 39:50gemacht, dass du an den Punkt kommst, wo du auf einmal so 56
- 39:53Angular Services drin hast und dir denkst.
- 39:56Weiß nicht, ich glaub das artet gerade n bisschen aus.
- 40:00Lass mal refact. Dann so ne.
- 40:02Na du kommst halt schnell dahin, dass du sagst, du brauchst den
- 40:04Service noch. OK, ja dann komm injected den
- 40:07Service, das ist genau wie bei Single ne, weil du hast halt
- 40:11diesen Punkt wo es sehr easy ist den dann reingeben zu können, ne
- 40:14gerade gerade. Mit Frameworks wie Angula, wenn
- 40:18du den einfach in Konstruktor schreibst sozusagen.
- 40:21Das Beste ist ja, wenn du irgendwann n Service hast.
- 40:24Ja, also sagen wir mal Service 1.
- 40:25Der Injected Service 2 und 3 und Service 2 Injected aber auch
- 40:31noch mal Service 3. Also weißt du also du hast dann
- 40:34du hast dann quasi wo du dir denkst OK muss jetzt bis auf
- 40:37Service 3 selber also bis auf deinen Service der überall
- 40:40injected und muss der überall injected werden also.
- 40:43Ne, da kann man sich dann vielleicht noch mal überlegen.
- 40:46OK, hab ich hier nicht vielleicht n bisschen
- 40:48übertrieben? Das ist nämlich auch wieder so n
- 40:50Ding zirkuläre Abhängigkeiten gerade können halt auftreten,
- 40:55gerade wenn du wirklich exorbitant viel dependency
- 40:58Injection machst und vielleicht irgendwann den Überblick
- 41:00verlierst und nicht mehr weißt wo gehen denn die die Penancies
- 41:03hin, weil wenn du jetzt zum Beispiel sagst ne, also das ist
- 41:06relativ. Schnell erklärt ne zirkuläre
- 41:09Abhängigkeit ist wenn du sagst du kannst Service A nur mit
- 41:11Service B nutzen und Service B nur mit Service A nutzen.
- 41:15So wenn du jetzt aber sagst OK das ist Henne ei Problem, was
- 41:18kannst du jetzt nutzen ohne das andere ne also es wird halt so
- 41:21nicht funktionieren. Und wer jetzt sagt, das klingt
- 41:24abwegig, nein, sowas kann sehr schnell passieren.
- 41:28Klar, nicht. Nicht in konstruierten
- 41:30Beispielen. Das wird wahrscheinlich nicht so
- 41:31einfach sein, aber. Ja, es ist halt.
- 41:34Es ist leider möglich. Genau.
- 41:36Also man kann sagen, dass es halt auch klare Regeln geben
- 41:39sollte, ne, dass man da einfach auch wirklich n Überblick
- 41:41behält, definitiv. Gerade auch wenn wir jetzt zum
- 41:43Beispiel über das gesprochen haben, wenn man zum Beispiel
- 41:45sagt, OK, du kannst vielleicht irgendwie ne Constructor
- 41:47injection oder ne Setter Injection machen und man dann
- 41:50vielleicht sagt, EY ne, also sagen wir mal, du hast irgendwie
- 41:53n Team. Der die eine Person aus dem Team
- 41:56sagt sich OK, ich mach aber jetzt immer Constructor
- 41:59Injection, die andere macht immer Setter Injection.
- 42:00Am Ende braucht man aber das ein oder das andere vielleicht gar
- 42:03nicht zwingend, weil das vielleicht zum Beispiel die
- 42:05Setter Injection vielleicht auch mit der Constructor Injection zu
- 42:08lösen wäre, dann sollte man sich vielleicht auch auf ne
- 42:11Einheitlichkeit einigen um halt auch eben auch diese diesen ich
- 42:15sag mal diese diese das was wir vorhin als Vorteil angesprochen
- 42:19haben, dass man halt ne. Übersichtlichkeit schafft von
- 42:23den Dependencies her. Wenn du aber dann zum Beispiel
- 42:26immer wieder dies und das und jenes verwendest, verschiedene
- 42:28Möglichkeiten, wenn es sein muss, klare Sache, aber wenn es
- 42:32nicht unbedingt sein muss, dann vielleicht so eine
- 42:34Einheitlichkeit haben, damit man auch sich darauf verlassen kann,
- 42:37dass da, wo man hinguckt, auch, dass man da halt eben auch denn
- 42:39die Dependencies eben erspähen kann, sozusagen.
- 42:43Ja, ist ein sehr guter Punkt und wo wir auch bei Interfaces sind.
- 42:49Wenn man im Test oder beim Testen merkt, OK, ich habe zwar
- 42:52den Vorteil von Dependency Injection und kann jetzt von
- 42:55außen alles implementieren und vorgeben, ich kann zum Beispiel
- 42:58die Interfaces implementieren, die du gerade genannt hattest.
- 43:00Ja, wenn ich aber merke, es ist unfassbar aufwendig, irgendwas
- 43:06zu instanziieren, weil ich halt erstmal 56 Klassen vorher
- 43:10implementieren muss, ja, weil du alles so ineinander, die
- 43:14Injektest sozusagen. Auch schwierig.
- 43:17Und dann wird es auch unübersichtlich.
- 43:19Also das ist dann auch so ein Warnzeichen, einfach.
- 43:22Ja, auf jeden Fall. Also angenommen du hast Service
- 43:27A brauch Service B also möchtest du Service B Reingeben aber um
- 43:30Service B Instanziieren zu können brauchst du Service C und
- 43:34so weiter dann hast du halt eine Riesenkette an Code um überhaupt
- 43:37erstmal alle Objekte zu instanziieren und dann merkst du
- 43:40halt auch irgendwann so. Vielleicht habe ich es.
- 43:42Übertrieben? Ich habe es völlig übertrieben.
- 43:47Ja, aber zum Beispiel das was, was ich vorhin meinte.
- 43:50Es ist, wenn wenn du quasi n sagst OK ich ich injekte nicht
- 43:54einfach nur ne Klasse, sondern ich injekte zum Beispiel also
- 43:56sagen, wenn wir bei Payment sind ne es ist natürlich nicht
- 43:59schlecht zu sagen OK du hast n du indizierst nicht einfach nur
- 44:02n Payment Service und dieser Payment Service sagt
- 44:04beispielsweise OK pay with Paypal pay with ne Visa oder was
- 44:10auch immer, sondern du sagst dann am Ende wirklich irgendwie,
- 44:13dass du n Interface reingibst und sagst ne, das ist NI payment
- 44:18Service beispielsweise und dann kannst du halt zum
- 44:22entsprechenden Zeitpunkt halt auch oder wie du auch meintest,
- 44:25vielleicht auch zur Laufzeit, sogar je nachdem wann du das
- 44:27Objekt konstruierst eine entsprechende Injection mit
- 44:31Reingeben oder eine entsprechende Dependency
- 44:33Injection so. Rum, ja.
- 44:35Genau. Und dann kannst du halt eben aus
- 44:38diesen Interfaces verschiedene, ja ich sag mal.
- 44:44Implementierungen mitgeben so ne oder jetzt zum Beispiel auch das
- 44:48Beispiel, was ich vorhin meinte mit dem mit dem, mit dem Testen,
- 44:51dass du dann zum Beispiel auch ein ein Interface faken kannst
- 44:55oder ein Implementierung des Interfaces für das Repository.
- 44:57Fake kannst so ja, ja, das kann zum Beispiel auch helfen, ja,
- 45:00ich. Würde sagen, dann haben wir das
- 45:03Thema eigentlich auch wirklich gut besprochen.
- 45:05Wir sind auch wieder fortgeschritten in einer Zeit
- 45:07auch so ein Standardsatz, weil wir immer mit ein bisschen
- 45:09verquatschen. Wir sollten aber mal im Vorfeld
- 45:12immer Wetten abschließen, wie lange die Folge dauert.
- 45:16Ja, ich glaub, das kriegen wir, das werden wir nie treffen, aber
- 45:19trotzdem die Anmerkung, Liebe zuhören, Liebe zuhören.
- 45:21Falls du noch fragen zu dem Thema hast, Anmerkung oder Dir
- 45:25sagst so hey wär cool wenn ihr auch mal Beispiele gebt, so als
- 45:28Code, dass wir da irgendwie mal Content zu machen, lass es uns
- 45:31gerne wissen. Auf jeden Fall.
- 45:33Und ansonsten, wie gesagt also die Links dann auch dazu ne,
- 45:36also du kannst uns schreiben auf einem Plattformen, da gibt es
- 45:38die Links natürlich wie gehabt in den Shownotes guckst du
- 45:41einfach mal rein und wenn du jetzt zum Beispiel auch ein
- 45:44Thema hast, wie zum Beispiel dieses Thema, das war ja auch
- 45:45ein Wunsch, ne, dann schreib uns auch gerne auf der Plattform
- 45:50deiner Wahl. Ganz genau.
- 45:54Ja, was was haben wir noch? Wichtig ist natürlich immer, und
- 45:57das müssen wir sagen, ja, wir kommen nicht drum herum, Regie
- 46:01sagt, Wir müssen das Sagen und. Wenn dir der Podcast gefällt,
- 46:06dann nimmt viel ihn auf jeden Fall weiter und lass ne
- 46:08Bewertung da. Und und das ist natürlich
- 46:10wichtig, die haben wir ja jetzt gar nicht vor allzu langer Zeit
- 46:13mitgekriegt. Lass mal n Abo da und Aktivier
- 46:15das Glöckchen, weil dann verpasst du keine neue Folge,
- 46:18das ist ganz ganz wichtig, Oh Yes, ansonsten Tino, vielen Dank
- 46:23für das tolle Gespräch über gar nicht die Penancy Injection, ich
- 46:26hätt nicht gedacht, dass wir so lange darüber reden können, aber
- 46:28wir haben es geschafft ansonsten.
- 46:30Ist n geiles Thema. Ist es auch.
- 46:33Ansonsten wünsche ich dir Tino und auch dir Liebe zu lieber
- 46:36zuhören, einen tollen Tag, ne tolle Zeit bis zur nächsten
- 46:39Folge deine Codingbuddy gemeinsam besser.