Latest / Coding Buddies | Tech & Dev-Mindset / #139 Dekorierst du deinen Code wie er dir gefällt?
Transcript
- 0:00Also es ist jetzt nur ein Gedankenexperiment, ich mach es
- 0:02so nicht. Ja lass es mir so stehen.
- 0:04Du stehst gerade super da, wenn sie das hören, dann denken sie
- 0:07sich so, och Mensch, der Fabi Coding Buddies, Dein Podcast
- 0:12rund um Softwareentwicklung und aktueller Tech News herzlich
- 0:16Willkommen. Hallöchen, Hallöchen, willkommen
- 0:30zur neuen Folge des Cooningbodys Podcasts.
- 0:32Schön, dass du wieder eingeschaltet hast, deine
- 0:34Gastgeber. Und wie soll es anders sein,
- 0:36meine Wenigkeit, der Tino und er lächelt mich wie immer an, der
- 0:41fantastische Fabi, Ich möchte dich begrüßen was geht ab Fabi
- 0:44einen wunderschönen guten Tag Tino einen wunderschönen guten
- 0:49Tag auch an dich gerichtet Dankeschön was geht was geht.
- 0:53Was geht so ab? N bisschen kalt so und grad so n
- 0:57bisschen kalt würd ich sagen, aber.
- 0:59Hast du mal, hast du sagt man das beim beim Kalendertag auch?
- 1:03Hast du mal auf die Uhr geguckt? Nee, also hast du mal in
- 1:06Kalender geguckt, es ist logisch, dass es langsam kalt
- 1:08wird, aber ich find es ist auch so richtig ungemütlich ne also
- 1:12es ist so, das ist ja nicht so kalt schön das ist so kalt,
- 1:16ungemütlich, durchwachsen, ist so nasskalt.
- 1:20Ja, ja, ja, ja, aber das Ding ist so es es kann ja kalt
- 1:24werden, aber trotzdem gibt es manchmal so Tage, wo es einen so
- 1:27fröstelt. Mhm, weißt du, und manchmal ist
- 1:31es nicht so, also es ist o. K.
- 1:33Und heute ist so n Tag wo es dich fröstelt.
- 1:35Na ja, so n bisschen OK. Na ja, passiert passiert, aber
- 1:42ich denk mal im Laufe der Folge ja wenn du wieder so richtig on
- 1:45fire bist fürs Thema, dann wird das schon wieder gehen, dann
- 1:48wirst du dich fangen, dann schwitze ich wieder wieder so,
- 1:54wenn wieder so hart diskutiert wird.
- 1:56Ist aber echt komisch, weil manchmal schwitze ich bei der.
- 1:59Bei der Aufnahme. Einfach.
- 2:03Aufregung, schwitzen vom Reden. Das ist die Anspannung, das
- 2:06kennt glaub ich jeder. Du brauchst ja nicht angespannt
- 2:10sein, weil wir haben heute n ziemlich cooles Thema, worüber
- 2:12wir sprechen können. Aber bevor wir dazu kommen, das
- 2:14ist n Thema, wo vielleicht jetzt der eine oder andere angespannt
- 2:17sein sollte und zwar liebe Zuhörer, liebe Zuhörer, falls du
- 2:20es nicht mitbekommen hast oder noch nicht Teil unseres Turniers
- 2:24bist, es ist jetzt wirklich die höchste oder letzte Eisenbahn,
- 2:27wie sagt man so schön noch mitzumachen, denn nur noch
- 2:32wenige Stunden Minuten am Turnier teilzunehmen, Minuten,
- 2:37Sekunden. Denn wir sind auf der Zigeran
- 2:40jetzt zum Zeitpunkt der Aufnahme und wir sind mega gespannt,
- 2:45wieviel Einreichungen es am Ende wären.
- 2:46Für unser For connect extreme Turnier.
- 2:50Und ja ich ich bin hypefarbig ich weiß gar nicht was ich noch
- 2:54dazu sagen soll, ich bin absolut Hype, die Phase ging jetzt doch
- 2:56recht schnell rum, die Implementierungsphase, es wurde
- 2:58viel diskutiert auf dem Discord, es gab viel Feedback, viele
- 3:01Leute die gesagt haben sie machen mit, ich bin aber nur
- 3:04Hype, ich hab richtig Bock drauf.
- 3:06Ja, ich auch. Ich bin auf jeden Fall gespannt,
- 3:08wie es dann wird, wir werden ja dann das Turnier auf Twitch
- 3:12veranstalten, live und in Farbe sozusagen, und mal gucken, mal
- 3:17gucken, ob wir es überhaupt schaffen, an einem Stream
- 3:20durchzuziehen oder ob wir dafür vielleicht sogar mehr brauchen.
- 3:22Ich bin gespannt, kommt drauf an.
- 3:25Genau das werden wir sehen, wenn wir die finalen Einreichungen
- 3:28ausgewertet haben. Wie viele es dann am Ende sind
- 3:32und. Ja, es gibt auf jeden Fall coole
- 3:35Sachen zu gewinnen. Leute, guckt da mal rein.
- 3:37Auf unserer Website stehen auf jeden Fall die Preise, da kann
- 3:40man mal gucken, was es zu gewinnen gibt, denkt immer dran,
- 3:43gibt auch coole Sachen von unserem Sponsor Jet Brains, also
- 3:47checkt das mal aus, falls ihr es noch nicht gemacht.
- 3:49Habt genau und falls ihr sagt, Nee, das ist jetzt zu knapp,
- 3:54keine Sorge, es werden weitere Turniere folgen, dann macht ihr
- 3:56einfach beim nächsten Mal mit. Und ja genau genug dazu.
- 4:01Lass uns zum heutigen Thema kommen, wir haben nämlich schon
- 4:03lange keine Design Pattern folge mehr gemacht und deswegen geht
- 4:08es da heute auch direkt weiter. Wir hatten ja als letztes uns
- 4:14das Adapter Pattern angeguckt und sind ja damit so in die.
- 4:20Strukturellen Design Pattern gegangen und da möchte ich heute
- 4:24auch weitermachen und ich hab mal n weiteres ausgewählt, was
- 4:26wir uns heute angucken werden und zwar das decorator Pattern.
- 4:32Und möchtest du vielleicht einfach mal so n bisschen
- 4:35anteasern, n bisschen langsam rein in die Folge was es mit dem
- 4:39Pattern auf sich hat. Ja, sehr gerne.
- 4:42Tino, sehr gerne. Und zwar ist das decorator
- 4:46Pattern dient ja dafür. Um wie willst du es sagen, halt
- 4:52Objekte. Wie der Name schon ein bisschen
- 4:54sagt zu dekorieren. Ja, also du kannst zum Beispiel
- 4:58sagen, dass du halt, ich sag mal, wenn du jetzt so n Geschenk
- 5:03hast oder so ne kennst ja ne Weihnachten kommt auch bald,
- 5:06hast n Geschenk und das wird ja meistens irgendwie eingepackt ne
- 5:10und jetzt hast du vielleicht so, dass du dir sagst, ah, dieses
- 5:14Jahr vielleicht mal nicht so viel sich überlegen.
- 5:18Meine Schwester, meine Mutter und meine Oma, die kriegen alle
- 5:21das gleiche. Ne keine Ahnung, kaufst halt das
- 5:24gleiche, packst es aber anders ein, weil du zum Beispiel sagst
- 5:27ne, aber zum Beispiel Mama, die mag lieber beispielsweise Farbe
- 5:31gelb ja und meine Oma zum Beispiel, die mag lieber die
- 5:34Farbe rot, ne. Die Schwester grünt, was auch
- 5:39immer so und dann nimmst du dementsprechend anderes
- 5:41Geschenkpapier ja und packst dann halt dieses Geschenk ein.
- 5:45Das Geschenk ist das Gleiche, ist es unterschiedlich
- 5:47eingepackt, aber zum Beispiel weiß ich nicht für die Oma
- 5:51schreibst du noch ne Karte dazu, die du dann sozusagen noch mit
- 5:53dran klebst. Ne an das Geschenk und bei der
- 5:56Mama machst du aber noch ne Schleife dran und bei der
- 5:59Schwester keine Ahnung, ja dann. Kommt nichts mehr dran, weil
- 6:04reicht schon, das wird eh nicht gewertschätzt, weil es ist nicht
- 6:06keiner. Nein, also im Endeffekt erst mal
- 6:12krass, dass du unterschiedliches Geschenkpapier hast.
- 6:14Ja, also bei mir ist das so. Ich kauf so ne Rolle und da pack
- 6:17ich einfach alle ein, weil es muss ja aufgebraucht werden und
- 6:20dann sehen halt alle Geschenke sozusagen gleich aus, außer
- 6:23natürlich in der im Umfang sag ich mal.
- 6:26Aber vom Geschenkpapier her. Also ich find es erstmal
- 6:28Chapeau, dass du sagst jeder kriegt seine eigene Farbe, das
- 6:31find ich ja richtig toll erstmal.
- 6:33Also es ist jetzt nur n Gedankenexperiment ich mach es
- 6:35so nicht ja lass. Es uns so stehen.
- 6:37Du stehst Grad super. Da, wenn Sie das hören, dann
- 6:40denken Sie sich so, och Mensch, der.
- 6:41Fabi, ich steh jetzt im Zug. Zwar glaub ich nee auch schon
- 6:47mal Geschenkpapier genau, aber im Endeffekt kann man sich das
- 6:50so vorstellen. Du hast also du hast immer das
- 6:52gleiche Objekt da drin ne, also du hast immer.
- 6:54Das also du hast das gleiche Geschenk, weil ich ja meint, das
- 6:56sind immer, es sind die gleichen Geschenke für alle 3 Personen,
- 6:59aber man packt sie anders ein und mit anderen Accessoires zum
- 7:03Beispiel ne also du packst da zum Beispiel verschiedene Layer
- 7:05dran, ne Geschenkpapier Schleife oder Karte oder was auch immer
- 7:10ne es kommen unterschiedliche Sachen dran, aber im Kern ist es
- 7:13halt eben das gleiche und so funktioniert es ungefähr halt
- 7:16eben auch beim decorator Pattern wenn es darum geht, dass du zum
- 7:21Beispiel Objekte erstellst ne und sagst OK.
- 7:24Du kannst die Objekte unterschiedlich dekorieren, mit
- 7:26unterschiedlichen Dingen, aber im Kern ist es das gleiche
- 7:30Objekt, genau, was man da so als Ziel festhalten kann, ist oder
- 7:36die Überlegung dahinter ist, wie kann ich denn Objekte erweitern,
- 7:39wie du so schön meintest? Ja, dass ich jetzt Sie zum
- 7:41Beispiel in Geschenkpapier einpacke, aber sie nicht
- 7:45modifiziere oder neu schreibe. Das heißt, das Geschenk, wie du
- 7:49ja auch meintest, es ist das gleiche am Ende, das heißt, ich
- 7:52habe mit meinem Geschenkpapier einpackungsmanöver das Geschenk
- 7:58nicht verändert, sondern ich habe nur etwas drumrum gepackt
- 8:01und genau darum geht es halt auch und das ganze versucht man
- 8:05jetzt halt nicht über um jetzt n bisschen in die
- 8:08Objektorientierung zu kommen, nicht mit Vererbung zu lösen.
- 8:12Also dass ich sage. OK, ich möchte jetzt die
- 8:15Geschenke unterschiedlich einpacken, also hab ich jetzt
- 8:18vererbe ich jetzt von dem Geschenk an sich und hab
- 8:21Geschenk a rotes Papier Geschenk a gelbes Papier weißt du, dass
- 8:25ich mir so einzelne Klassen daraus vererbe?
- 8:28Das ist halt nicht das Ziel, sondern wie du schon meintest es
- 8:30wirklich herum zu packen und Geschenkpapier ist ne super
- 8:34Analogie weil man das ja auch. Rappen nennt ja, und deswegen
- 8:38wird es manchmal auch halt so allgemein Rapper genannt, das
- 8:43decorator Pattern. Und genau darum soll es heute
- 8:47auch gehen, denn es ist halt auch n sehr mächtiges Pattern,
- 8:51was auch viel eingesetzt wird. Also ich bin mir eigentlich
- 8:54ziemlich sicher, dass jeder, der schon ne Weile codet oder auch
- 8:58relativ schnell am Anfang, wenn man zum Beispiel ja vielleicht
- 9:01mit Python startet oder so, da ist das ja auch so.
- 9:05Ich sag mal nativ in der Sprache eingebaut.
- 9:08Ja, also du kannst halt dieses decorator Pattern wird dir halt
- 9:11überall begegnen oder halt in Frameworks wie Angular.
- 9:16Ja da hast du sowas auch wenn du jetzt zum Beispiel an Components
- 9:19denkst, wie die deklariert werden, ne, dass das auf meta
- 9:21eben erkannt wird, dass es ne Component ist.
- 9:23Da hast du halt auch Decorators oft auch an so at Symbolen.
- 9:28Erkennbar ja. Also man muss mal gucken, was
- 9:30unter der Haube ist, aber das ist so n Anzeichen dafür, dass
- 9:32da halt auch unter der Haube so n Pattern verwendet wird und ich
- 9:37find lass uns mal noch n bisschen bei Analogien bleiben,
- 9:40dass man sich das Ganze noch n bisschen besser vorstellen kann,
- 9:44dann würd ich sagen hau ich mal die nächste rein, also das
- 9:46Geschenkpapier fand ich auf jeden Fall cool, das kann man
- 9:49sich gut vorstellen das ganze, ja das fand ich auch richtig gut
- 9:52ja ja du bist nicht zufrieden mit dir, das seh ich.
- 9:56Das ist. So doof.
- 10:00Aber ich denke, gerade bei der Design Pattern Reihe schulden
- 10:04wir unseren Zuhörerinnen und Zuhörern eine Sache und zwar
- 10:08dass wir ne Analogie mit Essen reden.
- 10:09Also wir werden ja sehr oft sehr oft darauf hingewiesen, dass die
- 10:14Leute immer nach den Folgen Hunger kriegen, weil wir immer
- 10:16so oft über Essen reden und ich finde, das sollten wir jetzt
- 10:18auch nicht einreißen lassen. Und deswegen bringe ich einfach
- 10:22noch mal so ein. 2. Analogien aus dem Bereich des
- 10:24Essens ja, und zwar stell dir vor, Pizza, Pizza, Pizza ist
- 10:31echt. Ja das war klar, ich weiß auch
- 10:343123 Pizza ja Pizza ist halt n super Beispiel dafür, jetzt hast
- 10:41du ja gesagt, wir haben im Prinzip so ne Art Basisklasse,
- 10:44das ist unsere Pizza ja also ne ganz einfache Margarita zum
- 10:47Beispiel. Oder noch einfacher, ohne Käse,
- 10:50einfach nur so mit Tomatensoße drauf.
- 10:52Ne, du hast den Teig, du hast ne gewisse Form und Tomatensoße
- 10:56drauf, das ist so deine Basisklasse, da geht der Daumen
- 10:58hoch, ganz genau fabi das ist super ne super Basis für ne
- 11:02Pizza und ja jetzt möchte ich aber verschiedene Varianten
- 11:07machen, aber ich möchte ja nicht sagen in meinem Code oder sagen
- 11:11wir mal so von der Vorstellungsweise, dass ich
- 11:13jetzt Objekt. Hawaii Pizza um nur mal kurz n
- 11:18paar Leute zu triggern. Ja tono keine Ahnung was es
- 11:22alles gibt, so ja dann will ich ja nicht sagen, das ist also ich
- 11:26sag ja nicht ja nee das ist ne Hawaii Pizza und das ist ne
- 11:29Thunfischpizza im Sinne von das sind 2 komplett unterschiedliche
- 11:33Sachen weil unter die Basis dahinter ist ja die gleiche
- 11:36Pizza ne also wie stell ich diese Pizza her ich es sind ja
- 11:41keine unterschiedlichen Herstellungsprozesse, dass ich
- 11:43nicht die gleiche Basis hab, sondern.
- 11:45Ich belege sie ne, also ich veränder nicht meine ganz
- 11:51klassische Pizza, die liegt jetzt vor mir.
- 11:54Ja keine Ahnung was ist so n Standard 28 Zentimeter
- 11:58Durchwasser keine Ahnung super und dann fang ich halt an sie zu
- 12:04belegen nachdem wie ich sie haben möchte aber ich veränder
- 12:08ja nicht meine Grundpizza und genau das ist das decorator
- 12:11Prinzip dahinter, das heißt? Ich kann während der
- 12:15Herstellung, und das ist jetzt n ganz wichtiger Punkt bei dem
- 12:19Pattern, ich kann während der Herstellung ja entscheiden, wie
- 12:23ich Sie haben möchte, indem ich sie dekoriere.
- 12:26Mhm. Ja, mit Geschenken.
- 12:28Also ich muss ja nicht quasi während ich den Teig ausrolle,
- 12:33ist ja noch nicht wichtig, was für ne Pizza das wird,
- 12:36sozusagen, es ist ja die gleiche Basis, das heißt ja keine
- 12:39Ahnung, ich mach den Schinken drauf, ananaskäse drüber.
- 12:43Ich find das Beispiel einfach super und dann hab ich ne Hawaii
- 12:47Pizza hergestellt. Aber wie gesagt das ist die
- 12:49Basispizza dekoriert mit Schinken, mit Ananas und mit
- 12:53Käse mit Geschenkpapier. Also ich erweiter das und in
- 12:56Geschenkpapier eingepackt am Ende gelbes klar bei Pizza und
- 13:01da das ist halt. Ich find daran kann man das gut
- 13:05erkennen, weil jetzt nehm ich die nächste Basispizza und mach
- 13:08statt den Schinken mach ich dann Thunfisch, Zwiebeln, keine
- 13:12Ahnung was da drauf kommt ne und wieder Käse also käsebuster Käse
- 13:16kannst du fast zur Basispizza erzählen.
- 13:19Ja und und so kann man sich das ganz gut vorstellen ne dass ich
- 13:22sage ich habe ein Objekt was ich nicht veränder, ich erweiter es
- 13:26nur ich dekoriere es nur um quasi.
- 13:29Zur Laufzeit in der Herstellung während ich es tue, quasi nicht
- 13:34im Vorfeld entscheiden kann. Wie soll sie aussehen, ne, weil
- 13:41ich ich sag ja auch nicht ich hab 5 mal die Pizza und 5 mal
- 13:44die Pizza jetzt mach ich den lan auf und jetzt nimmst du die oder
- 13:48nicht die sind in Stein gemeißelt sozusagen ne also ich
- 13:51habe jetzt feste Objekte. Hawaii Pizza und Thunfisch,
- 13:55Pizza und jetzt kommen die Leute gut, ich hab noch 3 Hawaii, nimm
- 13:58davon ein oder nicht. Klar man wir gehen jetzt mal
- 14:01davon aus, dass du sie frisch machst.
- 14:03Ja, sondern du bestellst und kannst dann während der
- 14:07Herstellung entscheiden wie sie aussehen soll und genau dafür
- 14:09ist dieses Pattern halt. Super.
- 14:11Ja, und du hattest es ja eben schon n bisschen gesagt, dass
- 14:16man ja im Endeffekt auf der Karte sagen kann, OK, ich möchte
- 14:20also. Du siehst die Karte und sagst so
- 14:22ich möchte ne Hawaii Pizza, aber es wär irgendwie ganz nett wenn
- 14:24keine Ahnung ich ich möchte nicht den Schinken drauf haben,
- 14:26ich mag total Ananas auf der Pizza aber ich möchte gerne
- 14:30keinen Schinken drauf haben wär das auch möglich, dann kannst du
- 14:32das ja auch theoretisch machen aber und das ist ja genau der
- 14:36Punkt, du hast jetzt zum Beispiel ne Hawaii Pizza aber du
- 14:41hast jetzt zum Beispiel nicht so was wie ne Pizza.
- 14:44Grundpizza, Ananas, grundpizza, Ananas, Schinken, Grundpizza,
- 14:49Ananas, Schinken, Käse. Weißt du also du hast jetzt
- 14:51nicht sozusagen da diese ganzen Permutationen auf der Karte, die
- 14:56du irgendwie vielleicht sag ich jetzt mal, herstellen könntest,
- 14:59weil das wäre jetzt zum Beispiel wieder so ne Art und Weise, das
- 15:03Ganze in Vererbungen oder Klassen zu packen, dass du
- 15:05sozusagen so Klassenexplosionen am Ende hast und sagst, du
- 15:10machst von jeder Eventualität legst du dir halt eben irgendwie
- 15:13im Vorfeld schon mal ne Klasse an, damit du auf alles
- 15:15vorbereitet bist. Ne, und dann hast du natürlich
- 15:19irgendwann einfach nur noch riesen Wirrwarr und das ist halt
- 15:21so n bisschen der natürlich der Vorteil, wenn du sagst, du
- 15:25kannst es halt dekorieren wie du möchtest, ne aber Tino eine
- 15:28Frage warum dekorierst du die Pizza und bildest sie nicht?
- 15:41Also ja, man kann natürlich dabei also auch direkt an das
- 15:45Factory Pattern denken. Ja, also dass du sagst in der
- 15:48Herstellung ne, ich erstelle unterschiedliche Pizza Objekte
- 15:54so, das ist ja haben wir auch drüber gesprochen, kann auch n
- 15:57Anwendungsfall sein, wir haben auch zu dem Zeitpunkt.
- 16:02Burger und Pizza vielleicht auch.
- 16:04Ich weiß es gar nicht mehr. Es ging auf jeden Fall auch um
- 16:06Essen genannt, warum dann Factory Pattern auch in Ordnung
- 16:11ist oder ein Anwendungsfall ist als Analogie und das ist halt
- 16:14genau die Frage, die man sich da stellen muss, wie flexibel muss
- 16:20ich zur Laufzeit sein, das ist eigentlich so der der
- 16:24Kerngedanke ne und möchte ich nicht meine Basis verändern.
- 16:30Ja. Das sind, das sind so die
- 16:33unterschiedliche, also das eine ist ich modifizier, mein mein
- 16:38Objekt und das andere ist auch so n bisschen ich modifizier
- 16:41mein verhalten, wir bringen nachher ich hab noch n mir noch
- 16:44n anderes Beispiel überlegt was so n bisschen technischer ist,
- 16:46wo man das denn noch n bisschen genauer erkennen kann, da wo wo
- 16:51man denn quasi sagen kann hier ist so die Grenze wo zum
- 16:55Beispiel n Factorypad dann gar nicht mehr.
- 16:58Sinnvoll ist, sondern es eher darum geht, n anderes Verhalten
- 17:01aufzurufen und man da eher zum Beispiel sowas wie ein decorator
- 17:05Pattern verwenden sollte. Ich find.
- 17:07Es auf jeden Fall lustig, dass du auf Factory pattern kommst,
- 17:09weil das stimmt. Ich hab gerade tatsächlich an
- 17:12Bilder Pattern gedacht, weil rein theoretisch könntest du ja
- 17:15auch dich hinstellen und sagen, ich nehm zum Beispiel n Bilder
- 17:17pattern um eventuell so ne Pizza aufzubauen, ne ist aber sind
- 17:22aber wie gesagt, man kann ja, das ist ja im Endeffekt genau
- 17:25der Punkt, man kann für. Man kann immer unterschiedliche
- 17:29Pattern theoretisch für das Gleiche verwenden.
- 17:31Die Frage ist aber dann am Ende natürlich welches passt dazu ne
- 17:36und das hatten wir auch immer schon in den Folgen bisher
- 17:38gesagt, es ist meistens so, dass du auf jeden Fall in der Lage
- 17:43bist verschiedene Pattern zu nutzen für das gleiche Problem,
- 17:46aber man muss halt immer n bisschen gucken, OK, welches
- 17:48passt denn jetzt am besten? Manchmal passen aber auch
- 17:51mehrere, das ist n bisschen abwägungssache, ne?
- 17:55Lass uns das noch mal n bisschen klarer machen bei der Pizza.
- 17:58Nicht, dass da jetzt Verwirrung aufkommt, ne, also wenn ich
- 18:00jetzt rein über die Herstellung der Pizza spreche, so wie ich es
- 18:03gerade getan hab, gut kann man sagen kann man argumentieren OK
- 18:07da ist ne Factory oder n Bilder also n herstellungspattern ja n
- 18:11Erschaffungspattern sinnvoller OK gehen wir aber mal wirklich
- 18:17aufs Verhalten, zum Beispiel was kostet mich die Pizza am Ende?
- 18:23Ich möchte jetzt berechnen. Ja, ich glaube, das kennt jeder.
- 18:26Zum Beispiel, wenn man Pizza bestellt und man sagt, ich
- 18:28möchte weitere Zutaten da drauf haben, dann sind da ja so Preise
- 18:33angegeben, ne, also keine Ahnung was hatte ich hawaii, ich will
- 18:37jetzt nur Ananas auf ne normale Schinkenpizza legen lassen, das
- 18:40Kost mich oh Mann ich muss mir irgendwas ausdenken, keine
- 18:44Ahnung ob das realistisch ist 1 50 oder so extra ne für dich
- 18:47Pizza für dich aufpasst würdest du nehmen ist n fairer Deal
- 18:52super ist n fairer Deal. So, und wenn man sich sowas
- 18:56vorstellt, da komm ich halt dann wirklich in das decorator
- 18:58pattern, dass ich sage, ja, berechne mir doch mal was die
- 19:01Pizza kostet ne basispizza ja kostet immer das Gleiche, das
- 19:05ist dein Objekt und das willst du auch nicht verändern, du
- 19:07willst ja jetzt nicht zum Beispiel mit dem Factory Pattern
- 19:10sagen na ja gut, ich erzeuge mir jetzt unterschiedliche, sag
- 19:16schon pizzen, ja und? Den Preis muss ich immer neu
- 19:20setzen, weil ich muss dann gucken, was drauf ist.
- 19:22Ich errechne mir das und kann dann sagen, was die Pizza
- 19:25kostet. So, das kann ich machen, wenn
- 19:28ich ne klein. Also wenn ich ne kleine Variante
- 19:31hab ne wie wir es damals besprochen haben, du hast ne
- 19:34Karte, da sind 5 Pizzen drauf, das sind jetzt 5 verschiedene
- 19:37Objekte sozusagen und anhand mit meiner Factory kann ich
- 19:41entscheiden welche zurückkommt wenn ich mir jetzt aber
- 19:44vorstelle. Jetzt möchte aber jemand Zusatz
- 19:47zusätzliche Zutaten da drauf haben, dann fang ich ja nicht an
- 19:51in der Factory neue Objekte zu erzeugen.
- 19:53Zu sagen Oh warte mal der der Kunde gestern ne der der war
- 19:57richtig crazy, der wollte auf seine Hawaii Pizza einfach weiß
- 20:00ich nicht ja Zwiebeln Sardinen das ist Crazy Sardinen da drauf
- 20:05haben ja und dann warum soll ich jetzt ne Pizza erschaffen ne
- 20:11Hawaii Sardinien was keine Ahnung OK der war schlecht
- 20:13sorry. Und hab halt quasi n komplett
- 20:18neues Objekt dafür, sondern da bietet sich dann ja wirklich zu
- 20:21an zu sagen, nee, ich habe meine Hawaii Pizza und dieser Kunde
- 20:24kriegt jetzt halt da sardin drauf und dann berechnen wir
- 20:29also zur Laufzeit n anderes Verhalten und n neuen Preis und
- 20:33da kommst du halt dann ganz schnell in die Bereiche wo denn
- 20:37ein dekorator Pattern einfach besser ist.
- 20:39Ja beziehungsweise wie du auch meintest, man kann es mit
- 20:42verschiedenen Sachen lösen und das eine.
- 20:44Verbietet nicht das andere. Ich kann ja ne Factory haben und
- 20:47darauf aber trotzdem noch aufbauen.
- 20:50Richtig. Ich hoffe, das hat es mit dem
- 20:52Preis noch mal n bisschen klar gemacht.
- 20:54Ja, ist so. Also ich find es auf jeden Fall
- 20:56fand es auf jeden Fall sehr gut erklärt, auch wenn jetzt zum
- 20:59Beispiel wenn man sich jetzt hinstellen würde und sagen
- 21:02würde, um das jetzt auch noch mal abzugrenzen, du hast n
- 21:04decorator und du hast n Builder, es sind halt erstmals sag ich
- 21:09jetzt mal Design pattern aus verschiedenen.
- 21:14Kategorien ist eines n Erzeugermuster, das andere ist n
- 21:16strukturmuster ne und also sein Decorator ist n strukturmuster
- 21:21und der Bilder ist n erzeugermuster und genau beim
- 21:24Decorator ist es ja so, dass man sagt wie wir ja schon jetzt paar
- 21:28mal gesagt hatten, ich möchte das Verhalten eines Objektes zur
- 21:31Laufzeit erweitern, ne das heißt ich hab jetzt n Objekt und
- 21:34möchte da noch was da hinzufügen das heißt du kannst wie gesagt
- 21:36zur Laufzeit einfach dem Objekt noch ein bisschen mehr
- 21:39dazugeben. Bei einem Builder ist es so,
- 21:42dass du eigentlich nichts anderes möchtest, als relativ
- 21:44bequem ein komplexes Objekt kontrolliert zu.
- 21:48Also erstellen sozusagen ne und da ist es ja so, dass du
- 21:52wirklich ein Objekt hast, ne was du irgendwie erstellst auf
- 21:57verschiedene Art und weisen. Es wird aber n relativ komplexes
- 22:00Objekt sein, bei einem Decorator ist es halt so, dass du
- 22:03eigentlich sagen wir mal n relativ simples Objekt hast.
- 22:06Was du aber immer so je nach Gusto halt eben erweitern
- 22:10kannst, ne. Genau.
- 22:14Um das noch mal abzugrenzen, aber ich find das halt relativ
- 22:16spannend, weil ich kann mir durchaus vorstellen, bei mir ist
- 22:19es zum Beispiel früher mal so gewesen, dass ich mir dachte, so
- 22:22OK, jetzt kommt das Pattern. Aha OK, ja versteh ich, jetzt
- 22:26kommt das pattern aha ja OK versteh ich jetzt kommt das
- 22:29pattern Moment warum kann man eigentlich für alles das Gleiche
- 22:32nehmen weil ne das ist finde ich das macht die Sache weil du es
- 22:35ist ja durchaus möglich mit der gleichen Analogie ähnliche
- 22:38Pattern zu erklären. Aber diese kleinen Feinheiten,
- 22:43die dahinter stecken, und das hat mich zum Beispiel früher
- 22:45manchmal etwas verwirrt, weißt du?
- 22:47Ja, ja, absolut verständlich. Ich find deswegen ist auch
- 22:51wichtig, immer mit vielen Beispielen und Analogien zu
- 22:54arbeiten und deswegen landen wir auch immer beim Essen, weil da
- 22:56kann glaub ich jeder mitreden, weil jeder liebt Pizza und wenn
- 22:59nicht dann krass wow. Aber lass uns noch mal ein
- 23:07technischeres Beispiel technischeres Beispiel auch das
- 23:11Technischere was ist? So du meintest, du hast da noch
- 23:15einen Zauber raus. Genau.
- 23:16Und zwar lass uns mal an so ne nottifire klasse denken, ne.
- 23:21Also wir haben jetzt irgendwie eine Software entwickelt und
- 23:25müssen so Benachrichtigungen rausschicken und haben so nen
- 23:28klassischen Nottifire eingebaut, der e Mails versendet so damit
- 23:32das ist unsere Basis. Ja also damit ging es los.
- 23:36Und haben uns nichts weiter dabei gedacht, nicht irgendwie
- 23:39an Pattern gedacht, weil es gibt halt nur diesen ein Notifire und
- 23:44auch nur die Funktionalität oder das Verhalten, dass E Mails
- 23:47rausgeschickt werden. Und auf einmal heißt es dann, na
- 23:52ja, aber in dem und dem Team oder in der und der
- 23:55Anwendungssache. Wär es halt nicht schlecht, wenn
- 23:59wir zum Beispiel wir nutzen, sag ich mal als Slack auf Arbeit.
- 24:04Ja und wir möchten auch, dass in einen gewissen Channel
- 24:07geschrieben wird. Ja so n klassisches Beispiel,
- 24:10keine Ahnung, unsere Pipeline hat n Fehler geworfen im CIC
- 24:14Detail ist irgendwas nicht am Ende integriert worden oder
- 24:18nicht deployed worden, das wollen wir als Benachrichtigung
- 24:20in so einem Team Channel haben. Als.
- 24:22Beispiel ne. Oder was ist noch klassisch SMS?
- 24:27Ja, ich möchte ne Benachrichtigung aufs Handy
- 24:29haben, von mir aus weiß nicht, dass das SMS für dich klassisch
- 24:33ist, aber na ich find das also Steinzeit, also sagen wir mal du
- 24:37kriegst irgendwie so n das kennt doch jeder, dass du so n Code
- 24:40aufs Handy geschickt bekommst oder so OK touché ja ist OK, es
- 24:44geht auf alles gut, pass auf, du kriegst n Brief nach Hause so
- 24:48jetzt kannst du Steinzeit sagen. Ich schreib dir n Brief mit der
- 24:52Benachrichtigung auf jeden Fall, worauf ich hinaus möchte ist,
- 24:57dass man ja dann in diese subklassen Hölle kommt, ne wie
- 25:01du so schön meintest, weil du fängst ja jetzt nicht an und zu
- 25:04sagen OK warte mal, warte mal. Wir haben jetzt so verschiedene
- 25:07Nortifier ja OK warte mal ne das ist nicht schlecht, da machen
- 25:10wir jetzt, da machen wir, da machen wir Factory, ich greif
- 25:14noch mal ich nehm das noch mal ne so dann haben wir ne.
- 25:17E Mail notifire Slack, notifire, Essen, Essen, Notifire, Brief,
- 25:22Notifire und so kannst du ja anfangen.
- 25:26Aber was ist, wenn jetzt die Leute sagen, na ja, warte mal,
- 25:29warte mal, warte mal, aktuell wär es nicht schlecht wenn wir
- 25:32zu der E Mail noch n Slack notifire hätten, also da die
- 25:35Benachrichtigung kriegen das würden wir gerne genau.
- 25:41Die sagen jetzt einfach, wir möchten das gerne aktivieren.
- 25:43Ja OK, ich baue meine Factory in e mail slack notifire ein.
- 25:47Ja nee, machen wir noch, machen wir noch mal SMS auch noch dazu,
- 25:51weil SMS finden wir toll gut e Mail Slack SMS notifire
- 25:55implementiert so und das da sieht man ja schon, wo soll das
- 25:58hinführen? Du willst ja nicht für jede
- 25:59Kombination jetzt ne Instanz erzeugen mit den gewissen
- 26:03Eigenschaften gerade wenn du zum Beispiel sagst ey ich möchte
- 26:06bitte notifications an und ausschalten.
- 26:08Können. Ja, du willst ja nicht auf alle
- 26:11Individualitäten vorbereitet sein und da nutzt man dann
- 26:15einfach n Decorator und sagt OK, das Standardverhalten ist e
- 26:20Mail, du willst SMS bau ich dir drum rum dein Standard notifie
- 26:25ist der gleiche, nur zusätzlich zu der Funktionalität versende
- 26:28ich noch ne SMS oder ne Nachricht auf dem Slack Channel
- 26:31und da finde ich das ist n richtig klassischer
- 26:34Anwendungsfall. Der wo das Decoratorpad dann
- 26:38einfach so richtig seine Stärken ausspielen kann.
- 26:40Definitiv. Das ist ja auch das, was ich
- 26:42vorhin so so meinte, dass man ja theoretisch, wenn du diesen
- 26:47Decorator zum Beispiel nicht nutzen möchtest, aber.
- 26:51Das irgendwie anders lösen möchtest, kommst du relativ
- 26:53schnell in so ne klassenexplosion, dass du halt
- 26:55irgendwie alle Kombinationen permutationen.
- 26:57Wie auch immer von den entsprechenden Möglichkeiten die
- 27:01du hast, irgendwie kombinierst ne und wenn du sagst, OK du hast
- 27:052, dann hast du halt vielleicht nicht so viele Möglichkeiten,
- 27:07aber je mehr es halt werden, desto mehr Klassen würdest du
- 27:10haben und ich find das ist auch wieder mal n gutes Beispiel zu
- 27:13sagen, du baust etwas. Was zum Beispiel eventuell in
- 27:19Zukunft ne, also das ist halt immer genau so n bisschen das
- 27:22was man so auch bei softwarearchitektur sich dann
- 27:25überlegen kann, weil klar wir hatten über so Dinge gesprochen
- 27:29wie jagny ne you ain't Gonna need it so nach dem Motto OK,
- 27:32ist doch jetzt erstmal egal, du brauchst es gerade nicht und das
- 27:35ist so n Trade auf zwischen dem was.
- 27:39Aber wahrscheinlich in Zukunft passiert.
- 27:41Weißt du, dass du halt gucken musst?
- 27:43OK, klar, du brauchst es nicht, also Bau jetzt zum Beispiel noch
- 27:46keinen Slack notifire, wenn du ihn noch nicht brauchst.
- 27:50Das ist ja logisch, aber setz doch deine deine Software schon
- 27:55mal so auf, dass angenommen sowas würde kommen, du es.
- 27:59Relativ einfach erweitern kannst, ohne dass es hinterher
- 28:02so n Mess wird. Weißt du, dass du hinterher
- 28:04sagst, so, oh mein Gott, wo sind wir hier gelandet?
- 28:07Ne packst noch 5 notifier, die dann in den nächsten halben Jahr
- 28:12dazu kommen mit dran und denkst dir dann auf einmal oh Gott, wir
- 28:15haben aber hier völligen Scheiß gemacht ne das ist so finde ich
- 28:18dieser kleine Unterschied zwischen man muss gucken wie man
- 28:22seine Software baut. Aber nicht das implementieren,
- 28:25was man noch nicht braucht. Ne und das finde ich kann man
- 28:27relativ gut auch mit solchen Patterns dann teilweise
- 28:31gewährleisten, weil du halt sagen kannst, OK ich bau das so
- 28:34auf und kann dann zukunftssicher meine Software sozusagen
- 28:41erweitern, wenn es denn sein muss, aber muss erstmal noch
- 28:45nicht das implementieren was ich noch nicht brauche, das ist
- 28:48eigentlich immer ganz cool und der Vorteil auch von solchen
- 28:51Patterns dann zum Beispiel. Genau, weil das decorator
- 28:55Pattern ja auch wirklich dafür gut geeignet ist, weil du halt
- 28:59deine basisimplementierung, deine Basisklasse ja nicht
- 29:02modifizieren musst. Also du baust wirklich drumherum
- 29:06muss man natürlich auch gucken, dass das nicht ausufert, sag ich
- 29:09mal. Aber dann, da sieht man ja auch,
- 29:11wieso Pattern denn einfach wirklich sehr viel Struktur
- 29:13reinbringen, also in den Code jetzt.
- 29:15Genau. Also es ist im Endeffekt auf
- 29:17jeden Fall NN super pattern um, ich sag mal dieses.
- 29:22Schöne diesen schönen Satz. Man ist offen für Erweiterung
- 29:26ne, aber geschlossen für Veränderungen so.
- 29:30Ja, ja genau das Filter genau, aber dann haben wir jetzt quasi
- 29:37so n zum Beispiel das Beispiel diesen Basisnottifire ne und wie
- 29:41du meintest You aint Gonna need it.
- 29:43Das war einfach zu dem Zeitpunkt genau das was gebraucht wurde
- 29:46und deswegen gibt es halt nur das.
- 29:48Jetzt hatte ich ja gesagt OKSMS Slag alles Mögliche.
- 29:52Wie funktioniert denn das technisch jetzt da n decorator
- 29:55Pattern einzubauen? Genau, also NN decorator
- 29:58Pattern, wenn man sich das so grob überlegt, da brauchst du
- 30:03ungefähr so 4 Klassen, ne also oder was heißt Klassen?
- 30:06Also du brauchst 4 Konstrukte und zwar brauchst du einmal die
- 30:10Komponente selber ne, also nennen wir es mal Komponente ne
- 30:14zum Beispiel diesen Notifire. Das ist aber jetzt keine Klasse,
- 30:17das ist n Interface mehr oder weniger ne was n Interface ist
- 30:20hatten wir glaub ich auch schon 1 der ersten Pattern folgen
- 30:24erklärt und in diesem Interface steht eigentlich nur die
- 30:28Beschreibung drin was so n notifier können muss,
- 30:31beispielsweise ne also was was was soll der können ne zum
- 30:34Beispiel hat der dann die die Funktion notifier und zum
- 30:36Beispiel noch sowas wie was weiß ich ne Get Name hat n Namen
- 30:41kannst du n Namen holen ne also dass du halt im Endeffekt nur
- 30:44beschreibst. Wie n klassisches Interface was
- 30:47kann denn theoretisch dieser also so ein Notifire, ne, also
- 30:51jedes Objekt was ein Notifire ist, kann halt eben dieses
- 30:54Notifire eben machen und wenn du dann sagst, OK du hast dann aber
- 30:58von diesem, von dieser Komponente, diesen Notifire,
- 31:01hast du dann logischerweise auch wieder eine konkrete
- 31:04Implementierung. In dem Fall dann zum Beispiel
- 31:07Simple Notifier, ne beispielsweise simple Notifier
- 31:09könnte jetzt einfach nur der E Mail notifier sein, ne, so
- 31:12kannst es jetzt erstmal nennen wie du möchtest, kannst du auch
- 31:14sagen, OK es ist der e Mail notifier, weil du auf jeden Fall
- 31:16sagst e Mail wird immer versendet, egal was ist ne so
- 31:20also nennen wir es mal abstrakterweise etwas einfach
- 31:22nur simple Notifier der auf jeden Fall ne e Mail rausschickt
- 31:25so ne und wenn du dann implementierst also die
- 31:31Funktionalität notifier. Im simple Notifire in der
- 31:37konkreten Komponente sozusagen. Dann wird auf jeden Fall ne e
- 31:42Mail versendet und wenn du sagst, gib mir mal den Namen,
- 31:44dann heißt es OK, der Name ist jetzt beispielsweise e Mail
- 31:48notifire oder simple notifire wie du möchtest ne sagen wir mal
- 31:51jetzt, der simple Notifire gibt dann halt die e Mail notifire
- 31:54als Name raushält, damit man noch mal so n bisschen den
- 31:56kleinen Unterschied vielleicht so sehen kann ne und dann kannst
- 31:59du halt eben noch diesen Dekorierer.
- 32:03Erstellen und der Dekorierer ist im Endeffekt sagen wir mal ne
- 32:06abstrakte Klasse die den das Interface wie hatten wir es
- 32:12genannt Notifire also diese Komponente implementiert.
- 32:15Ne, das heißt du hast sozusagen dann ein sagen wir mal notifire
- 32:23decorator ne der dann sozusagen den Notifire implementiert.
- 32:30Soweit so gut. Ja, bin bei dir sehr gut.
- 32:35Und dann hast du aber in diesem Decorator, in dieser abstrakten
- 32:40Klasse hast du ein Objekt hängen, was im Endeffekt der
- 32:45Notifire ist, ne, also dieser dieses Interface notifire so.
- 32:52Und jetzt kannst du halt, und das ist jetzt so n bisschen das,
- 32:55was dann oben drauf kommt, einen konkreten Dekorierer ne.
- 32:58Also wir hatten ja ne Komponente, ne konkrete
- 33:00Komponente und jetzt haben wir n dekorierer und einen konkreten
- 33:04Dekorierer sozusagen Implementierung davon genau also
- 33:06wieder ne Implementierung. Vom Decorator sozusagen, von der
- 33:10abstrakten Klasse Decorator ne, also von dem Notifire Decorator.
- 33:14So, und das heißt, du kannst dann zum Beispiel deine E Mail
- 33:17noch dekorieren, wie wir es ja gesagt hatten, wir werden
- 33:19Geschenk zum Beispiel kannst du jetzt anstatt gelbes
- 33:22Geschenkpapier nimmst du jetzt aber zum Beispiel diesen die SMS
- 33:26dazu oder anstatt rotes Geschenkpapier nimmst du dann
- 33:28vielleicht aber beispielsweise die Slack Notification dazu und
- 33:32dann kannst du halt sagen, OK pass auf, du hast halt in deinem
- 33:35konkreten Dekorierer ne, also in deinem.
- 33:39Sagen wir mal Slag decorate, also Slag notifier decorator
- 33:44nenn ich das jetzt mal. Hast du dann die Möglichkeit zu
- 33:48sagen, OK, ich muss ja ebenfalls die Funktionen noti, also
- 33:53Notifier und get Name implementieren muss ich ja auch
- 33:56machen, nur dass dann im Endeffekt, dass du dann sagen
- 33:59kannst, ich kann aber von meiner von meinem simple Notifier die
- 34:03notifier Funktion aufrufen, ne. Und kann dazu aber noch ne
- 34:08andere Notifier aufrufen, also sozusagen in eine eigene
- 34:12Implementierung. Also wird einmal ne e Mail
- 34:14rausgesendet, weil du sozusagen von deiner ursprünglichen, von
- 34:17deinem simple Notifier sozusagen diesen notifier aufrufst und
- 34:20zusätzlich, das ist die E Mail und zusätzlich eben noch dann
- 34:23deine Slacknachricht verschickst ne und genauso wenn du dann
- 34:26sagst, gib mir mal den Namen von diesem Notifier, dann steht da
- 34:29zum Beispiel simple Notifier und.
- 34:34Slack, Not die Fire oder so, dann weißt du auf jeden Fall OK,
- 34:36diese beiden Sachen werden hier also quasi gemacht, so wenn du
- 34:42es jetzt in get Name verpackst ne.
- 34:45So, ja, ja, genau das ist ja auch so n bisschen, dass der
- 34:51Trick dabei, warum das so schön funktioniert.
- 34:54Weil man kann sich das ja wirklich, wieso n.
- 34:56Stapel am Ende vorstellen ne, also ich hab so meine
- 34:59basisimplementierung ich Stapel halt immer weitere
- 35:03Funktionalitäten drauf, das heißt die eigentliche
- 35:08Funktionalität ist die gleiche, ich packe einfach nur noch mehr
- 35:11drauf und ändere aber nicht die eigentliche Implementierung, da
- 35:16zum Beispiel das Beispiel mit dem mit dem Preis für die Pizza.
- 35:22Ja, also wenn ich jetzt halt die dieses decorator Pattern nutze
- 35:26und mir quasi auch immer wieder ne Instanz zurückgebe von dem
- 35:31wie es aktuell aussieht ne. Also ich hab die Basisinstanz,
- 35:33die hab ich OK, dann sag ich also gehen wir mal davon aus wir
- 35:37haben ne Margarita, bauen wir das noch mal komplett auf das
- 35:39Beispiel so da ist nichts drauf, dann sag ich ja jetzt hab ich n
- 35:42decorator Salami und ich Schinken gerade mal vorhin
- 35:45Schinken. So, dann nehm ich jetzt ne
- 35:47Implementierung von meinem Decorator und sag zum Beispiel
- 35:50ist der Schinken decorator. Das ist n klassischer Name für
- 35:53sowas. Ja so und da geb ich meine
- 35:56Basispizza rein, das heißt der kennt jetzt meine Basispizza ne
- 36:02und die hat zum Beispiel sowas wie Get Cost ne und da steht
- 36:06keine Ahnung. 5€ sagen wir mal drin ja genau dann kann ich
- 36:10sagen ich implementiere da ich ja das gleiche Interface
- 36:13implementieren muss get cost. Sag ich.
- 36:17OK, ich habe ja meine Basispizza quasi als Eingabe bekommen.
- 36:22Ja. Dann ruf ich davon einfach get
- 36:24cost auf. Das sind 5€ und Addiere jetzt
- 36:28was 1 50 dazu für den Schinken und das ist meine Get Cost für
- 36:32Schinken n fairer Preis denk ich ja so also sag ich dir einfach
- 36:37ich nehm einfach wirklich die Implementierung, ich rühr die
- 36:39nicht an die Pizza, die Standardpizza kostet weiterhin
- 36:415,00€. Ich bau nur drumherum, dass ich
- 36:45jetzt Schinken drauf lege und sage plus 1 50 genau und gebe
- 36:50das wieder zurück. Und das ist immer noch eine
- 36:52Pizza. Ne, das ist halt das richtige.
- 36:54Immer genau, genau, genau. Es ist immer noch die Pizza, nur
- 36:57dass ich jetzt noch die weiter dekoriert hab, das ist n schönes
- 37:01Wort, passt einfach auch bei Pizza ne man sagt ja ne Pizza
- 37:03dekorieren, das kennt man ja könnten sie meine Pizza?
- 37:07Vielleicht aber auch noch mit ein bisschen Tomaten dekorieren.
- 37:12Guter Punkt, dann legen wir jetzt noch Tomaten.
- 37:14Auch jetzt haben wir die Pizza, wo schon Schinken drauf ist.
- 37:17Und jetzt ruf ich den Tomatendekorierer nehm ich jetzt
- 37:20und erzeug ne Instanz davon, gebe jetzt aber nicht die
- 37:23Basispizza rein, sondern schon da wo der Schinken drauf ist ne
- 37:27und und so weiter und ich Stapel das immer weiter, die Get Cost
- 37:30gibt mir mittlerweile 650 zurück wenn ich die Aufrufe und ich
- 37:33sage plus 1€ so. Und geb das Objekt wieder
- 37:38zurück. Und wenn jetzt jemand davon die
- 37:40Get Cost aufruft, dann steht da halt was sind das denn 57 drin?
- 37:44Genau und genau das ist der Punkt, ich kann es halt immer
- 37:47weiter stapeln und immer mehr Funktionalität hinzupacken genau
- 37:52also trotzdem ist es am Ende meine Pizza.
- 37:54Richtig also das wenn man jetzt sagt, zum Beispiel du hast ne
- 37:57diese Basispizza ne und wie du meintest, du nimmst jetzt zum
- 38:01Beispiel den Schinkendekorierer und gibst daraus natürlich
- 38:04logischerweise wieder ne Pizza zurück aus dieser.
- 38:07Aus der decorator Funktion der des Schinken Decorators und du
- 38:11machst danach diese Tomate, dann ist es ja nicht so, als würde
- 38:13die Pizza sagen, OK, jetzt nehmen wir ne die Schinken
- 38:16wieder runter und machen nur die Tomate drauf, sondern wie du
- 38:20meintest es wird gestapelt ne und das ist halt das das
- 38:24interessante dabei, dass du halt eben nicht sagst OK jetzt das
- 38:28anstatt das sondern das und das so das heißt wenn du jetzt zum
- 38:31Beispiel sagen würdest du machst aber Schinken, decorator
- 38:33Schinken, Decorator, Schinken, Decorator.
- 38:35Tomatendecorator dann hast du natürlich dreimal Schinken drauf
- 38:38und einmal Tomate. So ne.
- 38:40Ja. Genau.
- 38:41Ja, gibt es auch. Manche Leute finden sowas cool,
- 38:44so Doppel, Doppel, Schinken auf der Pizza oder so, keine Ahnung,
- 38:49genau das mal so als exaktes Beispiel Mhm, also im Prinzip
- 38:56was passiert unter der Haube die Methoden die ich ergänze in
- 39:01meiner Implementierung durch meinen neuen Decorator ne da.
- 39:05Die rufen am Endeffekt oder leiten am Endeffekt zu den
- 39:09inneren Objekt weiter verwend die Funktionalität und Kapsel
- 39:13noch draußen, wie du meintest, als wieso n Geschenkpapier noch
- 39:18ne extra Logik drumherum und das ist halt ne wunderbare Sache die
- 39:22sich echt in vielen Fällen gut einsetzen lässt und vor allem
- 39:26gerade wenn es darum geht das zur Laufzeit ja zu entscheiden
- 39:30auch sehr wie soll ich sagen. Straight und Linus also es ist
- 39:37codetechnisch halt dann auch einfach schön gelöst.
- 39:39Es ist erweiterbar, es ist skalierbar und das sind ja alles
- 39:42Faktoren, die man absolut möchte in der Softwareentwicklung und
- 39:48deswegen würde ich gern noch mal auf so n paar Prinzipien
- 39:50eingehen, die hinter diesen Pattern stecken.
- 39:55Was du schon gesagt hast, war ja dieses Open Close principle ne,
- 39:58also offen gegenüber Erweiterungen oder oder offen
- 40:01für Erweiterung und geschlossen für Veränderung.
- 40:03Ja weil ich halt wie gesagt die Basispizza nicht modifiziere, es
- 40:06ist die Basispizza am Ende, dann hatten wir ja gesagt warum nicht
- 40:13Factory in dem Fall weil mit Factory kann ich ja auch
- 40:17unterschiedliche Pizzen erzeugen ja ist richtig.
- 40:21Aber an dem Punkt sagt man Komposition über Vererbung,
- 40:26gerade weil es zur Laufzeit, also zur Runtime dann einfach
- 40:29passiert. Ne, also ich möchte lieber
- 40:31Objekte kombinieren als sie zu vererben, um dann so in diese
- 40:37subklassen Explosion in die Subklassenhölle zu kommen.
- 40:41Genau. Das sind so 2 Prinzipien, die da
- 40:44auf jeden Fall dahinter stecken. Und ein drittes Fabi hast du
- 40:48noch 11 was hinter dem Decorator an sich noch steckt?
- 40:52Single Responsibility zum Beispiel.
- 40:54Das heißt, jede nenn, das Schicht, jede
- 40:58Dekorierungsschicht macht halt nur eine Sache, ne.
- 41:02Also du hast dann zum. Beispiel, Das stimmt ja.
- 41:05Wenn du halt sagst, du hast, du willst halt Schinken drauflegen,
- 41:08ne mit dem Schinken decorator, dann passiert halt auch eben nur
- 41:11das ne. Also du gibst halt eben die
- 41:16entsprechende Verantwortlichkeit zu den entsprechenden
- 41:19Decoratoren halt eben weiter, was natürlich wie wir auch
- 41:22wissen, mittlerweile sehr sehr gut ist.
- 41:26Für zum Beispiel auch die Testbarkeit eines einer
- 41:31Software, beispielsweise ne. Ja, hilft also mit Single
- 41:35Responsibility meinst du ja im Prinzip jetzt zum Beispiel n
- 41:39Schinken Decorator wird auch nur Schinken drauflegen, genau er
- 41:43ist nur dafür verantwortlich Schinken auf die Pizza zu legen.
- 41:45Genau, also du hast keinen Hawaii Pizza decorator, das hast
- 41:49du nicht, sondern wenn du eine Hawaii Pizza haben kannst, dann
- 41:52kannst du vielleicht so ne Art Funktion machen make Hawaii.
- 41:54Ne wo dann zum Beispiel der Schinken Decorator aufgerufen
- 41:57wird und wo dann zum Beispiel der ne Ananas Decorator
- 42:00aufgerufen wird. OK, aber es gibt keinen Hawaii
- 42:03decorator so. Weil dann könntest du wieder.
- 42:06Ja, schon wieder eher den die Factory am Ende.
- 42:07Genau das würde ich sagen, ich bestell ne Hawaii.
- 42:09Richtig, das wäre die Factory und dann hättest du ja schon
- 42:12vielleicht schon wieder so eher so ne Art Vererbung, dass du
- 42:14sagst, du hast ne Basispizza und du hast zum Beispiel ne Hawaii
- 42:17Pizza und die Hawaii Pizza quasi ist ja hat ja als Basisklasse
- 42:21die logischerweise die Basispizza ne bedeutet, aber
- 42:23dann wiederum wie du ja schon meintest, dass es am Ende ja
- 42:27sehr fest und starr ist, weil du musst diese Klassen alle schon
- 42:30kennen, bevor du überhaupt in die Laufzeit sozusagen kommst,
- 42:33ne? Keiner.
- 42:36Ja, das ist eigentlich auch der große Vorteil, weswegen wir das
- 42:39Pattern auch ausgewählt haben, dass du das Verhalten zur
- 42:44Laufzeit anpassen kannst. Das ist der große Benefit
- 42:48dahinter das der riesen Pluspunkt Ne und dass deine
- 42:51Klassenstruktur nicht explodiert, das wären jetzt so
- 42:53mal 2 Vorteile die mir da sofort einfallen.
- 42:56Genau, ich meine Nachteile. Da weißt du ja relativ schnell,
- 43:02was das Ganze mit sich bringt. Du musst halt natürlich, du
- 43:07musst halt gucken. OK, du hast logischerweise
- 43:10irgendwie wieder ne Art Overhead, ne, weil du musst.
- 43:12Wie gesagt, das besteht ja, wenn du es ganz knapp machst, besteht
- 43:15es ja aus, ich sag mal 4 Komponenten die du ja auf jeden
- 43:19Fall irgendwie bringen musst. Du brauchst eine Komponente, du
- 43:22brauchst ne konkrete Komponente, du brauchst n decorator, du
- 43:24brauchst n konkreten Decorator und für jeden Decorator.
- 43:28Du kannst dann halt mehrere Decorator drauf packen, aber du
- 43:30hast natürlich irgendwo immer, ich sag mal ne gewisse Art von,
- 43:35nennen wir es mal Overhead, den du ja irgendwo implementieren
- 43:38musst. Ist halt immer die Frage wohin
- 43:42also wogegen dieser Overhead steht ne Mhm, weil wenn du jetzt
- 43:46zum Beispiel sagst ne, wir wollen halt eben keine
- 43:49Subklassenexplosion haben, dann ist vielleicht die
- 43:52Subklassenexplosion sozusagen halt eher noch der.
- 43:56Schlimmere Overhead, den du an der Stelle hättest.
- 43:59Aber da hängt es dann natürlich wieder logischerweise vom
- 44:02Anwendungsfall drauf ab, was theoretisch noch ne Sache sein
- 44:06kann. Bei den Nachteilen ist, dass es
- 44:09eventuell dafür sorgen kann und da muss man n bisschen
- 44:12aufpassen, dass die Reihenfolge der Dekorierer kann eventuell
- 44:17das Verhalten beeinflussen, je nachdem in welcher Reihenfolge
- 44:20etwas passiert. Da muss man dann n bisschen
- 44:23gucken, ne? Also wenn du jetzt zum Beispiel
- 44:25sowas hast wie ich, sag mal irgendwas, wenn du n decorator
- 44:30nimmst für irgendwelche Gewinne oder so ne bei irgendeinem
- 44:34Jahrmarkt spiel was auch immer und du dann quasi erst plus und
- 44:38dann mal nimmst oder erst mal und dann plus so nach dem Motto
- 44:41ne also wenn du es verdoppelst oder keine Ahnung nur 2 drauf
- 44:45packst in welchem Kontext auch immer, dann kann es natürlich am
- 44:49Ende unterschiedliche Auswirkungen haben auf das
- 44:51Ergebnis. Ja, absolut.
- 44:55Und wenn du dann sagst, ich hab n unterschiedliches Ergebnis und
- 45:00fragst dich wieso oder woran hat es die Link, dann ist das
- 45:05Debugging. Kann dann halt auch sehr
- 45:07anstrengend werden, weil du halt am Ende ein Objekt hast, was
- 45:12halt wie gesagt immer noch dein Basisobjekt so für die Software
- 45:15ist. Und jetzt ist irgendwo in dieser
- 45:19Dekorierung ja über diese Iteration des Stacks n Fehler
- 45:23reingekommen, weil irgendein Dekorator fehlerhaft ist.
- 45:26Ja. Dann die Stelle zu finden, das
- 45:30ist halt dann einfach anstrengender, weil es halt wie
- 45:33gesagt alles aufeinander Stack gestapelt ist.
- 45:37Ja, und natürlich auch so ne Initialisierung kann auf den
- 45:41ersten Blick unübersichtlich wirken, wenn du.
- 45:44Angenommen du übertreibst es halt völlig ja und hast jetzt
- 45:48quasi sozusagen dein deine 5 dekorateuren dekoratoren und du
- 45:55gibst halt immer dekorateuren Dekorateure sagt Mal der so.
- 46:01Und da gibst du halt in den Konstruktor New rein mit dem
- 46:05Vorgänger quasi der im Stapel 1 drunter liegt.
- 46:07Der kriegt n New von dem der da drunter liegt und so weiter bis
- 46:11am Ende beim letzten oder am allerersten Decorator New Base
- 46:16Klasse sozusagen steht und du verschachtelst das halt so, das
- 46:20sieht dann halt nicht schön aus und da fragt sich auch jeder was
- 46:22da los ist. So ne also das kann man auch
- 46:24schöner lösen, aber im Prinzip ist das ja irgendwo die
- 46:28Initialisierung am Ende. Ja.
- 46:31Ja, also die kann also die du musst es halt so aufbauen und
- 46:36das kann halt verwirrend sein. Trotzdem muss man sagen, wenn
- 46:40man das ordentlich codet ja und strukturiert, dann habe ich auch
- 46:44ein sehr sauberes und erweiterbares Design am Ende mit
- 46:47diesem Pattern, was wirklich sehr flexibel ist, was
- 46:52kombinierbar ist und vor allem wiederverwendbar, weil es ja
- 46:55halt diese Eigenschaft zur Laufzeit hat.
- 46:57Genau deswegen kann sich das für flexible Systeme auf jeden Fall
- 47:01lohnen. Definitiv also, wenn man sagt,
- 47:05EY, ich möchte gerne Objekte zur Laufzeit flexibel mit vielleicht
- 47:10zusätzlichen Funktionalitäten anreichern, ja dann ist auf
- 47:15jeden Fall decorator gut, wenn man denn halt eben die
- 47:19ursprüngliche Klasse nicht verändern möchte.
- 47:20Ja, das ist. Ne tolle Sache.
- 47:23Dafür ist der Decorator gut wird zum Beispiel auch genutzt, ganz
- 47:26gerne in so Logging System Caching Systemen, vielleicht
- 47:29auch bei Middleware schichten, aber auch beispielsweise bei UI
- 47:34Komponenten. Ne, dass du zum Beispiel sagst
- 47:36ey du kannst ne das vielleicht kann man sich ganz gut
- 47:38vorstellen, du hast irgendwo ne Komponente wo du sagst du
- 47:42möchtest zum Beispiel ne gewisse Funktionalität weil es einfach
- 47:46nur ne Checkbox ist, möchtest aber zusätzlich vielleicht noch
- 47:48weiß ich nicht noch was. Weiteres hinzufügen in diese
- 47:52Checkbox ne, um sozusagen die Funktionalität dieser Checkbox
- 47:55etwas zu erweitern, aber im Grunde genommen möchtest du,
- 47:57dass die Checkbox weiter in der Checkbox bleibt ne und dann wie
- 48:02gesagt, das sind so Möglichkeiten wo es halt ganz
- 48:04gerne verwendet wird. Ja, absolut.
- 48:08Und da kann man dann die Stärken auf voll und ganz ausspielen.
- 48:12Ja, ich glaub das war es zu dem Pattern, es ist n bisschen
- 48:15komplexer schon. Aber, liebe Zuhörer, liebe
- 48:19Zuhörer, falls du Fragen dazu hast, schreib uns gerne, dann
- 48:23werden wir sie gerne beantworten, falls irgendwas
- 48:27nicht ganz so klar war, dann werden wir da natürlich noch mal
- 48:30nachlegen. Genau.
- 48:32Ja. Es ist natürlich immer ein
- 48:35eventuell eine Herausforderung, Code mit den Worten zu erklären,
- 48:39deswegen auch die Analogien. Aber Liebe zuhören, lieber zur,
- 48:43schreib uns doch gerne auch, wann du das letzte Mal zum
- 48:45Beispiel n decorator Pattern angewendet hast.
- 48:48Welchen Anwendungsfall du dafür zum Beispiel hattest.
- 48:51Und dann kommen wir da auf jeden Fall gerne in den Austausch,
- 48:56entweder über die Mail oder auf n.
- 48:57Discord beispielsweise Social Media geht auch such dir was
- 49:00aus, die Links zu allen Plattformen sind unten in den
- 49:04Shownotes, genauso wie ein kleiner Spendenling.
- 49:06Wenn du sagst, ey Mensch, das ist cool, der Coding Buddies
- 49:09Podcast, der bringt mir was, den hör ich gerne und regelmäßig und
- 49:13ich geb den beiden jetzt mal n bisschen was zurück, würde uns
- 49:16mega freuen. Und ansonsten, wenn du sagst,
- 49:21nee, mach ich nicht, weil man hat ja seine Gründe, dann lass
- 49:24doch aber wenigstens ne kleine Bewertung da für den Podcast.
- 49:27Das würde uns auch mega freuen oder empfehlen den Podcast
- 49:29einfach weiter, das ist genauso viel wert und ansonsten würd ich
- 49:34sagen Tino vielen Dank für diese Folge mal wieder.
- 49:37Auch danke an dich, Fabi. Und ich würde sagen, wir hören
- 49:40uns in der nächsten Folge wieder.
- 49:42Bis dahin deine Korriganz gemeinsam.
- 49:45Besser also. Da ziemlich ob ich ob ich Pizza.
- 49:48Habe ich keine. Ahnung, Pizza, Pizza komm wir
- 49:53gehen, wir gehen jetzt erstmal Pizza bestellen.