Ich war früher immer Team Nintendo, da mach ich mal Team playstation. Jetzt bin ich wieder Team Nintendo. Nee nee, Xbox Xbox Arena nicht drüber, das ist so dein Ding. Coding Buddies Dein Podcast rund um Softwareentwicklung und aktueller Tech News Herzlich Willkommen Halli Hallo und herzlich Willkommen zur neuen Folge des Coding Buddies Podcast schön, dass du wieder eingeschaltet hast.
Liebe zuhören, liebe Zuhörer. Und deine Gastgeber, wie immer meine Wenigkeit, der Dino und der fantastische Fabi Fabi, was geht ab? Ich begrüße Dich Keep Coding Dino ah nee, keep podcasting was. Ja, das stimmt. Ich wollt einfach mal unsere. Coole, ausgedachte Begrüßung im Podcast aufnehmen. Ja, die verbreitet sich ja schon rasant auf Twitter. Ja, ja, auf jeden Fall. Man munkelt, dass Leute sich schon erkennen auf der Straße wegen Keep Coding.
Das Problem ist, im Podcast funktioniert das Handzeichen nicht so, also Liebe zuhören, Liebe zuhören, du musst dir so ein cooles Handzeichen vorstellen. Stell dir einfach ein cooles Handzeichen vor. Das ist gut, das ist gut, weil selbst wenn es nicht cool wäre, wäre es jetzt cool. Ganz genau.
Ganz genau. Und Thilo weiß das genau, ganz kurz, was ich irgendwie dich fragen wollte, weil da hab ich letztens ganz kurz off topic, hab ich letztens gesehen, so n so n Ausschnitt davon und ich wollte mich interessiert das wirklich ne, kannst du dich noch? Es geht um Serien aus der Kindheit ne kannst du dich noch dran erinnern an eine bestimmte Serie die heißt extreme Dinosaurs. Na klar, ich, also ich hätt.
Mich von alleine nie wieder dran erinnert, wenn ich nicht irgendwie n kleinen Ausschnitt davon gesehen hätte, dann dachte ich mir so. Krass. Ja, war. Heftig, oder? Also warst du ne krasse Serie damals, ey, also muss ich sagen, also ich weiß nicht, wenn sich da noch jemand dran erinnert, sag gerne mal Bescheid, mir ist es komplett entfallen. Da gab es so mega viele coole Serien auch hier dieses Biker meist from Mars und so, das war einfach krass. Oder Gargolts oder so. Ja.
Das das stimmt glaub ich ne ne Stufe obwohl man weiß das immer nicht so in meinem Kopf ist das gerade so n bisschen später, aber wer weiß, vielleicht ist auch Gargolts das Älteste gewesen, aber ich glaube, dass es so n bisschen später gewesen, aber es war krass. Keine Ahnung, ich war heftig, aber ich dachte mir so, ich hab mich gefragt, ob nur ich das kenne oder du auch, aber bin ich ja beruhigt.
Ist ja auch so n bisschen unsere Zeit, ne, also das war ja auch krass, wenn du früher dann einfach so vorm Fernseher saß und dann kam ne neue Folge und du konntest hier gucken, also das war schon, das war schon krass hier, nicht Netflix hier on demand. Ne, ja, das war krass. Also ich hab mich auf jeden Fall auch immer zum Beispiel irgendwie was was darkwin Duck oder so fand ich richtig krass.
Also damals fand ich richtig richtig krass und da hatte ich so ein so ne lieblingsfolge, die hab ich irgendwo mal geguckt und ich hab die nie wieder geschaut. Und die kam auch nie wieder. Also es ist deine Lieblingsfolge, weil du sie nur
einmal gesehen hast. Na, die war so heftig krass, weil da war der Darkwin. So wurde gesplittet in so guter Darkwin Dark und Böser ne gute böse doch genau, und dann war der irgendwie, also es war so nur die Essenz des guten und des Bösen oder so und ich fand die Folge einfach so heftig, voll krass. Dann würde ich sagen, dann nutzen wir das gleich hier und starten Aufruf. Also falls jemand weiß welche Folge das ist, schreibt uns damit Fabi seine Lieblingsfolge zum zweiten Mal gucken kann.
Ich wette, ich wette, die Folge ist einfach. Die Cover findet bei Leasy, aber ich hab mich einfach nie drum gekümmert und ich glaub es ist so n kleiner wie 30 folgen oder so. Also früher dachte ich immer es gibt von jeder Serie 1000 folgen aber es sind halt nur keine Ahnung. Bestimmt nur 30.
Ich hab keine Ahnung. Ich fand Darkwin Dagmar unglaublich schnelllebig, also super schnell geschnitten, also dass Kinder da wirklich wahnsinnig geworden sind bei also da geht richtig die Post ab, immer ne also um das überhaupt verarbeiten zu. Können ist schon hart also doch guck es dir mal aus heutiger Sicht an. Ja, ich weiß, dass du mal da drauf, wie schnelllebig das ist, wie schnell geschnitten alles ist.
Es geht auch einfach total krass, es geht einem auch voll auf den Sack, ich fand einfach nur Grad hier, da geht die Post ab find ich gut. Da merkt man mal, du bist n bisschen älter geworden, wenn man sagt. Es geht die Post ab, da geht die Post ab.
Ja, ja gut, aber ich find das kann man immer noch sagen, das ist völlig in Ordnung so Fabi bevor wir jetzt reinstarten ich würd mal ganz kurz von Duck wie Duck weggehen und noch mal ganz kurz n Aufruf starten, Liebe zuhören Liebe zuhören falls du dich nicht nur für Cartoons von früher interessierst, sondern auch für unsere Codingthemen und der Podcast dir gefällt. Lass doch gerne mal n Abo da und auch gerne ne Bewertung.
Das würde uns mega unterstützen. Deswegen hier ganz kurz deren Aufruf und wir haben das Glöckchen ja vor n paar Wochen entdeckt. Drück da mal drauf, dann wirst du auch immer benachrichtigt, wenn ne neue Folge kommt. Ich mein Donnerstag 18:00 Uhr ist klar, aber ne Benachrichtigung ist ja trotzdem nicht schlecht und deswegen vielen Dank dafür schon mal. Wochen, Monate, pipapo.
Man weiß es nicht mehr. Ja, es ist es ist glaube ich schon ne Weile her, dass wir sie entdeckt haben, aber ich find's halt immer noch krass, definitiv und genau fabi, wir haben ein ganz cooles Thema mitgebracht heute und zwar machen wir heute mit unserer Design Pattern Folge weiter nicht Reihe. Es ist nicht nur ne Folge, es ist sogar ne ganze Reihe und wir. Mach ne neue Folge, so ist es korrekt und ich möchte das ganze Mal einleiten.
Bitte mit einer ganz klassischen Frage und zwar warst du schon mal im Urlaub im Ausland und dachtest dir jetzt mein Handy laden, das wär fantastisch jetzt nur noch ne Steckdose finden, das wär klasse und dann geht es los und dann findest du sie möchtest dein Netzteil reinstecken und denkst dir no. Das sieht irgendwie anders aus. Das funktioniert nicht. Was ist da los? Wär das jetzt blöd, wenn ich sagen würde, nee kenn ich nicht, fahr ich nie.
Ja dann werd ich von meinen Geschichten erzählen, aber ich bin mir eigentlich ziemlich sicher, dass du das schon mal erlebt hast. Ja, auf jeden Fall, ich glaub das erste Mal hab ich das sogar damals so in der fünften Klasse, da haben wir so ne so ne Woche irgendwie in London gemacht, also keine Ahnung also es ist schon n bisschen länger her und da bin ich dann nach London und dacht mir so was zur Hölle ist mit diesen Steckern hier los, also mit den Steckdosen.
Das geht ja gar nicht so und ich glaub keine Ahnung. Also meine Mutter hat immer an alles gedacht, aber ich glaub ich hatte sowas nicht mit. Also ich konnte da quasi ich musste was von wem anders nehmen, sagen wir mal so, weil hat nicht reingepasst, ne. Und weil du meintest, deine Mutti hat an alles gedacht, dann denk ich mal, wird das nämlich genau unser Thema heute sein, an was sie gedacht hat. Und zwar gibt es ja so schöne Reiseadapter. Für Steckdosen in allen Formaten.
Dann hast du die komischsten Formen und denkst dir, wo gibt es Steckdosen die sowas benötigen. Aber ja, es gibt sie und der Adapter erfolgt oder bezweckt im Prinzip, dass du dann ganz normal deine Netzteile verwenden kannst und so tun kannst, als wenn es eine Steckdose zu Hause wär, weil du einfach es schaffst diese nicht passenden Stecker, also Steckdose und Stecker, die Formate.
Quasi kompatibel zu machen mit Hilfe eines Adapters und genau das im Prinzip auf die Software gemünzt, ist unser heutiges Thema, denn wir möchten heute mal über das Adapter Pattern sprechen und das Ziel soll sein zu verstehen, wie es hilft, dieses Pattern diesen Adapter zu verwenden, um Code einerseits wiederverwendbar zu machen, wie zum Beispiel jetzt die den Stecker, den wir gerade besprochen haben und wie man damit auch Systeme kompatibel machen kann.
Hast du Bock drauf oder oder oder muss ich mir jetzt was Neues ausdenken? Anderes Thema. Lass mal über Duck and Duck reden machen. Wir, deine Lieblingsfolge können wir vielleicht am Ende, wenn noch Zeit ist, machen wir das am Ende ne, aber wir werden. Keine Zeit haben? Nein, da war Pass auf, den finde ich gut. Wir hatten ja in unserer Reihe schon bisher erzeuger, Muster oder ne creational Pattern gehabt, die sind jetzt eigentlich durch und jetzt
kommen wir zu sogenannten. Fructural Patterns oder strukturellen Design Patterns ne und Adapter Pattern ist halt ein so ein strukturelles Design Pattern ne und im Endeffekt ist es ja genau das, was du ja auch schon jetzt so angesprochen
hattest. Ne, du willst irgendwie sag ich mal 2 Systeme oder 2 Klassen wie auch immer miteinander kombinieren, ne die aber eigentlich gar nicht füreinander gemacht sind und im Endeffekt. Kann man sich bei so einem Adapter Pattern das dann so vorstellen, dass man einfach sagt, ja OK, du hast halt irgendwie nen Client, der irgendwas quasi aufrufen möchte, zum Beispiel ne Funktion in
deiner Software? Und wenn diese Funktion, die der Client eigentlich aufrufen möchte, aber nicht zu dem passt was er erwarten würde, sozusagen, dann nimm halt einfach ne Schnittstelle sozusagen, die das Ganze anpasst, so dass eben. Ne der Client damit zufrieden ist. Ich finde es ganz cool, wenn manche auch von einer Art Übersetzer sprechen, weil das in vielen Fällen auch hilft, das Ganze zu verstehen.
Ne, also wirklich, ich habe 2 Sachen, die einfach nicht kompatibel miteinander sind, also in der Software ganz oft in Interfaces und ich habe jetzt einen Übersetzer und zwar den Adapter, der von Interface A zu Interface b übersetzt im Prinzip
und. N typisches Szenario wo man sowas halt verwendet ist ja dann auch einfach Legacy Code, weil ich hatte ja vorhin schon gesagt, wie man Code wiederverwendbar macht im Sinne von alten Code halt immer noch verwenden kann oder wieder integrieren kann und oder auch so Third partysachen ja, also die jetzt gar nicht so wirklich zu deinem System gehören, also um mal so n bisschen vorwegzugreifen warum das ganze? Also es ist nicht selten, dass man diesen Einsatz hat, sozusagen ne also
beispielsweise. Ich hab n System und das erneuere ich. Aber ich muss halt noch gewisse
Altsysteme anbinden. Ja dann möchte ich natürlich jetzt nicht irgendwie sagen, nee, dann bleibe ich halt auf den alten Schnittstellen. Ja weil das ist das Altsystem und das brauchen wir noch, währenddessen meine Neuentwicklung eigentlich ne ganz andere Richtung geht, dann gehe ich ja eher den Weg zu sagen ich gehe den neuen Weg, aber ich muss irgendwie gewährleisten, dass dieser neue Weg noch mit dem alten System kommunizieren kann und das wäre so n klassischer Anwendungsfall zu sagen.
Dann habe ich so n Adapter dazwischen, der solange ich die Altsysteme brauche, halt noch dafür sorgt, dass die Kommunikation noch korrekt ist. Ja, ja, ich bin irgendwie, weil
du es gerade sagst. Na Altsysteme kann man sich natürlich hinstellen und sagen, ja, ja, altsysteme mach die doch halt neu, ich glaube ich bin auch ne Zeit lang so, auch nach dem Studium oder frisch aus dem Studium raus war ich so n bisschen blauäugig und dachte mir so na ja guck mal, du hast jetzt hier du du kannst irgendwie das ne und dies und jenes, so kennt man ja dann, dann nimmt man das ja auch ne.
Und gerade bei so altsystem ne, da hab ich mich dann früher auch immer hingestellt, so n bisschen.
Also ich übertreib jetzt ne, weil so dass man so sagt, so ja dann mach die halt neu, das ist doch alles, das ist doch alles alt, das ist doch doch Quatsch, das ist doch voll überholt so ne man muss sich aber dann noch wieder im Klaren darüber sein, dass Altsysteme in der Arbeitswelt halt leider Gottes eben einfach da sind, die kannst du nicht einfach wegzaubern oder wegschnipsen, das funktioniert nicht, sondern die sind da und.
Sie neu zu machen, ist manchmal auch nicht wirklich praktikabel. Also es ist ist einfach manchmal. Es wär viel zu viel Aufwand und klar, in einer schönen Welt kann man das auf jeden Fall machen, aber es geht halt nicht immer und deswegen ist es halt n absolut valides Beispiel zu sagen, ey Du musst Legacy Code oder Legacy Systeme anbinden und das ist halt kacke und ich wollt es früher auch. Erst mal ne. Zeit lang nicht wahrhaben, aber aber du hast es halt ne und das ist.
Das ist halt blöd, oder? Zum Beispiel Diese Third Party Libraries. Ich kann mich noch erinnern, ich hab das irgendwann im Studium ne wenn du irgendeine Lib benutzt wo du irgendein Output bekommst von irgendeiner ne von der lib wo du irgendwas aufrufst und dann hast du deine Datenstruktur aber irgendwie anders gebaut ne da ich mein das ist so n so n richtiger ich sag mal so n so n so n. Waffenstyle Adapter, dass du halt immer ernährst.
Converter Weißt du den ich da gebaut hab, aber so mehr oder weniger, da muss ich mal dran denken, dass so das ist so die Vorstufe von einem Adapter, dass du sagst, OK ich konvertiere meine Daten von A nach b, damit es zusammenpasst. Ja, Waffensty ist natürlich unbegriff, also so auf gut Glück das Ganze gemacht, oder? Ja genau. Ja, ich mein, wenn man jetzt mal wirklich so softwarebeispiele nimmt, weil du meintest, so Altsysteme existieren da, es
gibt keinen Weg drumrum. Es ist ja auch oft so, dass es ja nicht bewusst entschieden ist. Ja, wir behalten unser Altsystem, weil es n altsystem und es muss Altsysteme geben, oder wir können es nicht neu machen, weil wir keine Zeit haben. Ja, das sind so Aspekte, aber es gibt ja auch oft den Fall, dass du sagst, das Altsystem hat ne gewisse Lebensdauer. Ja, also beispielsweise alles, was so Richtung.
Wir müssen das noch supporten an Altfunktionalitäten altsystemen, wenn es darum geht ne, dann ist das ja ne gewisse Lebensdauer und dann schreibst du das logischerweise nicht komplett neu, weil es soll ja wegfallen, aber du musst es halt noch meinetwegen ein 2 Jahre supporten und willst aber deine Neuentwicklung natürlich jetzt nicht anlehnen an die Altsysteme, wenn du weißt, nee wir müssen das umbauen, es geht
besser. Und dann hast du genau diesen Fall, dass du dir denkst, ja, aber wir können sie nicht abschalten. Es muss halt noch gewährleistet sein, dass die funktionieren, funktionieren und dann ist so n patter halt denn einfach ne gute Lösung um mal n genaues Beispiel zu bringen. Ja, wir hatten ja schon ganz oft alles so Payment in in Richtung Payment Services mal gebracht, gerade in dieser Design Pattern Reihe, weil man ja viele Pattern daran auch gut erklären kann und jetzt?
Hat man halt verschiedene Anbieter und so moderne Anbieter haben halt ne Schnittstelle, die vielleicht sehr generell ist. Ja also wenn ich jetzt an sowas wie paypal, Stripe, Klarna, was es da halt alles gibt, ne also so.
Sag ich mal. Ich bezeichne sie mal als Moderne Payment Services, ne und dann sind die Schnittstellen wahrscheinlich sehr ähnlich aufgebaut beispielsweise und jetzt habe ich aber irgendwie alte Schnittstellen drin, die ganz andere Daten benötigen, mehr wissen, nicht ne Überweisung von früher weißt du oder oder Lastschrift oder oder oder weiß ich was ja also so einfach mal um so 2 Welten
aufzuzeigen jetzt. Will ich das beides aber noch unterstützen, aber mein System geht hin Richtung sage ich mal diese digitalen Services ja und ich möchte die alten aber nicht verlieren und ich darf sie noch nicht rausnehmen und dann habe ich genau das Thema, dass ich ja in meiner Software aber an einem gewissen Punkt sagen möchte und jetzt bitte bezahlen.
Macht die Überweisung, macht das Payment sozusagen ja und möchte ja im Idealfall die gleiche Schnittstelle ansprechen für alle Payment Services, also für alle Dienstleister die ich da drin habe. So wenn jetzt aber diese Daten die ich benötige komplett anders aussehen könnten von der Schnittstelle her ja, also ich habe jetzt eine Schnittstelle für eine Sofortüberweisung oder wie es hieß und eine Schnittstelle für Paypal meinetwegen und die sind.
Unterschiedlich. Ich kann halt nicht sagen Pay und dann kann ich die Daten da einfach reingeben, die passen halt nicht zusammen, das Matcht nicht, ja dann ist halt so n Adapter da nicht schlecht zu sagen na gut, dann hab ich jetzt pro Payment Service ein Adapter der dafür sorgt, dass die Daten die aus meinem Client, also aus meiner Software selbst kommen, so aufbereitet werden, dass es quasi dem Interface schmeckt und die Bezahlung durchgeführt werden kann.
Also der Unterschied könnte jetzt mir folgen. Der Unterschied könnte jetzt zum Beispiel bei den Daten, von denen du redest, sein, dass zum Beispiel bei paypal brauchst du beispielsweise ne e Mail Adresse sozusagen als Konto ID ne und bei deinem bei deiner Sofortüberweisung halt ne. Iban als IBAN Konto. Genau so und und in der Software hast du jetzt zum Beispiel ne Art nen Kunden ne nen Customer wo die Daten drin sind und rufst Pay auf.
So aber Pay sagt jetzt keine Ahnung die und die Daten brauche ich und du musst jetzt aber gucken, dass du aber alle zufriedenstellen kannst und dann kannst du dafür halt nen Adapter nehmen um die richtigen Daten rauszuziehen und die entsprechende Pay aufzurufen oder n ganz ganz einfaches Beispiel und das kommt auch vor, dass die Schnittstelle. Also zum Beispiel bei so einer Third Party Library einfach die Funktion einfach unterschiedlich heißt.
Ja. Ja, beispielsweise die eine heißt Pay und bei der anderen heißt es Make Payment oder jetzt mal so aus den Fingern gesaugt, aber dann hast du ja schon das Problem, welche Funktion ruf ich jetzt auf, ich will doch eine gemeinsame Schnittstelle aufrufen und dann könnte selbst der Adapter sowas einfaches sein wie ich implementiere n Interface was Pay hat. Und bei dem einen Adapter ruf ich make payment auf und bei dem anderen Pay irgendwas.
Ja genau das genau. Also man, es ist ja im Endeffekt noch mal sowas wie ne Art Hülle drumherum, damit du sozusagen an dieser Hülle sozusagen ansetzen kannst und sagen kannst, OK, ich möchte sozusagen außerhalb dieser Hülle etwas aufrufen, sozusagen ne, also was, was der Client, den hatten wir vorhin angesprochen, dass er sieht ne und was dahinter passiert ist
uns eigentlich egal. Die kleine, der kleine Unterschied, weil ich find da kann man relativ schnell an so n Interface denken, dass du sagst, ja gut, dann sag halt das implementierten Interface und das implementierten Interface. Der springende Punkt dabei ist die eine Seite, also du implementierst ja nicht alles, du kannst ja nicht sagen, OK, meine neue Klasse implementierten Interface mit Pay und ne sagen wir mal IBAN Sofortüberweisung.
Macht dann halt eben dieses Pay und paypal macht halt das andere Pay, sondern ne wenn du beides implementierst kannst du das so
machen. Ne dann hast du weiß nicht kannst auch ne Factory draufsetzen oder so weil wir bei ne bei Design Pattern sind aber das eine existiert ja schon, das heißt du kannst ja das du kannst es nicht anfassen, du kannst es nur verwenden und um es zu verwenden musst du was drumherum bauen damit es quasi genauso ne gleiche Funktion heißt das gleiche zurückkommt oder das sozusagen die Schnittstelle bedient die du brauchst so. Gutes Beispiel.
Sehr gute Anmerkung. Was ich noch, was mir noch einfällt, weil ich find das ist so n geiles Beispiel auch wo wir von Legacy Systemen geredet haben so Real Life Beispiel Stell dir vor du sitzt im Auto hast vielleicht n älteres Auto und n aux Adapter drin jetzt nimmst du die neuen Handys hast n neues Handy, willst irgendwie Musik hören so da gibt es keine Klinke mehr du kannst keine Klinke mehr an deinen an die meisten Handys heute dran schließen ne so kannst Bluetooth
aber dein Auto kann kein Bluetooth. Und dein Handy kann Bluetooth, aber dein Handy kann keine Klinke. Dein Auto kann klinke so ne blöd. Jetzt hast du genau diese 2 Systeme, die nicht kompatibel miteinander sind, obwohl ja dein Auto sagen kann, ey, ich kann Musik abspielen und dein Handy sagt Hey und ich kann Musik geben, aber die Schnittstelle passt halt nicht. Ja und nun?
Ja, genau, und dann wird ne, da gibt es halt diesen Adapter der dann sagt, OK, ich kann sozusagen ne den Bluetooth Adapter, also dieses Bluetooth Ding auf den auf die Klinke stecken und dann mich sozusagen mit dem Handy auf dieses
Bluetooth Ding verbinden. Finden Musik, Hinsenden und das geht dann auf die Klinke. So ne Sachen gibt es ja ne, jetzt kann man sich natürlich hinstellen und sagt Bau dein Radio aus, gut geht bei manchen Autos nicht oder du hast vielleicht das Geld dafür nicht je nachdem oder du willst. Es einfach nicht machen, weil du faul bist. Aber aber das ist ja n super Beispiel. Genau weil jetzt hast du altsystem altes Radio.
Klar kann ich jetzt das System ändern ja und neues Radio da einbauen aber es ist vielleicht auch nicht immer gewollt oder nicht immer möglich ja also genau gehen wir jetzt und dafür ist ja das Pattern da davon aus dieses Altsystem. Deswegen war der Einwand von dir auch noch mal richtig gut zu sagen, du musst jetzt mal davon ausgehen, dass du nichts an dem Altsystem machen kannst oder darfst.
Genau ne, du versuchst nur ne Kompatibilität herzustellen und was an dem Beispiel auch noch richtig klasse ist, weil das kann man sich auch recht schnell jetzt vorstellen, dass n Adapter ja auf unterschiedliche Art und Weise implementiert werden kann und trotzdem das gleiche Ziel hat am Ende ja beispielsweise jetzt so n Bluetooth Adapter, der sagt ich empfange. Über Bluetooth die Musik vom Handy und gibt das über einen Klinkenausgang wieder in den Klinkeneingang vom Radio.
Mhm. Adapter 1 Adapter 2 an einer anderen Stelle ist zu sagen, Na ja, das Problem liegt ja daran, dass n Handy keinen Klinkenausgang mehr hat, sondern nur noch USBC in den bei den modernen. Also gibt es ja auch Adapter, die sagen ich mach USBC und gibt dir nen Klinkenanschluss. Gibt es auch also auch.
Es gibt ja einfach verschiedene, genau, also um einfach mal aufzuzeigen, es gibt unterschiedliche Adapter sozusagen, die das Gleiche lösen und das Münzt sich ja genauso auf die Softwareentwicklung. Es gibt ja auch verschiedene. Möglichkeiten, da können wir ja nachher drauf eingehen, wie man sowas softwaretechnisch umsetzen kann und in den ich find es halt immer gut, dass du an diesen realen Beispielen genau diese
Abbilder siehst. Ja, es gibt mehrere Möglichkeiten, warum mach ich das und so weiter deswegen das ist n super Beispiel und ich glaube um das Ganze noch mehr zu verdeutlichen, wir haben. Bestimmt den ein oder anderen Gamer unter den Zuhörerinnen und Zuhörerinnen und das ist ein Thema, das kennt glaube ich jeder.
Jetzt hast du unterschiedliche Controller in deiner Gaming Karriere ja schon gehabt, also zumindestens mir geht es so, ich war früher immer Team Nintendo, da mach ich mal Team playstation jetzt bin ich wieder Team Nintendo nee nee Xbox Xbox Arena nicht zu hören das ist so dein Ding. Auf jeden Fall. Also wir klammern Xbox Kurz aus.
Du hast jetzt unterschiedliche Controller ne und n Spiel entwickelt ja aber zu sagen OK ich hab ne Schnittstelle ne also um mich spielen zu können um zum Beispiel n Charakter bewegen zu können brauch ich den und den die und die Taste und auf Taste was ist es dann bei Y glaub ich beim Xbox Controller ich bind dich wieder ein ich schließ dich jetzt nicht aus ne. Passiert halt irgendwie Aktion A im Spiel.
Ja. So, jetzt hab ich aber n playstation Controller und wenn ich es jetzt nicht vergeige ich hoffe es ist richtig wär das ja bei mir die Dreiecks Taste. Kann ich nicht verifizieren, ist die Oma. Ja genau, ist gut und dem Spiel ist ja am Ende egal welcher Controller angeschlossen ist. Du brauchst aber halt dieses diesen Adapter, der sagt EY auf die Taste Jump zum Beispiel.
Drückst du Dreieck? Nee, ich Dreieck und du was Y und jetzt können wir die ganze Sache ist ja unterschiedlich, wir können die ganze Sache ja noch weiter treiben und sagen ich weiß nicht, sowas gibt es doch, dass irgendwie leute, ich sag jetzt irgendwas ne so n Spiel mit.
Weiß ich nicht. Mit mit einer Waschmaschine spielen oder so. Weißt du, dass die sozusagen Adapter haben, dass die sozusagen mit ne, also ich glaub nee keine Ahnung hier so Lenkrad weißt du so Ego Shooter mit dem Lenkrad spielen sowas ne passt eigentlich nicht zusammen, aber du hast n Adapter der im Endeffekt dafür sorgt, dass du es trotzdem spielen kannst. Bisschen schwierig, aber ne.
Genau, weil du hast halt wie gesagt diese Schnittstelle, die implementiert werden muss, damit das Spiel weiß. Ich hab jetzt das Signal springen erhalten, genau so. Und was du dran mit einem Adapter anschließt ist ja denn
dir überlassen sozusagen. Und wenn du da keine Ahnung auf der Waschmaschine Start drückst umzuspringen, dann ist das so, aber ich find daran kann man sich das ja auch gut vorstellen, weil jeder kennt ja diese unterschiedlichen Controller, aber du kannst halt mit einem Adapter dann in der Lage sein trotzdem das gleiche Spiel zu spielen am Ende richtig.
Und das ist halt ne coole Sache. Klar, wenn jetzt n Knopf zu wenig da ist, ist was anderes, dann gibt dein Controller der das nicht her, sozusagen ne, aber solange du in der Lage bist diese Daten verknüpfen zu können, kannst du das Halt verwenden. Ja gut, wenn du n Steck, also n Stecker für die Steckdose nicht da reinsteckst, sondern in Sand, dann bringt es halt leider auch nichts, ne.
Ganz genau. Das ist aber toll, das ist eben so. Und bei diesem ganzen Beispiel lass uns mal drüber quatschen, wie das denn jetzt eigentlich funktioniert. Also was denn so der Ablauf dahinter ist. Um das noch mal ein bisschen zu verdeutlichen und dann können wir mal so bisschen mehr in die technische Software Richtung, weil ich denke, Analogien haben wir genug gebracht. Also ich würde mir jetzt denken, ja okay mit dem Controller, da habt ihr mich. Geheilt dem Xbox Controller ne. Ja.
Mach mal weiter. Ah schön. Dann hau mal raus. Also wie, wie, wie kann man sich
das jetzt vorstellen? Ich hatte ja schon gesagt, also es gibt ja zum Beispiel, wenn du es jetzt von den Begriffen her nimmst, ne, es gibt n Client, das ist irgendwie sagen wir mal der oder der Part in der Software, der tatsächlich diese Funktion aufruft, zum Beispiel, was hatten wir vorhin zum Beispiel Pay ne von dem Payment Service, also du hast irgendwie sagen wir mal den Payer ne der Bezahler, die Bezahlerklasse die halt irgendwie dann Pay aufruft oder so ne oder der.
Nennen wir es mal Payment Payment Service. Sowas ja. Pay Manager Manager ist gut. Das müsste ich jetzt machen, um irgendwie vielleicht n bisschen zu triggern. Aber ne, also Payment Service ruft Pay auf und dahin, das ist der Client, der macht halt irgendwas, der Akteur sozusagen ne und dann gibt es halt eben einmal. Das Target Interface ne, das ist quasi genau das, was der Client oder unser Service dann im Endeffekt erwartet, wenn er Pay aufruft.
Ne, dass vielleicht irgendwie Daten zurückkommen oder ne was auch immer, sagen wir mal oder du willst die Pay, also die Zahlinformationen haben die du brauchst, von dem wir vorhin geredet haben und die will sich der Service jetzt holen ne und? Er kriegt halt das was er braucht, ne. Ob das jetzt zum Beispiel von der Sofortüberweisung ist oder von paypal ist egal. Das was er braucht, es wird vielleicht noch Gemappt für irgendwie was, was allgemeingültig in dem eigenen System ist.
Beispielsweise ne und das ist ja das Targetinterface, also das erwartet dieser Client und dann gibt es halt eben die diesen Adepti ne, das ist sozusagen dann die alte inkompatible Klasse, die irgendwie da ist. Existiert, die man irgendwie nutzen muss. Und den Adapter der ich sag mal so gedanklich um den Adaptiv Rumgelegt wird, damit er halt eben passt. Mhm so.
Genau also das ist, kann man sich ja so vorstellen, wenn ich jetzt zum Beispiel diesen das Target Interface aufrufe, weil du meintest, ich erwarte gewisse Daten ne und wenn wir jetzt das Bezahlthema nehmen, dann möchte ich jetzt sowas wissen wie. Ist die Transaktion ausgeführt worden? Ich hätt gern ne transaktions IDN Zeitpunkt wann das gemacht
wurde über den Betrag so weiter. Also da erwarte ich ja in meinem Client gewisse Daten die ich zurückbekomme beispielsweise ja und die muss ich ja jetzt, dafür muss ich ja jetzt sorgen, dass egal mit was ich bezahle, diese Daten auch zurückkommen, ne also dass dieses Interface erfüllt ist, sozusagen diese Schnittstelle. Und wenn wir jetzt so n Adapti haben, wieso Sofortüberweisung? Dann kann es ja sein, dass da gewisse Daten einfach anders formatiert sind.
Ja, das gutes gutes Beispiel ist einfach, dass es anders formatiert ist, dass man die vielleicht noch aufbereiten muss. Ja nimm mal zum Beispiel n Zeitstempel ja, also wenn du sagst, wann wurde die Überweisung ausgeführt, so neue Systeme geben dir das jetzt nach in der Einzeitzone und das ein System denkt sich nee hier. Überweisung innerhalb von Deutschland das ist jetzt nach deutscher Zeit und nicht ISO beispielsweise.
Ja. So, und dann kannst du jetzt sagen, bald den Zeitstempel zurück. Ja gut, dann hast du aber n Stundenversatz drin, jetzt bezahlt einer innerhalb von einer Minute mit Paypal und dann ne, also ne inlandsüberweisung sag ich mal. Ist jetzt rein hypothetisch ne, aber dein System sagt auf einmal da waren aber jetzt da sind ja noch n paar Stunden dazwischen. Ja. So weil. Du dein inkompatibles System angebunden hast.
Was, und das ist n worst Case die Daten irgendwo verarbeitbar sind aber einfach nicht stimmen oder einfach nicht das sind was der Client erwartet. Da hat wohl jemand, da wurde nicht gelesen. Bitoku nicht gelesen und da wär jetzt so n Adapter halt genau richtig zu sagen Hey nee warte mal. Wir müssen natürlich in der richtigen Zeitung im richtigen Format das zurückgeben, wir müssen die richtigen Daten zurückgeben, genau.
Ich hab auch schon Beispiele gesehen und das ist da denkt man sich auch so. Oh Mann ey, ist das notwendig? Ja ist es, dass du zum Beispiel eigentlich die gleiche Funktion aufrufst? Ne, die vielleicht wirklich nur anders heißt oder zum Beispiel sich n Datentyp ändert. Ja, ist jetzt immer so, n Beispiel da gehen alle mal auf die Barrikaden ja ich stell mir vor du bezahlst jetzt was und
der eine nimmt halt. Sag ich mal ganz zahlen ja, um das halt um keinen Rundungsfehler drin zu haben oder der andere sagt durch hier gib mir float hier 5,32€ ja mal als Beispiel und deine Schnittstelle sagt aber nicht ich hätt das aber gerne in Ganzzahlen ja um den Rundungsfehler aus dem Weg zu gehen. Dann Fehler, zack. Fehler so, dann musst du halt auch die mit dem Adapter quasi versuchen das bestmöglich
fingercross ja umzuwandeln dann. Ja. Definitiv. Also finde ich sehr gute Beispiele und im Endeffekt um das jetzt wirklich, wenn du das jetzt implementieren willst. Es gibt ja theoretisch verschiedene Möglichkeiten, wie du ja schon meintest, wir können jetzt angepasst auf das USB C auf aux oder Bluetooth auf aux dieses Adapter Ding können wir anpassen und sagen es gibt verschiedene Adapter Möglichkeiten und zum Beispiel
gibt es die. Sagen wir mal den Object Adapter. Das ist ja also jetzt wirklich als Implementierung ne oder implementierungsvariante ne ist ja eigentlich n relativ gängiger Adapter n gängiges Adapter pattern sag ich jetzt mal, was man halt auch oft verwendet, das
ist im Endeffekt genau. Das, was wir gerade so n bisschen beschrieben haben, ne. Also du kriegst jetzt zum Beispiel von dem von dem einen Controller kriegst du Input und sollst damit irgendwas steuern, ne also oder du kriegst halt von keine Ahnung einem anderen Controller wie zum Beispiel mit dem Lenkrad auch n Input und sollst das halt eben auch sollst auch ne irgendeine Figur steuern beispielsweise, das heißt Du kriegst zum Beispiel von dem einen irgendwie Daten rein von
dem einen System und von dem anderen System ne sagen wir mal das Lenkrad wäre jetzt das zum Beispiel so n altsystem oder irgendwas was eigentlich nicht passt, du es aber trotzdem
anpassen möchtest ne und? Es gibt theoretisch aber ja auch noch die Möglichkeit, dass du sagst, du hast so ne bidirektionale Verbindung. Ne, wie zum Beispiel du hast irgendwie ne Art Kommunikation, ne, also wie wir zum Beispiel vorhin bei dem Real Life Beispiel hatten von Übersetzer ne, so dass du halt irgendwie ne Translation hast. Das heißt 2 Leute unterhalten sich und dazwischen steht n Dolmetscher ne, das heißt du hast quasi. Mehr oder weniger in 2 Richtungen ne.
Es gibt so n tuway Adapter, dass du im Endeffekt das ganze so machst, dass du dieses, diesen dieses Interface was dafür sorgt ne oder beziehungsweise der Adapter selber ne nimmt. Jetzt die Adaptivs sind beides mehr oder weniger, dann adaptivs die dann gegenseitig sozusagen. Übersetzt werden also, das sind beispielsweise jetzt so 2 deutlich, ich nenn es mal eher verschiedene Art und weisen um Adapter umzusetzen, die es zum Beispiel so gibt, ne als Implementierungsvarianten.
Aber was ist denn für dich so, die die gängige Variante, wie es oft implementiert wird oder wie man es halt auch so aus Lehrbüchern kennt? Also ich hatte es nicht gesagt, also ich glaube, ich hatte, vielleicht hab ich es nur gedacht. Ist ja manchmal so, der also ich würde sagen, das wäre der Object Adapter, weil so dieses.
Dieser Tuway Adapter, den hab ich, ich glaub den musste ich selber auch noch nie verwenden, also noch nie, selbst jetzt in einem Real Life Beispiel richtig benutzen ne also in in in einer echten also ne. Echt noch kein Übersetzer geschrieben für die Sprachen. Also nicht Real Life Analogie Beispielmäßig, sondern weißt du so wirklich mal implementieren wusste ich es nicht. Für ne echte Anwendung so aus Spaß mal aber eher der Object Adapter.
Ne, dass du wirklich sagst OK du hast irgendwas was von irgendwo kommt, ne was irgendwie zum Beispiel Daten schickt womit du die du weiterverarbeiten möchtest. Ja, also das ist eigentlich auch wirklich immer das erste, was man so findet, wenn man jetzt danach google und so. Codebeispiele sehen möchte, dass du halt einfach wie gesagt in deinem Target Interface sozusagen ne Instanz beinhaltest von deinem Altsystem und dann direkt darauf mappen kannst. Ne, das ist halt auch sehr flexibel.
Am Ende muss man sagen, hat aber halt n gewissen Overhead auch mit bei sich, ja und? Da muss man ja wir. Hatten uns ja vorgenommen, dass wir auch mal Codebeispiele dazu zeigen wollen. Da arbeiten wir ja schon dran. Und dann reminder an uns, dass wir das dann auch mal darstellen, dann kann man das auch einfach n bisschen besser sehen. Genau.
Aber ich würd gerne mal so vor und Nachteile beleuchten, weil ja kann man jetzt viele denken, sich jetzt vielleicht ja OK kann man draus ableiten, ja ich kann halt als Systeme anbinden, Nachteil ich muss sie anbinden, es funktioniert halt nicht einfach so ja, aber da steckt ja noch n bisschen mehr dahinter, ich finde nämlich n ganz guter Punkt dabei ist auch nicht nur, dass ich sage ich kann Legacy Code.
Wiederverwenden oder weiterverwenden, sondern ich schaffe damit auch eine gewisse, einen gewissen Grad der Entkopplung und das hat man eigentlich an unseren Beispielen auch ganz gut gesehen, weil dieser Client, wie wir ihn nennen oder wie er auch so laut Lehrbuch genannt wird. Erwartet jetzt eine Schnittstelle, aber ihm ist egal wie die implementiert ist oder was dahinter steckt.
Die Logik sitzt ja quasi auf der gegenüberliegenden Seiten, zum Beispiel beim Adapti ja, also bei dem Altsystem und du selbst in als Client möchtest ja nur, dass das ausgeführt wird, was du erwartest und du dementsprechend auch die Werte oder Daten bekommst, die du erwartest. Und dadurch schaffst du halt eine super Entkopplung, dass dein Client die. Dieses Altsystem, diesen Adapti ja gar nicht kennen muss. Ja, ich find das ich glaub das hatte ich auch schon mal gesagt.
Das ist natürlich immer so n bisschen eventuell so n bisschen merkwürdig, dass man sich sagt OK muss man nicht kennen, ist vor allem halt relevant wenn man vielleicht nicht nur alleine an einem Code arbeitet ne also einfach jetzt aus der Sicht heraus, dass du sagst, angenommen du.
Musst jetzt zum Beispiel, du hast die Aufgabe, innerhalb eines Teams neues Altsystem oder n anderes System, was aber nicht ganz zu deiner Schnittstelle passt, anzubinden, weil irgendjemand sagt, Ey, du musst das die Daten, wir brauchen die ne, dann musst du dir nicht jedes Mal überlegen ha, wie mach ich denn das jetzt so, sondern du weißt ja ganz genau OK pass auf, ich brauche diese Daten auf meiner Seite des Systems und ich kriege diese Daten von der anderen Seite des Systems und
jetzt muss ich gucken, dass ich das irgendwie so Mappe mit meinem Adapter, dass ich halt eben. Ne die Daten da rein pipen kann sozusagen ne über den Adapter. Ne das ist im Endeffekt, dass mein System versteht was es all System schickt, weil eigentlich mehr oder weniger die gleiche Sprache gesprochen wird. Ne, also du kannst ja mit Spanisch genau das Gleiche sagen, ne im Deutschen, bloß dass man, wenn man keinen Übersetzer hat, das halt nicht
versteht und. Das ist halt n supergeiler Vorteil, weil du überhaupt nicht dir irgendwie Gedanken darüber machen musst. Wie mach ich das denn diesmal? Sondern du hast ja schon mehr oder weniger n Reglement zu sagen, das braucht mein System, ne. Und das ist halt auch gerade so hinsichtlich von Protokollen, weil wir ja auch so Bluetooth hatten. Ja einfach ne super Sache, weil dem Handy ist ja egal wer am Ende der Empfänger der Bluetooth Signale nenn ich es mal ne ist.
Sondern der Task ist. Sende jetzt bitte Audio über die Bluetooth Schnittstelle. Das Handy macht es ob direkt das Radio angeschlossen ist und das empfängt oder nen Adapter dazwischen ist der es dann weitergibt an das Radio, das ist ja deinem Handy komplett egal. Dein Handy weiß ja nicht, dass es über nen Adapter geht oder über n Radio oder über die ja klassische JBL Box im Garten so ja also das das spielt ja keine Rolle, das ist ja das Gute dabei.
Und was ich natürlich auch gut finde dabei ist oder was man als Vorteil einfach nennen muss, ist auch so diese Single Responsibility. Ja, also das SRP Prinz SRP Prinzip SR Prinzip, dann hatten wir ja auch schon mal in einer Podcast Folge behandelt und es ist halt gut, dass du sagen kannst, ich habe jetzt einen Adapter, der auch wirklich nur diese Aufgabe der Übersetzung. Übernimmt ne. Also ich etablier jetzt einen Adapter.
Ja, ich nutze dieses Pattern um wirklich nur mich darum an dieser Stelle kümmern zu können und dann ist es für beide Seiten OK und spielt keine Rolle, dass da irgendwie n Adapter dazwischen hängt und das gibt natürlich auch ne ordentliche Flexibilität, ja. Ja, definitiv.
Ich mein, diese Flexibilität kaufst du dir natürlich wieder ein, logischerweise durch ne zusätzliche Komplexität, weil du natürlich sagst, OK. Du hast halt eben diesen Overhead von sagen wir mal einem Adapter Interface sozusagen. Was du halt also implementieren musst, warten musst anpassen musst eventuell, wenn du zum Beispiel deinen Adapter anpasst, ne musst du halt auch eben gucken.
OK, angenommen du hast 5 Systeme angebunden, ne so und jetzt sagst du ja aber ich brauche in meinem System aber noch das und das. Und dann kann es ja durchaus sein, dass du zum Beispiel von 3 Systemen oder von 4 Systemen diese diese Daten auch noch bekommst, die du vorher
vielleicht ignoriert hast. Aber beim fünften System musst du halt noch mal irgendwie keine Ahnung 10 verschiedene Daten zusammenführen, ne konvergieren verrechnen, damit du wirklich auf den Wert kommst, den du eigentlich brauchst. Ne, also das muss man sich. Natürlich muss man natürlich im Hinterkopf behalten, dass ne Anpassung des sagen wir mal
Adapters durchaus eben. Auch n bisschen mehr mit sich bringen kann und du halt immer den Overhead logischerweise hast von von dem was du implementieren musst logischerweise ne. Ja, ganz klar, du hast diesen Overhead das das nicht wegzudiskutieren. Du hast natürlich durch diese Flexibilität den Vorteil auch mehrere Adapter verwenden zu können. Ja wenn wir jetzt noch mal auf das Beispiel Controller gehen.
Kann ich ja einfach für jeden Controller den ich habe, diesen Adapter implementieren und sie können, wie wir vorhin meinten, das gleiche Spiel am Ende spielen und dann spielt es keine Rolle, ob ich jetzt gerade mit meinem Xbox Controller oder mit dem playstation Controller spielen möchte, weil ich habe für jeden einen Adapter. Der dafür sorgt, dass die Signale zu den richtigen, also richtig connected werden sozusagen. Und das ist ja ne geile Sache und das gibt halt enorm Flexibilität.
Aber ja wie du meintest, ich komm ja nicht drum rum diesen Adapter für jeden Controller zu schreiben, ich kann natürlich den Ansatz gibt es auch so ne Art generic schreiben ja, also dass ich sage ich habe so n keine Ahnung, wenn ich nicht n wirklichen passenden Adapter hab, dann hab ich noch so n allgemeingültigen und vielleicht passt es gibt es gab es ja auch
früher oft, aber das ist. Ja, das ist ja noch mal ne andere Geschichte, aber grundsätzlich brauche ich halt, ist das ja eher den Fallback, sondern ich hab eigentlich nen
Adapter, der darauf genau passt. Ja genau ich mein gut, du kannst auch Adapter weglassen und wirklich jedes System 1 zu 1 zu anbinden, dann musst du irgendwo ne krasse Unterscheidung machen und sagen, wenn jetzt quasi das und das ist, dann musst du die Daten da und davon nehmen und genauso wie sie sind keine Ahnung das macht es aber am Ende halt deutlich unübersichtlicher. Und also das bläht halt den Code enorm auf. Dann am Ende ne deswegen ja auf jeden Fall.
Also over use ist da auch, also wie hatten wir das so schön immer wenn wir n Pattern kennengelernt hatten, dann haben wir es erstmal massiv genutzt, hier muss man natürlich sagen beim Adapter Pattern over use ist sehr schädlich fürs Projekt. Ja, es ist halt so. Wenn ich jetzt anfange, mir zu denken, Oh, bei jeder Schnittstelle und bei jedem Aufruf, vor allem ich mach mal n Adapter dazwischen, wer weiß was
ich da noch so anbinden muss. Das ist jetzt natürlich nicht Sinn und Zweck, ne. Ja, es ist halt. Am Ende kommt es ja immer auf den auf den Knackpunkt hinaus. Ne, passt es denn zu dem was du gerade brauchst? Und wenn du sagst? Du hast zum Beispiel viele verschiedene Datenquellen, Systeme, die du irgendwie anbinden möchtest, mit denen du irgendwie arbeiten musst.
Wie auch immer, dann ist es natürlich sinnvoll n Adapter zu schreiben oder wenn die Daten so unterschiedlich aufgebaut sind, dass es eigentlich überhaupt nicht zusammenpasst. Ne, dann macht es irgendwann auch Sinn. Also es bringt ja nichts, wenn du sagst. Du hast 5 verschiedene Systeme und System 12345 haben. Alle sind unterscheiden sich so extrem in dem wie die Datenrepräsentation ist, dass es am Ende einfach gar keinen Sinn macht zu sagen, gut dann nehm ich mir halt wirklich.
Du könntest ja also sozusagen wirklich alles einzeln zu händeln. Weißt du, das ist irgendwie dann dann dann kommst du ja völlig durcheinander innerhalb deines eigenen Systems, ne, da muss man halt wirklich gucken, OK, wann macht es Sinn und wann nicht wenn du sagst. Ich. Weiß ich nicht, bin vielleicht auch nur ein System an, dann kannst du es halt auch direkt overfitten sozusagen an dieses eine System.
Ne ja, das stimmt, das stimmt, weil man hat natürlich auch die Gefahr, dass es so ein bisschen Performance Einbußen geben könnte oder Overhead erzeugt. Weil ich halt wie gesagt immer noch ne ne Schnittstelle dazwischen hab oder ne Instanz.
Ja, also wie wir zum Beispiel vorhin meinten, wenn ich einfach in meinem Adapter halt die als Systeme als Objekt halte, beispielsweise um dann darauf ja ich ich nenn es jetzt mal mappen zu können, ja das sind ja alles so Themen, die hätt ich nicht, wenn ich gar nicht erst n Adapter brauche ne also oder gar nicht erst verwende, weil es vielleicht wirklich nicht notwendig ist an der Stelle deswegen over use.
Geht schnell, gerade wenn man sagt, Oh, das Pattern hab ich jetzt gelernt, das will ich jetzt verwenden, aber es geht natürlich einfach. Die Systeme sind kompatibel, packen Adapter dazwischen. Wer weiß, vielleicht sind sie es morgen nicht mehr. Aber wir wollen natürlich auch drauf eingehen, was sind. Wo ist es denn jetzt geeignet, wir haben ja so Beispiele gebracht, wo man schon gesehen hat, oder die haben wir ja gebracht, weil es dafür geeignet
ist. Also Stichwort Integration von Legacy Code, weil ich vielleicht noch n gewissen Support leisten muss. Abgehackt würde ich sagen, haben wir drüber gesprochen, Payment hatten wir angesprochen und das ist n großer Punkt wann das Sinn macht und zwar wenn ich so APIS zum Beispiel vereinheitlichen möchte, ja also.
Ich habe wie gesagt das gleiche Konzept wie zum Beispiel Payment und hab jetzt unterschiedliche Dienstleister mit einer API zum Beispiel und das zu vereinheitlichen und dann Adapter zu verwenden um das zu gewährleisten ist n super Anwendungsfall also da macht es Sinn nicht vielleicht nicht in jedem Fall ne man kann es halt nicht verallgemeinern, aber das ist so n Punkt, da würde ich auch ans an den Adapter denken
sozusagen. Ja, Datenformate konvertieren, gerade wenn vielleicht auch von A nach B und von B nach A. Ne sowas wirklich to way binding, dass du sagst ne irgendjemand schickt zum Beispiel json irgendwas json
mäßiges. Zu zu nem zu nem anderen Client beispielsweise beispielsweise und der liest aber nur XML ne so. Damit du aber sagen kannst, OK hier von a kann json zu XML nach B übertragen werden und aber gleichzeitig möchte zum Beispiel aber auch XML von B wiederum zu a übertragen werden, dann kannst du halt so ne Art Tuwaybinding beispielsweise machen, weil du dann halt eben ne in beide Richtungen irgendwie oder in vielleicht mehrere Richtungen einfach sagen kannst. OK, du hast Daten vom, also
diese diese. Formate passen halt in alle Richtungen überein, dass du es halt sozusagen konvertieren
kannst. Ne und ich glaub am Anfang hatten wir auch gesagt Neue, also Libraries nutzen, dass du halt einfach bestehende Libraries, die es gibt, anbinden kannst und sagen kannst, OK, nimm sie auch wenn es gerade nicht hundertprozentig passt, kannst ja n Adapter nehmen um sie halt eben trotzdem zu nutzen, um halt eben zum Beispiel Libraries nicht noch mal neu schreiben zu müssen oder so ne. Ja, oder die, die vielleicht gar nicht in deiner Hand liegen, ne, aber du sie einbinden oder noch
supporten möchtest. Ja, das sind richtig klassische Beispiele, finde ich. Gut, man muss natürlich drüber sprechen, wann ist es nicht sinnvoll, da hast du ja gesagt, Hey A und b passt zusammen machen halt das dazwischen, das ist natürlich, also wenn Kompatibilität herrscht, auch wenn man vielleicht die Vermutung hat, dass das
zukünftig nicht mehr so ist. You ain gonna need it Prinzip ja, yakni mach es nicht, lass es dann an der Stelle, es ist kompatibel, du brauchst keinen Adapter gerade, also da ist es natürlich nicht sinnvoll. Performance kritische Systeme könnte man noch nennen, weil ich ja meinte es kann Overhead erzeugen, ist so n bisschen schwammig der Punkt aber würde ich einfach mal anbringen, weil was ist jetzt Performance kritisch? Ja, also ist es halt die Frage.
Kann es sein, dass mir das so in die Suppe spuckt, diesen Overhead, den ich erzeuge, dass ich es vielleicht so nicht lösen sollte, krasse Daten ja, zum Beispiel ja auch alles, was hinsichtlich so Datenübertragung ist, kann das halt ne Rolle spielen und vielleicht nicht sinnvoll sein. Alles, so sag ich mal kompatibel zu machen. Also nee sag ich mal alles verlangsamen auf. Zugunsten der Kompatibilität ne. Und dann muss ich vielleicht n anderen Weg gehen um diese Kompatibilität herzustellen.
Ja, auf jeden Fall. Fällt dir noch was ein? Ja, ich weiß nicht, wenn du halt weiß, ich kurzlebige Projekte hast, vielleicht noch, wo man halt eben den Overhead eines Adapters vielleicht sich sparen kann. Ne kennt man ja die guten Wegwerf Software, Projekte, Projekte. Aber das ist auch n guter Punkt.
Hatten wir ja gerade erst vor kurzem mit gerade im Studium oder so. Wenn du so übungsaufgaben hast oder so die ne Lebensdauer von einem Semester maximal haben, ne da ist dann halt auch die Frage zum Üben ja OK, wenn ich sage ich möchte mal n adapterpad dann verwenden OK verstehen wir wie gesagt haben wir auch gemacht. Aber halt nicht alles vollknallen damit, weil es ist manchmal gar nicht notwendig, den quasi diese Kompatibilität zu gewährleisten.
Langfristig richtig also so kurzlebige Projekte finde ich halt auch ganz spannend, dass man sagt, da vielleicht jetzt noch nicht. Richtig, ja. Also zusammenfassend können wir einfach sagen, Adapter Pattern ist mehr oder weniger n Übersetzer ne für Systeme die eigentlich vielleicht nicht unbedingt kompatibel sind und sie kompatibel zu machen. Wie zum Beispiel?
Keine Ahnung der ne Controller was das Controllerbeispiel was wir hatten oder ne hier mit dem Steckdose mit der Steckdose ne wenn der quasi n anderes oder Payment anderes Land reist. Payment wie auch immer genau ja und ansonsten. Ja, Bluetooth Dongle, das ist wichtig. Noch der ne im Auto mit Autos, das sollten wir, der der muss.
Das ist wirklich n gutes Beispiel, weil ich finde, gerade wenn man, also ich weiß nicht wie es bei dir ist, aber wenn ich so über Pattern nachdenke, ja und jemand sagt so na hier Adapter ne, dann denk ich mir so ha mal was mal wie ging, wie hat das noch mal funktioniert und ich finde, dass mir so reale Beispiele immer helfen um wieder in dieses Grundprinzip zu kommen, weil du ja wirklich nur Abbilder davon schaffst ne oder
beziehungsweise sich. Prinzipien und Theorien ja, wiederholen so und du hast die Halt einmal so auf Hardware zum Beispiel gemünzt mit so wie du meintest dein Bluetooth Adapter oder halt auch in der Softwareentwicklung selbst oder halt n Mix aus beidem. In dem Fall ja und da find ich hilft mir das immer mir reale Beispiele vorzustellen und beim Adapter Pattern ist für mich die Steckdose so n super. Geiles Beispiel für mich und jetzt auf jeden Fall. Dieses Bluetooth Ding. Ja OK, sehr gut.
Ja, aber das ist halt so. Ich brauch Strom, ja ich hab Strom, aber wir passen nicht zusammen, aber dann nehm ich n Adapter dazwischen und schon sind alle zufrieden. So ne ja richtig, das ist schon ja OK fabi ich würd sagen kurz und schmerzlos nee ganz so kurz war es nicht, aber wir sind ganz gut in der Zeit und trotzdem würd ich sagen haben wir es ausführlich besprochen, da bleibt eigentlich nur noch 1 und zwar die Frage an dich liebe Zuhörer und liebe Zuhörer.
Welches Adapterproblem hattest du denn schon mal im echten Leben oder in deinem Leben als Entwicklerin oder Entwickler? Schreib uns gerne gerade für die realen Beispiele wären wir sehr dankbar, das finden wir mal sehr interessant. Fällt dir noch was Besseres als die Steckdose oder den Bluetooth Dongle ein? Dann lass es uns wissen. Genau. Hat mir auf jeden Fall Spaß
gemacht. Tino und ich hoffe es hat euch auf jeden Fall auch gute Insights gegeben, auch an dich Liebe zur lieber zur wenn du dir sagst Mensch hier das ist cool, zeig doch auch wirklich mal gerne irgendwie auf Instagram, youtube wie auch immer n paar Patterns die wir vielleicht in dem kleinen Video verpacken, dann schreib uns gerne, sag uns gerne Bescheid alle Plattformen. Sind in den Shownotes verlinkt.
Wenn du sagst ey, hier war mal wieder ne coole Folge, hat Spaß gemacht die Coding Buddies, denen würde ich gerne auch noch mal ne Kleinigkeit, also die würde ich gerne supporten, dann gibt es auch ebenfalls in den Shownotes unten einen Link dafür und ansonsten würden wir uns mega freuen, wenn ihr den Podcast bewertet und Weiterempfehlt das hilft uns natürlich super und bevor wir jetzt hier die Folge ausmachen,
denkt noch dran. Das 4 Gewinnturnier unbedingt mitmachen wollte dich nur noch mal kurz dran erinnern und ansonsten Tino Mach's gut, liebe zura Liebe Zura, bis zur nächsten Folge Deine Colin Walz. Gemeinsam besser.
