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.
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.