Latest / Coding Buddies | Tech & Dev-Mindset / #126 Design Patterns 4 – Builder statt Chaos
Transcript
- 0:00Letztens erst gelernt hab, dass ein Räuberteller das ist, weil
- 0:03irgendwer, ich weiß gar nicht mehr, wo er das bestellt und ich
- 0:05dachte mir, so was willst denn du jetzt was das ist das.
- 0:07Krass. Ich will das auch und dann bist
- 0:11du hungrig nach Hause gegangen. Coding Buddies, Dein Podcast
- 0:14rund um Softwareentwicklung und aktueller Tech News herzlich
- 0:18Willkommen. Einen wunderschönen guten Tag
- 0:32und herzlich Willkommen zur neuen Folge vom Coding Buddies
- 0:36Podcast. Eine Woche ist wieder rum,
- 0:38deswegen gibt es natürlich eine neue Folge und das passiert
- 0:42natürlich nicht mit mir alleine, sondern natürlich auch mit Tino
- 0:44und Tino ist auch. Hier was geht, wie geht's, wie
- 0:46steht's Tino, Was geht ab? Fabi schön, dass wir mal wieder
- 0:51zusammengefunden haben, wie geht's dir alles gut ja alles
- 0:55gut bei mir, alles gut, alles gut, war ein bisschen
- 0:56anstrengend so die letzte Woche aber.
- 0:59Trotzdem ganz gut überstanden, muss ich sagen.
- 1:02Ja, hab richtig Bock, dann ist ich hab richtig Bock immer
- 1:05einmal morgens aufstehen und als oberstes Ziel setzen überleben
- 1:08für den Tag, weil genau man weiß ja ne man stellt ja jeden Tag
- 1:12nen neuen Rekord auf in Tage die man überlebt hat.
- 1:15Genau, ist ja ne schöne Herangehensweise.
- 1:19Ja, aber. August ist auch immer richtig
- 1:21positiv, aber August ist auch immer n bisschen.
- 1:25Finde ich so also in der Zeit so drumherum weißt du so im
- 1:28Augustmonat und dann drumherum so kleckerweise es finde ich
- 1:32immer so n ist n Monat, da ist viel los, jedenfalls ne von
- 1:36daher geht. Es auch.
- 1:36Also es ist natürlich, es ist natürlich Sommer und
- 1:39gleichzeitig bedeutet das bei den meisten, das auch viel
- 1:41geplant ist, die Wochenenden verplant sind, aber ich sag mir
- 1:45dann immer lass mal nicht genervt sein davon, weil es ja
- 1:49schön wenn schönes Wetter ist. Es ist schön wenn man viel
- 1:51vorhat. Und auch wenn es n bisschen
- 1:53stressig manchmal wirken kann oder wird, sollte man das
- 1:56einfach genießen. Unbedingt schöne Zeit, da hast
- 2:00du recht. Tino und in dem Sinne wollen wir
- 2:02auch einfach ganz positiv an die ganze Sache rangehen, und zwar
- 2:07mal gucken, was wir jetzt heute besprechen in der neuen Folge,
- 2:11weil ich mein Podcast ist immer was Positives.
- 2:14Das ist schön, das ist mal n Highlight.
- 2:17Auf jeden Fall. Und also ich sag mal so, bevor
- 2:20wir jetzt ne das Obligatorische zum Thema kommen, wollen wir
- 2:23noch mal einmal ganz kurz dran erinnern, dass Liebe zu und
- 2:27lieber Zuhörer, vergiss nicht diesen Podcast zu abonnieren und
- 2:31diese wunderbare Glocke, die es zu betätigen, weil dann ist auf
- 2:36jeden Fall garantiert, dass jede Folge die angezeigt wird
- 2:38beziehungsweise dass du keine mehr verpasst, also da auf jeden
- 2:42Fall dran denken. Ich hab übrigens mal
- 2:43nachgeschaut. Sie existiert, diese ominöse
- 2:46Glocke, und man kann draufklicken und man kriegt dann
- 2:48wirklich Benachrichtigungen. Das war echt so ein Game Changer
- 2:51für mich gewesen. Stark, Tino kann jetzt auch
- 2:54seine Podcasts alle hören die ihr so hört, ich wurde jetzt
- 2:58auch informiert, das ist. Gut, aber Tino sagte mal, worum
- 3:03geht es denn heute, was steht heute so in den Staatlichern,
- 3:06was steht an, worum geht's? Wir machen heute weiter mit
- 3:09unserer Design Pattern Reihe und da hab ich auch ziemlich Bock
- 3:12drauf, weil wir haben ja auch gutes Feedback dazu bekommen.
- 3:15Ist natürlich sag ich mal ne sehr grundlegende, also ne
- 3:18grundlagenreihe aber ich finde es ist cool sich einfach mit
- 3:21jedem Pattern noch mal zu beschäftigen das noch mal zu
- 3:23verinnerlichen sich auch mal Codebeispiele dafür anzuschauen
- 3:26und egal ob man jetzt Einsteiger oder fortgeschritten ist, es
- 3:31lohnt sich einfach sich damit auseinanderzusetzen, weil es
- 3:34halt einfach auch. Best Practices beinhaltet in
- 3:38vielen Fällen und man dadurch einfach auch seine eigene
- 3:41Codequalität steigern kann. Und heute möchte ich mit dir
- 3:46fabi über das Bilder Pattern sprechen und das Ziel sollte mal
- 3:51so sein, wann braucht man es, wann sollte man es verwenden,
- 3:54wann ist es eher ein Overkill und unnötig.
- 3:58Und ich würde dabei auch gerne mit dir besprechen, was so das
- 4:01klassische Pattern ist, weil wir betrachten das ja meistens immer
- 4:04so wirklich lehrbuchhaft erstmal.
- 4:06Also so wie es mal definiert wurde, sag ich mal.
- 4:09Also die klassische Methode und möchte aber auch gerne auf
- 4:12moderne Varianten mit dir eingehen.
- 4:14Gerade wenn man n gewissen Frameworks, da können wir ja
- 4:18Beispiele nennen, unterwegs ist, sieht man halt ähnliche
- 4:21Konstrukte, die eigentlich dieses Pattern abbilden, aber
- 4:24nicht so im klassischen Sinne und da möchte ich gerne mit dir
- 4:27auch mal drauf eingehen, wieso moderne Interpretationen davon
- 4:30aussehen, sag ich mal. Ja und wie üblich wird es
- 4:34natürlich, ich hab ne kleine Analogie mitgebracht, Fabi,
- 4:37diesmal hab ich eine. Wird es wiederum essen gehen wie
- 4:41immer in unserer Design Pattern Reihe und schön, dass du schon
- 4:44gesagt hast. Also Leute, wenn ihr keine
- 4:46Essenstipps von uns verpassen wollt, abonniert diesen Podcast.
- 4:51Aber das ist natürlich auch ist uns selber aber aufgefallen, wir
- 4:56haben sehr viel, ich meine nehmen wir das mal hungrig.
- 5:00Auf oder so also. Irgendwo muss es ja herkommen.
- 5:02Ich. Weiß es auch nicht.
- 5:05Das Feedback war auch einfach geil so.
- 5:07Wir hatten ja gesagt, Ey, wir müssen jetzt erstmal Burger
- 5:09bestellen nach einer von den Folgen und dann haben wir auch
- 5:11das Feedback bekommen, so Ey, Leute wegen euch muss ich echt
- 5:14erstmal Essen bestellen, supergeil schreibt uns Leute wir
- 5:19freuen uns über solche Nachrichten, es zieht auf jeden
- 5:21Fall einfach. Ja, auf jeden Fall, aber
- 5:24definitiv. Ich würde auch am Ende noch mal
- 5:25gucken, dass wir vielleicht sagen, so wie oft benutzen wir
- 5:28das Pattern, wie oft glauben wir, dass das Pattern noch
- 5:30eingesetzt wird und so weiter so im generellen.
- 5:33Einfach, dass man noch mal ein bisschen einordnen kann, ist es
- 5:35interessant für mich oder vielleicht nicht?
- 5:38Aber insgesamt ist es natürlich nicht schlecht, darüber Bescheid
- 5:41zu wissen, egal an welchem Punkt man steht.
- 5:43Wie du schon meintest und genau ich meine, wenn wir jetzt
- 5:47reingehen mal so in das Thema und sagen ne im Endeffekt gibt
- 5:51es ja diese Pattern, das ist ja immer irgendwie ein gewisser
- 5:53Grundgedanke, der irgendwie einen Sinn hat wo man sagt, OK,
- 5:56dieses Pattern wurde ja nicht ohne Grund irgendwie ins Leben
- 6:00gerufen. Und genauso ist es halt eben
- 6:06auch beim Bilder Pattern und wie gesagt, in diesem Ganzen dieser
- 6:10ganzen Pattern Serie sind wir auf jeden Fall immer irgendwo im
- 6:14Objektorientierungsbereich. Also das bleibt eigentlich nie
- 6:17aus und wenn man sich jetzt zum Beispiel mal überlegt, wenn also
- 6:23das Bilder pattern, wieso ist das zum Beispiel da?
- 6:26Es ist halt, wenn man das jetzt so ein bisschen zusammenfasst,
- 6:31ich. Glaubt man kennt das oder man
- 6:34wird auf jeden Fall irgendwann dahin kommen, dass man
- 6:35vielleicht irgendwie n Objekt hat, wo unglaublich viele, sagen
- 6:39wir mal, Parameter in einen konstruktor reingegeben werden.
- 6:43Ne, also ich glaube als ich angefangen hab irgendwann mal zu
- 6:45programmieren und mein erstes Objekt instanziiert habe, das
- 6:50war glaube ich einfach nur sowas wie New My object und das war es
- 6:53ne also es gab keine Parameter und im Normalfall zumindest war
- 6:58es bei mir auch so. War es ganz oft so, dass eben
- 7:01vielleicht die Parameter in den Konstruktor, wenn du n neues
- 7:04Objekt erzeugen möchtest und sagst, ey, das Objekt was ich
- 7:07jetzt habe, habe ne was ich jetzt erzeugen möchte das das
- 7:11kann ich manchmal vielleicht so manchmal so erzeugen, das heißt
- 7:13du gibst irgendwie n Parameter rein um halt eben irgendwie dem
- 7:16Objekt noch was mitzugeben und das das kann natürlich relativ
- 7:22schnell auch mal eskalieren, dass du zum Beispiel sagst, OK,
- 7:25du hast jetzt vielleicht nicht irgendwie nur einen Parameter,
- 7:27sondern hast auf einmal 10 Parameter, weil.
- 7:29Ne, das ist so find ich auch so n so n so ne typische
- 7:32Entwicklung, dass man sagt EY ich hab jetzt n Objekt und dann
- 7:35denkt man sich irgendwann na ja ja irgendwie müsste ich doch das
- 7:38Objekt noch so n bisschen parametrisieren können na gut OK
- 7:41ich geb mal n Parameter rein und dann findet man besser hast du
- 7:45auch mal Blut geleckt und denkst dir so boah geil ey let s go da
- 7:48kann ich noch was reingeben und noch was noch was noch was und
- 7:51irgendwann checkst du gar nichts mehr.
- 7:53Gerade wenn du vielleicht noch sagst, der Parameter, der darf
- 7:56da sein, aber muss auch nicht unbedingt, der ist jetzt nicht
- 8:00wirklich zwingend und so weiter und dann hast du halt einfach
- 8:03irgendwann so viele Felder, so viele Parameter, die du
- 8:08irgendwie in den Konstruktor rein gibst, dass du halt
- 8:09irgendwann sagst, keine Ahnung, ich kann das hier, ich, ich
- 8:12verstehe gar nicht mehr was los ist.
- 8:13Ne und es kann schnell passieren.
- 8:15Ja, also du kommst halt an den Punkt, gerade auch als
- 8:19Einsteigerin oder Einsteiger, dass du irgendwann Code hast,
- 8:22der. Nicht mehr wirklich lesbar und
- 8:24wartbar ist. Und das ist ja immer so das
- 8:26große Problem, was man vermeiden möchte, ne egal wie lange man
- 8:30schon codet das gilt es immer zu vermeiden, dass man in diesen in
- 8:33diese Gefahr läuft sozusagen. Und was du meintest, so die
- 8:38Anfänge, da muss ich auch sehr oft an unser Studium denken, wir
- 8:41hatten ja auch so grundlagenkurse Einführungen in
- 8:44die Informatik, hieß einer, wo wir halt auch wirklich so.
- 8:47Ich glaub ich mit Java gestartet sind.
- 8:49Dann hatten wir so Algorithmen und Datenstrukturen, wo man halt
- 8:52einfach auch so gewisse Sachen gelernt hat, auch so auch
- 8:55Pattern zum Beispiel und ich weiß noch und das ist nämlich
- 8:58auch n Problem, wo man ganz schnell reinläuft, wenn man
- 9:00jetzt viele Parameter hat, ja und die Sprache in der du
- 9:04entwickelst, wie zum Beispiel Java, was wir hatten,
- 9:08unterstützt, unterstützt, dann halt overloading ne, also dass
- 9:12du den Konstruktor einfach überlebst und sagst, Na ja, OK
- 9:15der ist jetzt echt sehr sehr. Unübersichtlich also überlade
- 9:18ich den und sag, es gibt den einmal mit 2 Parametern.
- 9:21Es gibt den mit 3 Parametern 45 kurze Pause 89 weißt du also
- 9:28dann kommst du halt in so einer overload Hölle.
- 9:31Und das passiert auch schnell, gerade wenn du, sag ich mal,
- 9:34gelernt hast. Oh, das geht ja ja wie du
- 9:36meintest. Blut geleckt.
- 9:37Oh oh jetzt, jetzt kann ich meinen Code ja richtig schön
- 9:40optimieren, jetzt überlade ich hier einfach alles und das sind
- 9:42halt alles so Anzeichen dafür, dass irgendwas in deiner
- 9:46Struktur nicht stimmt und sehr unübersichtlich wird und das
- 9:50sind im Prinzip, wie soll ich sagen, Anzeichen dafür, dass du
- 9:54vielleicht ja und dafür wurde das Bilder Pattern ins Leben
- 9:57gerufen auf n Design Pattern zurückgreifen solltest.
- 10:01Oder ein Fall, den ich noch kurz erwähnen möchte.
- 10:04Was noch schlimmer ist, wenn du sagst, nein, ich möchte jetzt
- 10:06mein Objekt nicht instanziieren und konfigurieren an der Stelle
- 10:10mit 8 Parametern, sondern ich entschlanke das und werde jetzt
- 10:14im Code verteilt irgendwo irgendwie dieses Objekt weiter
- 10:18initialisieren mit zum Beispiel Settern.
- 10:21Ja und das klingt halt erstmal wieder irgendwie so im Sinne der
- 10:25Objektorientierung. Ja ich hab Getta und Setter ja
- 10:27alles richtig. Aber dann verteilst du irgendwo
- 10:30in deiner Codebasis im Prinzip die Initialisierung deines
- 10:33Objekts und das ist halt auch nicht schön am Ende und
- 10:36unübersichtlich genauso. Oder wenn du jetzt sag ich mal
- 10:40das alles in Subklassen irgendwann auslagerst ne und du
- 10:43abstrahierst dich in 1000 ebenen runter, das ist halt alles nicht
- 10:47Sinn und Zweck am Ende und deswegen wurde sich sowas wie
- 10:51das Bilder Pattern überlegt und ich finde.
- 10:54Und da möchte ich jetzt mal auf die Analogie eingehen.
- 10:56Das Bilder Pattern kann man wirklich wieder wirklich schön
- 10:59mit Essen erklären. Man kann alles mit Essen
- 11:03erklären. Und zwar dachte ich mir nämlich,
- 11:06es geht um Essen. Ja OK, das ist jetzt so unser
- 11:08Signature Move, aber ich möchte mal noch so n Beispiel dabei
- 11:11nehmen was alle glaube ich so sich gut vorstellen können weil
- 11:14es ne schöne Sache ist. Stell dir vor wir beide sind und
- 11:18du Liebe zuhören Liebe zuhören natürlich auch wir 3 sind
- 11:21eingeladen zum Essen und es gibt n.
- 11:24Buffet das ist geil. Buffet mag jeder ne n schönes
- 11:27Buffet mit ganz vielen leckeren Sachen und man kann sich das so
- 11:30einzeln aussuchen was man haben will, man kann die Menge
- 11:33bestimmen Oh das war super lecker, das esse ich in der
- 11:36nächsten Runde noch mal. Weißt du diese Gedankengänge die
- 11:39man dann hat? Ja, du bezahlst Geld dafür, dass
- 11:41du dir so viel Teller holen kannst, wie du willst, aber
- 11:44holst dir maximal 2. Ja, ich will.
- 11:48Jetzt sagen, ich lass uns mal nicht in diesen All you can eat
- 11:52Gedanken, da will ich gar nicht unbedingt.
- 11:54Und jetzt stell dir vor, du gehst los zum Buffet und
- 12:00möchtest dir jetzt Essen holen. Freust dich schon so richtig
- 12:03auswählen zu können, dir erstmal alles angucken zu können und
- 12:06dann gezielt Sachen auf deinen Teller zu machen, zu sagen, ich
- 12:10möchte ein bisschen davon und ein bisschen davon und nehme ich
- 12:12eine Vorspeise, erstmal gucken was für Vorspeisen es gibt, so
- 12:15weißt du und jetzt steht da aber einer du kriegst einen Teller.
- 12:20Beziehungsweise du kriegst nicht mal den Teller so klassisch,
- 12:22dass du einen Teller in der Hand nimmst und Losgehst, sondern da
- 12:24steht jetzt eine Servicekraft und sagt, so was darf es denn
- 12:32für sie heute sein? Du denkst dir so, naja, ich
- 12:36möchte jetzt einen Teller gerne haben und zum Buffet gehen und
- 12:38das stückweise für mich hier klären was ich essen möchte.
- 12:43Nein du möchtest jetzt bitte sagen was du haben möchtest vom
- 12:46Buffet und. Und die Servicekraft wird dir
- 12:49diesen Teller zurecht machen und ihn dir geben.
- 12:52Das heißt, du gehst nicht wirklich direkt zum Befehl,
- 12:54sondern du kriegst zum Zeitpunkt, wo du das entscheiden
- 12:57musst, den ganzen Teller. Ja, die Servicekraft ist der
- 13:00Builder. Nein, warte, warte, die
- 13:04Servicekraft ist im Prinzip, erstelle mir einen Teller mit
- 13:09dem Essen erstmal nur, also du musst genau an der Stelle
- 13:13entscheiden. Was möchte ich haben jetzt
- 13:16sofort, du kriegst jetzt einen Teller und da ist das drauf was
- 13:19du sagst und da sind wir ja bei unserem Konstruktor mit den
- 13:22ganzen Parametern. Vorspeise ja nein, welche
- 13:25Vorspeise möchtest du noch ein Getränk drauf haben?
- 13:27Jetzt vielleicht nicht auf dem Teller, wenn du jetzt ein
- 13:29Tablett hast oder so ne und so weiter und das fühlt sich doch
- 13:33einfach in diesem Szenario überhaupt nicht richtig an was
- 13:36du machen möchtest ist ja Schritt für Schritt dir diesen
- 13:39Teller aufzubauen, du möchtest ja gucken.
- 13:43Ist denn überhaupt noch was da? Was für Vorspeisen gibt es denn
- 13:46ja auch, doch das sieht gut aus, ich mach mir mal nen Löffel
- 13:49drauf und dann gehst du weiter und so füllt sich nach und nach
- 13:52dein Teller, das heißt dein Objekt wird nach und nach
- 13:54definiert und wenn du zum Platz gehst, hast du deinen fertigen
- 13:58Teller mit dem Essen deiner Wahl in der Menge deiner Wahl, sogar
- 14:02in der Reihenfolge aufgetan deiner Wahl so gesehen und gehst
- 14:06zu deinem Platz und hast deinen fertigen Essensteller OK, also
- 14:09das ist doch eigentlich die bessere.
- 14:12Art und Weise, wie du an einem Buffet essen möchtest.
- 14:14Okay also du hast quasi gesagt der die Bedienung die das auftut
- 14:19ist sozusagen der Konstruktor, den du halt in einem bestimmten
- 14:23Raster sozusagen vor wie vorgegeben, so sag ich jetzt
- 14:27mal, bedienen musst. Wenn du aber zum Beispiel das
- 14:31einfach selber dir auftun kannst, wie es ja beim Buffet
- 14:33eigentlich normalerweise der Fall ist, dann bist du im
- 14:35Endeffekt der Bilder, der dir am Ende das Objekt Abendessen baut.
- 14:40So die Richtige, ja, zum Beispiel den Teller, den
- 14:42Essensteller. Ja, genau.
- 14:44OK, und alle solche Sachen wie Optionalität, wie du schon
- 14:48meintest ne, gibt es überhaupt noch Nachspeise die ich haben
- 14:52möchte weiß ich ja zu dem Zeitpunkt gar nicht, wenn ich
- 14:54nicht mal im Buffet stehe, es kann ja sein, dass die gerade
- 14:56gewechselt wird oder leer ist, dann kann ich ihm vorne ja
- 14:58sagen, ja ich möchte jetzt bitte Dessert das und das und er denkt
- 15:02sich so OK aber ich weiß nicht ob es da ist.
- 15:04Also du kannst ja so optionalitäten dann wirklich
- 15:07schwer überblicken. Und vor allem warten in dem Fall
- 15:10dann auch ne. Das wär aber auch blöd, wenn du
- 15:13da extra ne Kraft hast die das macht und ich würd gern das
- 15:16keine Ahnung ob es das gibt. OK kommt einfach mit dem
- 15:19Lernteiler wieder zurück es tut mir leid Sir wir haben es nicht
- 15:23Black. Ja, aber find ich auf jeden Fall
- 15:26ganz gut. Ist ne schöne Analogie und
- 15:30stellt im Endeffekt auch genau das dar, was so n so n Builder
- 15:34dann am Ende macht. Das heißt?
- 15:38Du hast im Endeffekt ein. Du hast im Endeffekt für mich,
- 15:42ich würde es jetzt so sagen, dass das Builder Pattern so eine
- 15:45Art, ich nenne es jetzt mal Helper ist, der dir am Ende dein
- 15:51gewünschtes Objekt nach deinem Gusto sozusagen zusammenstellt,
- 15:54richtig? Genau.
- 15:57Ja. Also wir können ja mal.
- 16:00Auf das klassische Bilder Pattern so lehrbuchartig drauf
- 16:03eingehen. Also es ist auch n creational
- 16:05Pattern, das heißt es passt noch ganz gut zu den bisherigen und
- 16:09im Prinzip geht es darum komplexe Objekte wie zum
- 16:13Beispiel ein Essensteller, wo ganz viele teilgerichte sag ich
- 16:19mal drauf sind, weil im Buffet machen wir uns nichts vor, man
- 16:21macht sich von allen bisschen was, ja und wie kann ich so n
- 16:25Objekt quasi so ne komplexen. Objekte kontrolliert erzeugen
- 16:30und damit beschäftigt sich das Bilderpattern und im Prinzip
- 16:33möchtest du genau das voneinander trennen, diesen
- 16:37Konstruktionsschritt und den Repräsentationsschritt, also
- 16:41diesen fertigen Teller zu haben. Das willst du voneinander
- 16:44trennen, die Herstellung mit der Repräsentation am Ende.
- 16:49Definitiv. Und wir haben es ja schon
- 16:51gesagt, es ist auf jeden Fall definitiv ideal, wenn man halt
- 16:54eben. Viele, auch optionale Felder hat
- 16:59um das jetzt mal an deinem Beispiel anzubringen, möchte ich
- 17:01jetzt vielleicht noch n Dessert mitnehmen vom Buffet oder nicht?
- 17:04Ne, dass man halt sagt OK, also zum Beispiel ich bin jetzt nicht
- 17:07ganz so n Dessert Typ so manchmal ja, aber meistens eher
- 17:11nicht, dann nehme ich mir lieber noch mal Nachschlag, so nach dem
- 17:13Motto ne oder halt zum Beispiel wenn man unterschiedliche
- 17:17Ausprägungen vom Objekt hat. Also wenn du jetzt diesen Teller
- 17:21nimmst und sagst ne OK du nimmst jetzt einmal irgendwie.
- 17:25Weiß nicht von Angebotsplatte 1 und 2 und beim nächsten Mal 1
- 17:30und 3, weil 1 so gut geschmeckt hat.
- 17:31Willst du aber noch was Neues ausprobieren, ne so, dann hast
- 17:32du im Endeffekt durch das Gleiche durch den gleichen, also
- 17:35durch dieses durch diesen Bildern das durch diesen
- 17:38Bildern, durch diesen Bilder das gleiche gebaut, ne das gleiche
- 17:41Objekt mehr oder weniger, aber mit einer anderen Ausprägung
- 17:43genau was ich auf jeden Fall ganz interessant fand war, weil
- 17:46du jetzt auch gesagt hast, selbst wenn man jetzt
- 17:48fortgeschritten ist, kann man ja noch n bisschen was lernen, ne?
- 17:51Und ich fand es ganz interessant, weil jetzt auch,
- 17:54als wir die Folge vorbereitet haben, fand ich es ganz
- 17:58spannend, weil ich sag mal der Builder, so wie ich ihn zum
- 18:03Beispiel verwende. Oft war nicht der klassische
- 18:06Builder, sondern halt eher einen, den wir dann auch gleich
- 18:10noch mal beschreiben werden, aber ich fand das auf jeden Fall
- 18:12super spannend, dass weil irgendwie man verwendet das aus
- 18:16einem bestimmten Grund, das sagen wir auch gleich noch mal.
- 18:18Vielleicht wieso ich den so dann im Endeffekt kenne, aber es gibt
- 18:22ja noch wirklich diesen diesen richtig klassischen Bilder, weil
- 18:26du ja auch gerade vom klassischen Bilder Pattern
- 18:28geredet hast und auch am Anfang meintest.
- 18:30Laut Lehrbuch willst du mal kurz sagen, was ist denn laut
- 18:33Lehrbuch, bevor wir dann am Ende, vielleicht auch später
- 18:36noch mal darauf hinkommen, wie ich ihn zum Beispiel auch oft
- 18:39verwende oder wie ich ihn eigentlich auch kenne.
- 18:42Ja, ich, ich weiß, worauf du hinaus willst.
- 18:44Deswegen haben wir es ja mit reingenommen, weil es ist jetzt
- 18:47wirklich mal der der klassische Aspekt dahinter ist, dass du
- 18:50sagst, OK, das Pattern braucht auf jeden Fall ein eine
- 18:53Produktklasse, ne, also ein Builder.
- 18:56Das Pattern an sich dreht sich natürlich immer um ein Produkt
- 19:00am Ende, was ich erzeugen möchte, ja, also wovon ich
- 19:03Objekte instanziieren kann und in unserem Fall wäre das ja
- 19:07jetzt der Essensteller an unserem Beispiel.
- 19:10Ja, das ist das Produkt, was wir quasi herstellen wollen.
- 19:14Das heißt, du hast jetzt erstmal eine klasse Essens Teller ja,
- 19:19Plate irgendwie, wie auch immer man das denn nennen möchte, dann
- 19:23wirst du ein Builder brauchen, aber, und das ist jetzt der
- 19:27Unterschied was du meintest, für dich war jetzt ein Builder in
- 19:30der Implementierung wie du es verwenden würdest.
- 19:33Kein Interface, aber im klassischen Sinne ist der
- 19:36Builder ein Interface, aber. Und zwar ein Interface mit
- 19:40Konstruktionsschritten wie schaffe ich es, diesen Teller zu
- 19:43erzeugen? Ne, also sowas wie füll die
- 19:47Vorspeise auf füll die den Hauptgang auf, also da sind im
- 19:51Prinzip Schritte, also Funktion drin definiert wie sich das
- 19:56Produkt am Ende zusammensetzt. Ja.
- 19:59Ja, und dann ganz klassische Objektorientierung habe ich
- 20:02jetzt ein Interface und ich brauche natürlich auch eine
- 20:04Implementierung davon. Das heißt, ich implementiere
- 20:08dann zum Beispiel den Italian Food Builder.
- 20:14Ja, und mal wieder, das hatten wir schon mal.
- 20:16So ähnlich das Beispiel, das heißt, ich sage jetzt von diesem
- 20:20Bilder, implementiere ich eine italienische Variante, das
- 20:24heißt, ich gehe ans Buffet und wähle jetzt gezielt,
- 20:27implementiere ich quasi die Funktion, nimm Vorspeise und
- 20:32sage, die ist so implementiert, dass ich mir jetzt antipasti
- 20:35nehme. Zum Beispiel von den Vorspeisen,
- 20:39Hauptgang, Lasagne. Da gibt es jetzt so Lasagne zur
- 20:43Auswahl, das heißt, ich implementiere meine Bilder so,
- 20:45dass der sagt, da nimmst du jetzt bitte ne Lasagne, ja und
- 20:51Nachtisch, Tiramisu, was anderes fällt mir jetzt gerade nicht ein
- 20:55und dann habe ich quasi, ich hoffe das passt alles für die
- 20:57italienische Küche, dann habe ich quasi einen Essensteller im
- 21:02italienischen Flair. Erzeugt ne wenn ich diesen
- 21:05Bilder verwende und dann gibt es ganz ganz klassisch.
- 21:08Das habe ich aber selten so gut wie gar nicht gemacht bisher und
- 21:11das werden wir später erklären. Warum gibt es noch eine weitere
- 21:17Klasse und zwar eine Art Director und der ist jetzt dafür
- 21:22da, im Bilder noch festzulegen, in welcher Reihenfolge ich das
- 21:26mache. Ja, ja, also ich habe jetzt die
- 21:29einzelnen Schritte, ich weiß, wie ich diesen Teller
- 21:31zusammenbauen kann, aber die Frage ist, in welcher
- 21:33Reihenfolge möchte ich das machen, ist mir das wichtig.
- 21:36Ja, also ich glaub die wenigstens die gehen los und
- 21:40holen sich erstmal n Dessert das ich mein was was wär das denn
- 21:44nein sondern ich geh jetzt wirklich die so n Dessert ist
- 21:47Quatsch Dessert so n Befehl ist ja meistens auch so aufgebaut,
- 21:49dass du vorne erstmal ja Vorspeisen hast.
- 21:52Den Hauptgang und hinten am Ende stehen denn die Desserts und
- 21:55genauso könntest du jetzt in deinem Director vorgeben, das
- 22:00ist im Prinzip dann der Aufbau des Buffets, dass du erstmal zu
- 22:04den Vorspeisen gehst, die Funktion Ausführst, dann
- 22:06Hauptgang und dann Nachtisch und am Ende vielleicht noch weiß ich
- 22:10nicht, was man halt mit reinnehmen möchte noch so und
- 22:13das wäre so gesehen das klassische Bilder Pattern und in
- 22:18deinem Code den du dann hast. Also wenn du das jetzt verwenden
- 22:22möchtest, zum Beispiel, hol mir einen Essensteller oder bau mir
- 22:26diesen Essensteller auf, kannst du ja dann entscheiden, was für
- 22:30eine Art Teller du möchtest. Das ist dann die Flexibilität
- 22:33hinter dem Pattern, dass du sagst, ach, ich nehme den
- 22:36italienischen Teller, das heißt ich weiß, ich muss da jetzt
- 22:39hingehen, ich nehme die Antipasti und so weiter das
- 22:42heißt, ich habe meinen Bauplan und wenn ich einen Director noch
- 22:45verwende, dann sagt er auch noch in der Reihenfolge machst du
- 22:47das. Und dann kriegst du am Ende
- 22:49quasi Objekt Play zurück, mit gefüllt mit deinem Essen.
- 22:53Das heißt, dieses Objekt hat denn zum Beispiel ja weiß ich
- 22:59nicht irgendeine Funktion wie Get Get Starter oder so, und da
- 23:04kommt dann zurück antipasti ne, also wenn du jetzt irgendwie das
- 23:07überprüfen möchtest, dass du siehst, ach auf meinem Teller
- 23:10liegt eingelegte Oliven, weiß ich, was ja, ja, genau.
- 23:16Also ich ich bei hab es auf jeden Fall.
- 23:18Also ich weiß auf jeden Fall was du meinst.
- 23:20Wie gesagt, ich fand es halt, fand es halt spannend, dass ich
- 23:25halt wenn ich Bilder verwendet hab hab ich den so halt
- 23:28eigentlich nie verwendet. Ne das ist irgendwie ganz
- 23:30spannend und deswegen das meint ich so man kann halt immer auch
- 23:32noch mal auch was lernen wenn man jetzt zum Beispiel auch
- 23:36schon fortgeschritten ist halt ne und ist halt irgendwie
- 23:40interessant wie das eigentlich zustande gekommen ist.
- 23:43Ich find es aber auch n bisschen.
- 23:46Ich weiß nicht, bisschen schwierig diese Steuerung dann
- 23:50über so n Director zu machen, weißt du?
- 23:54Ja, es ist halt Fakt ist, das können wir auch bei den
- 23:58Nachteilen. Also wir wollen ja noch vor und
- 24:00Nachteile beleuchten schon mal n bisschen vorweggegriffen diese
- 24:04klassische Implementierung fühlt sich halt schon so n bisschen
- 24:07nach Boiler Plate Code an. Das heißt, du musst halt viel
- 24:10Struktur aufbauen, um das Nutzen zu können.
- 24:12Wie du zum Beispiel meintest n Director extra implementieren,
- 24:16um ne Reihenfolge vorzugeben. Ja genau, der am Ende ja auch
- 24:21nur aufruft und sagst Ey hier ist n Bilder und jetzt führ mal
- 24:24bitte in den Reihenfolgen die ich dir sage, die auch wieder
- 24:27implementiert sind. Die Aufrufe des Bilders durch
- 24:31sozusagen ja. Also wie gesagt, im Endeffekt
- 24:34macht es schon Sinn. Kann man auch noch mal drauf
- 24:36eingehen, aber auch nicht immer ne.
- 24:38Aber Fakt ist und das ist ja genau der.es gibt ne Menge
- 24:43Vorteile von so einem Bilderpattern, die wir auch
- 24:46schon mehr oder weniger angeschnitten haben.
- 24:49Also du hattest ja auch schon gesagt es soll ne Trennung von
- 24:51Objektstruktur und der Konstruktionslogik sozusagen da
- 24:54sein und das ist im Endeffekt ja auch mehr oder weniger das
- 24:58Hauptding was in Bilderpattern macht und wofür es halt eben
- 25:01steht, ne also. Ne Produktklasse muss halt nicht
- 25:05wissen wie sie zusammengesetzt wird.
- 25:06Ne, also das Buffet selber denkt sich so mir egal.
- 25:10Mach n Abendbrot draus, so nach dem Motto.
- 25:13Der Keller denkt sich egal. Genau.
- 25:15Wie wie das Essen drauf kommt. Hauptsache ich bin nicht leer.
- 25:19Richtig. Und selbst wenn er am Ende leer
- 25:22wäre, dann hat die Person vielleicht keinen Hunger.
- 25:25Ja, wie heißt das? Das ist das so n Räuberteller
- 25:28oder so nennt man das da oder das find ich immer super witzig
- 25:31n Räuberteller der leer ist, weil du ja eh nur von den
- 25:33Nachbartellern Runternimmst. Tatsächlich muss ich ganz kurz
- 25:37off topic sagen, dass ich das letztens erst gelernt hab, dass
- 25:40es n räuberteller das ist, weil irgendwer.
- 25:42Ich weiß gar nicht mehr, wo hat das bestellt und ich dachte mir,
- 25:44so was willst n du jetzt was das ist das krass, ich will das
- 25:46auch. Und dann bist du hungrig nach
- 25:50Hause gegangen. Und dann hab ich erstmal
- 25:52gemerkt, ah OK. Gut, das ist also n ja gut.
- 25:56Macht Sinn. Aber es ermöglicht halt eben
- 25:59auch ne gute Architektur, ne. Gerade im Single Responsibility
- 26:04Principle, wenn man darauf das Ganze jetzt Münzen möchte, weil
- 26:09du im Endeffekt sagst, OK, das Objekt selber kannst du zwar
- 26:13erzeugen, aber wie das Objekt erzeugt wird, das ist diese
- 26:17diese. Verantwortlichkeit liegt nicht
- 26:19beim Objekt, sondern halt eben in dem Fall dann beim Bilder.
- 26:22Ne ja ja, ansonsten hast du halt wie gesagt auch Flexibilität in
- 26:28den Objekten beziehungsweise in den in den in den nicht in den
- 26:31Objekten in den Feldern in den optionalen Feldern.
- 26:33Eventuell wenn du optionale Felder hast.
- 26:35Das ist natürlich noch gut, weil ich weiß nicht ob man das schon
- 26:40bestimmt, kennt man das? Gerade wenn du zum Beispiel
- 26:44Funktionen hast. Es gibt ja genügend Sprachen,
- 26:45die Funktionen anbieten, wo du zum Beispiel auch optionale
- 26:48Parameter mitgeben kannst. Wenn du das bei Konstruktoren
- 26:51hast. Es wird irgendwann schwierig, es
- 26:53wird irgendwann anstrengend, weil du brauchst eigentlich, je
- 26:56mehr du von diesen optionalen Dingern hast, auch wenn du es
- 27:00natürlich im im Bilder einbauen kannst, ist es immer so n
- 27:05trotzdem am Ende ne Frage. Wie gut ist es, optionale Sachen
- 27:09zu haben, weil je mehr optional du hast und je mehr du
- 27:11vielleicht Abhängigkeiten von den optional ne ich kann das
- 27:14mitnehmen und wenn du das mitnimmst, dann muss aber auch
- 27:17das dabei sein, so als Beispiel bläht sich halt ne Dokumentation
- 27:20ewig auf, also du brauchst am Ende irgendwann ne Dokumentation
- 27:23um irgendwann zu verstehen was da los ist.
- 27:25Ne, so n Builder kann dir da auch in im Guiding so n bisschen
- 27:28helfen, trotzdem ne auch gerade wenn du jetzt zum Beispiel so n
- 27:31Director beispielsweise hast, der dir dann sagt ne.
- 27:34OK, du willst das und das machen, aber das funktioniert so
- 27:37nicht. Wenn du das nicht hast
- 27:38beispielsweise ne ist so n bisschen angeleitet das Ganze.
- 27:41Was natürlich jetzt vielleicht n bisschen naheliegend ist, aber
- 27:44halt auch wirklich n Vorteil dabei ist, dass du
- 27:46wiederverwendbare Konfiguration hast.
- 27:49Ja, du kannst ja so gesehen das buffetbeispiel du baust dir
- 27:54deinen Teller zusammen, du isst ja und denkst dir.
- 27:57Oh Mann, das war der Hammer, ich möchte genau den gleichen noch
- 28:01mal essen. Dann gehst du los und füllst dir
- 28:03den Teller noch mal so auf und isst den dann halt noch mal.
- 28:06Und das spiegelt halt auch ein Bilderpad dann wieder.
- 28:08Du kannst natürlich so wie du das Objekt aufgebaut hast, es
- 28:12erneut aufbauen, ja, gerade wenn du jetzt auch noch so ein
- 28:15Director verwendet zum Beispiel, du kannst der exakt genau das
- 28:18gleiche ja Objekt wieder aufbauen, was auch ein Vorteil
- 28:22ist. Das auf jeden Fall, ja, also.
- 28:27Das fand ich zum Beispiel auch mal ganz interessant.
- 28:29Also wenn wenn ich jetzt mal kurz ein Beispiel aus dem Leben
- 28:34erzähle. Jetzt geht es los.
- 28:37Also ich hab zum Beispiel mal Bilder Pattern verwendet in
- 28:42einem am Arbeitskontext, da wurde so eine so eine Art sagen
- 28:48wir mal Test Data Bilder haben wir geschrieben, ne, da konntest
- 28:51du dann aus diesem Test Data Bilder, das war natürlich jetzt
- 28:54ein bisschen größeres Ding, es war auch.
- 28:56Bisschen wahrscheinlich zu krass über alles im in den ganzen
- 29:00Tests drüber gebügelt, aber Fakt war, dass es auf jeden Fall sehr
- 29:04sehr gut funktioniert hat, dass du gesagt hast, du möchtest
- 29:06jetzt zum Beispiel n bestimmtes Objekt erzeugen, ne mit
- 29:10bestimmten befüllten Attributen, weil du halt gesagt hast.
- 29:15Also weil zum Beispiel in dem in prozessschritten sag ich jetzt
- 29:19mal, wenn du so n Objekt hattest, konntest du das so mit
- 29:21mehreren Prozessschritten erweitern, ne, so kannst du es
- 29:24dir ungefähr vorstellen. Und wenn du jetzt zum Beispiel
- 29:26einen bestimmten Prozessschritt testen wolltest, dann musste man
- 29:30ja nicht noch mal alles vorher machen, sondern der Test
- 29:33databuilder war dann halt im Endeffekt in der Lage zu sagen
- 29:35okay, nimm mir mal so ein Objekt, mach mal dies, mach mal
- 29:38das, mach mal das damit und dann bist du an einem Punkt und
- 29:40kannst quasi direkt weiter testen.
- 29:42Das Schöne daran war, du konntest relativ schnell auch im
- 29:48in deinem Test lesen, was ist schon mit diesem Objekt
- 29:51passiert. Dass du dann sozusagen auch
- 29:54generell den Test ganz gut lesen konntest.
- 29:56Und dafür war es halt einfach hilfreich, dass du so sukzessiv
- 30:00bestimmte Objekte, die du brauchtest, halt eben
- 30:04vorbereiten konntest für deinen Test.
- 30:05Also das hat auf jeden Fall, das war ein super Beispiel, fand ich
- 30:08zumindest dafür, wann so ein Builderpad dann schon mal ja gut
- 30:12funktioniert hat oder gut gute Arbeit geleistet hat, absolut.
- 30:18Ist ein gutes Beispiel. Ich finde es aber auch gut, dass
- 30:20du sagst, dass das Ganze ziemlich groß geworden ist und
- 30:24man das Halt kontrollieren musste bei all den Vorteilen
- 30:27haben wir natürlich, denn das zum Beispiel auch als Nachteil,
- 30:31also Fakt ist, durch diese erhöhte oder verbesserte
- 30:35Struktur hast du auch mit dem klassischen Bilder Pattern mehr
- 30:39Code, zum Beispiel hat man ja gesehen, wie viele Klassen man
- 30:42braucht oder auch Interfaces um überhaupt diese Struktur
- 30:45aufzubauen. Ja, und das ist auf jeden Fall
- 30:48Nachteil, weil du erstmal wesentlich mehr Code erzeugst.
- 30:53Und wenn ich jetzt aber sehr einfache Objekte habe, ja, also
- 30:56ich rede nicht mal davon, dass es zum Beispiel keine Parameter
- 30:59gibt, ja, dass das halt statische Objekte irgendwie sind
- 31:02in dem Kontext, sondern vielleicht 23 Parameter und
- 31:06keine optionalen zum Beispiel. Dann bin ich an einem Punkt, wo
- 31:10man abwägen muss, ist das nicht einfach zu viel Overhead?
- 31:14Ja, also ich kann ja schnell diese oder schnell ist schnell
- 31:18ist das falsche Wort einfach diese Objekte erzeugen ja und
- 31:24gerade auch wenn Performance wichtig ist.
- 31:26Wenn ich sehr viele Objekte erstelle, ja, dann ist
- 31:30vielleicht ein Builder Pattern auch nicht das Richtige, weil
- 31:32das ist ein wichtiger Punkt. Ich erzeuge ja nicht einfach nur
- 31:37ein Objekt, sondern. Ich rufe Funktion von Objekten
- 31:41auf, um ein Objekt zu erstellen. Das ist das ist n feiner, also
- 31:47der sieht jetzt nicht so riesig aus, der Unterschied aber im
- 31:49Performance Kontext kann das enormer Overhead bedeuten, weil
- 31:52ich nicht einfach nur n Objekt instanziiere, sondern sehr viele
- 31:55Funktionsaufrufe eventuell habe um das finale Objekt zu bekommen
- 32:00was ich brauche und wenn ich jetzt sehr sehr viele Objekte
- 32:02davon brauche zum Beispiel es ist n riesen Befehl, da sind
- 32:05ganz ganz viele Leute und ich hau da tausende Teller raus, so
- 32:08in der Implementierung. Jetzt ja.
- 32:11Und je nachdem, wie Feingranular die Auswahl am Befehl ist,
- 32:14wieviel Funktionen das sind, nicht einfach sowas wie nimm
- 32:17Vorspeise, sondern nimm bisschen davon, ist eine Funktion
- 32:21bisschen davon also übertrieben ja und du hast ganz ganz viele
- 32:23Funktionen die da aufgerufen werden, dann ist das n ziemlich
- 32:26großer Overhead am Ende. Definitiv.
- 32:29Also das ist auf jeden Fall n guter Punkt, woran ich
- 32:32wahrscheinlich auch nicht als erstes gedacht hätte, aber es
- 32:34ist auf jeden Fall sehr, sehr wichtig, dass man da, also dass
- 32:37man. Dem Halt also, dass man bewusst,
- 32:40dass es einem bewusst ist. So.
- 32:43Und was ich jetzt vielleicht nicht unbedingt als Nachteil
- 32:47hinstellen würde, was aber auch wichtig ist zu sensibilisieren,
- 32:52finde ich, ist beispielsweise, dass man durchaus wissen sollte,
- 32:59dass man relativ, dass es auch durchaus relativ schnell möglich
- 33:03ist, eine Menge Logik in diesem Bilder rein zu ballern, so, das
- 33:06heißt, so ein Bilder kann im. Worst Case auch relativ schnell
- 33:11komplex werden eine hohe viel Logik haben und vielleicht auch
- 33:15irgendwann das Ganze schwierig machen zu warten.
- 33:18Also natürlich nur, wenn man nicht wirklich aufpasst.
- 33:21Wichtig ist oder was ich versuchen will zu sagen ist man
- 33:26muss. Gucken, wie man Bilder
- 33:29implementiert dass es nicht komplett ausufert, dass man
- 33:31nicht einfach nur sagt, Ach komm, ich hau jetzt hier noch
- 33:33was dran, ich hau jetzt da noch was dran, sondern wirklich immer
- 33:35noch die Sinnhaftigkeit dahinter zu packen und zu sagen, ist es
- 33:38jetzt gut, passt das noch zu meinem Konzept und ist das jetzt
- 33:43nicht vielleicht Missbrauch ich das ganze jetzt nicht zum
- 33:45Beispiel ne, also das ist halt immer n bisschen und dass man
- 33:47halt auch regelmäßig das ganze Refact hat sollte man n Punkt
- 33:49kommen wo man sagt, Oh was ist denn hier los, das ist ja
- 33:52irgendwie ich ich ich versteh es nicht mehr oder was auch immer
- 33:54ne also das sind halt wichtige Punkte.
- 33:57Dem man sich irgendwie Bewusstsein sollte, weil das
- 33:59kann natürlich auch ohne Bilderpattern passieren.
- 34:02Nur meine Erfahrung ist, dass wenn du ein Bilderpattern nutzt,
- 34:06dann kann es halt relativ schnell sein, dass vielleicht
- 34:09auch gerade wenn man im Team arbeitet, alle irgendwie was da
- 34:12mit Reinklatschen und draufpacken und ach, wir haben
- 34:14ja hier ein Bilder für, da mache ich dies noch, da mache ich das
- 34:17noch und am Ende hast du zwar ein Bilderpattern was wenn du
- 34:20gutes Bilderpattern hast. Dann hilft dir das richtig gut
- 34:24weiter. Aber ein schlechtes Bilder
- 34:26pattern oder 1 was irgendwann völlig verhackstückelt wird oder
- 34:29für verschiedene Zwecke missbraucht wird, das bringt
- 34:32dich irgendwann halt auch nicht mehr wirklich weiter und da muss
- 34:35man finde ich ein bisschen aufpassen am Ende.
- 34:37Ja, das ist ein sehr guter Punkt, weil das klassische
- 34:40Bilder pattern, wenn man das halt wirklich falsch nutzt, wie
- 34:45du meintest, hast du halt zum Beispiel eine fehlende
- 34:47Validierung deines Objekts am Ende.
- 34:50Ja, weil diese Funktionen, die du aufrufst, um dein Objekt
- 34:52zusammenzubauen, müssen ja nicht aufgerufen werden.
- 34:56Genau, und wenn du dann nicht aufpasst, hast du halt
- 34:58undefinierte Werte da drin oder kannst gar nicht so weiter
- 35:01arbeiten mit dem Objekt wie du es gerne machen möchtest.
- 35:03Das knallt dann irgendwo in der Software, da muss man halt
- 35:06aufpassen, dass man halt auch wirklich sicherstellt, dass
- 35:09gültige Objekte sozusagen am Ende rauskommen.
- 35:11Ja, genau das ist auf jeden Fall ein sehr wichtiger Punkt, den du
- 35:14da genannt hast. Ich mein, das kannst du
- 35:16theoretisch ja am Ende immer machen, aber wie gesagt führt
- 35:19auch am Ende wieder zur Logik ne, die dann halt eben auch
- 35:23vielleicht wieder abgetestet werden sollte und so weiter und
- 35:25sofort ne. Das ist natürlich, wie gesagt,
- 35:28muss man halt und das das Ding ist natürlich am Ende auch
- 35:31wieder so und deswegen sagen wir eigentlich, in jeder Folge
- 35:34probiert Liebe zu Liebe, zuhören, probieren, einfach das
- 35:36auch mal aus, wenn du zum Beispiel sagst, ich hab noch nie
- 35:39n bilderpad dann ausprobiert, einfach mal implementieren,
- 35:42einfach mal gucken für n entsprechenden Zweck, vielleicht
- 35:45auch einfach für n konstruiertes Beispiel einfach mal um das
- 35:47Feeling dafür zu kriegen, zu sagen, wie ist denn das jetzt
- 35:49so, macht es Spaß oder nicht. Zum Beispiel Unser Befehl
- 35:52Beispiel genau. Ich würde gerne, weil du, du
- 35:59hast es schon angesprochen, so hey, so in der Form nutzt.
- 36:03Also ich nutz n Bilder pattern aber gar nicht so im klassischen
- 36:06Sinne, ja oder ich hab es sehr oft in Frameworks in anderer
- 36:09Form gesehen und da möchte ich jetzt so zum Schluss noch mal
- 36:12drauf eingehen, bevor wir sag ich mal so n Fazit noch ziehen.
- 36:16Ja wie sieht das so in modernen Frameworks aus und wie wird da
- 36:20das Bilder Pattern verwendet und da spricht man halt oft von dem
- 36:23Fluent Fluent Bilder und. Nicht Pattern, Flur und Bilder
- 36:28und das kann man so ein bisschen sagen.
- 36:31Klassiker neu interpretiert so also moderne Umsetzung dieses
- 36:35Klassikers. Ja, und das findet man halt oft
- 36:40in modernen Code oder modernen Frameworks und dabei ist es
- 36:44quasi der gleiche Grundgedanke, aber einfach schlanker
- 36:48umgesetzt, man hat sich halt gedacht, dieses Interface und
- 36:53ein Director. Ich weiß nicht, das ist halt so
- 36:56viel spoilerplate Code am Ende. Ne weiß ich nicht und deswegen
- 37:00hat man einfach gesagt oder geht man nen anderen Weg und sagt OK
- 37:03wir lassen das Weg und wir verwenden die Methodik der
- 37:08Method Chaining ja also ne Verkettung an Funktionsaufrufen
- 37:13und das hat 100 Pro jeder früher oder später irgendwann mal
- 37:17gesehen ja, aber vielleicht nicht.
- 37:20Aktiv drüber nachgedacht warum mach ich das hier eigentlich
- 37:22gerade? Warum sieht das so komisch aus?
- 37:25Vielleicht, wenn man das zum ersten Mal sieht, ne, dass du so
- 37:28ganz viele Funktionen verschachtelst, aber
- 37:30verschachtelt im Sinne wirklich verkettest, also immer wieder
- 37:33das Ergebnis einer Funktion gleichzeitig darauf wieder ne
- 37:36Funktion aufrufst und dann bilden sich so so Ketten sag ich
- 37:41mal und am Ende kriegst du n Ergebnis raus.
- 37:44Ja und genauso nutzt man denn quasi im Fluent Builder.
- 37:48Diese Möglichkeit, also diese Methodik um ein Builder Pattern
- 37:51umzusetzen, das heißt, man kann sich das jetzt so vorstellen,
- 37:55man nimmt so diese klassische Methodik weg, man hat immer noch
- 37:58sein Produkt, ja, also du hast immer noch deinen Essensteller
- 38:02und du hast auch immer noch ein Builder, aber jetzt
- 38:05instanziierst Du einen neuen Builder für deinen Teller.
- 38:09Ja, also zum Beispiel einfach New Plate Builder, rufst den
- 38:14Konstruktor auf. Und machst dann aber und
- 38:17verwendest dann quasi gleich direkt die Funktion des Bilders.
- 38:20Das heißt, du machst dann zum Beispiel ja, also in klassischen
- 38:23Sprachen sagst du dann Punkt mit Vorspeise und gibst ein
- 38:28Parameter rein. Antipasti so, das heißt, du
- 38:33sagst, ich möchte auf diesen Teller die Vorspeise, Antipasti
- 38:36und jetzt sagst du aber wiederum aber Punkt mit Hauptgang.
- 38:42Lasagne? Ja einfach noch verkettet da
- 38:44dran und so weiter und verkettest dann komplett deine
- 38:46Konfiguration und am Ende sagst du keine Ahnung Get Plate und du
- 38:52kriegst dann wirklich ein Plate Objekt mit diesen Eigenschaften
- 38:55zurück. Ja, oft wird das ja zum Beispiel
- 38:58auch dann so gemacht. Also ich kenn das halt so, aber
- 39:00das erste Mal, als ich das auch gesehen hab oder was ja auch oft
- 39:02gerne gemacht wird, ist dann so n punktbild ne, das wird dann
- 39:07oft gemacht. Ganz klassische.
- 39:09Genau, also das wird halt vielleicht ich.
- 39:11Ich hab frag mich auch so, also gerade wenn du sowas machst find
- 39:13ich sowas wie n getplate dann irgendwie schöner ne, aber ich
- 39:17glaube, dass so n Punkt Bild halt oft gemacht wird um halt
- 39:19eben auch wirklich zu signalisieren Ey hier wird n
- 39:21bilderpattern jetzt gebaut. Ja genau, also hier wird es
- 39:24erstens jetzt gebaut und zweitens hier ist es ist
- 39:26sozusagen n bilderpattern was ich also ne so n fluent Bilder
- 39:29dann aber was ich am Anfang interessant fand wo ich das das
- 39:33erste Mal gesehen hab ne es ist keine Ahnung.
- 39:36Das ist vorgestern gewesen sein. Ja, in der Vorbereitung hier.
- 39:40Keine Ahnung. So im Studium Anfang des
- 39:43Studiums irgendwie so ne im ersten Drittel und dann denkst
- 39:46du dir so hä ey ich versteh grad nicht wieso kann er denn jetzt
- 39:50sagen mach mal also nimm gib mir eben Bilder mit was weiß ich was
- 39:54hast du gesagt with starter with main with the sair oder was auch
- 39:57immer ne und wie wie kann es sein, dass er jetzt sozusagen.
- 40:02Wie, dass du immer was reingeben kannst und dann diese Funktion
- 40:05auf sich also immer wieder aufrufen kannst.
- 40:06Also wie geht das? Das hat da hab ich hab ich
- 40:08irgendwie nimmer genau bis ich dann irgendwann halt auch
- 40:13dahinter gekommen bin und dann gesagt hab OK der Builder ne
- 40:16dieser über den wir gerade geredet haben, der gibt halt
- 40:19einfach, also der Return des Builders ist immer This, also
- 40:21immer in sich, also sich selbst. Also wenn man jetzt in Java
- 40:25spricht, ich glaub wir hatten Java vorhin angesprochen,
- 40:27deswegen ist das in meinem Kopf das Bild.
- 40:29Aber ergibt immer sich selbst als Objekt zurück, was bedeutet,
- 40:32dass wenn du ne Funktion aufgerufen hast, dass die also
- 40:35auf einem Objekt und dieses Objekt sich selber wieder
- 40:37zurückgibt, kannst du natürlich logischerweise als Return Value
- 40:40weiter auf diesem Objekt arbeiten, was eben wiederum die
- 40:43Funktion hat, ne. Genau.
- 40:45Und du hast alle Konfigurationen, die erledigt
- 40:47sind. Abgespeichert im Prinzip.
- 40:49Du kannst halt genau dieses Schritt für Schritt am Befehl
- 40:52lang gehen. Ja und dir dein Essen auftun
- 40:55sozusagen, und du sparst dir halt den Director, weil du mit
- 40:58diesen Funktionsverkettungen die Reihenfolge der Kette, dir den
- 41:02Director ja quasi ja wird ja obsolet, weil du ja dann in dem
- 41:05Falle schon die Reihenfolge festlegst genau ja, und du
- 41:08brauchst halt auch kein Interface wie n Builder
- 41:10aussieht, weil der Builder hat jetzt die Funktion und ich kann
- 41:13jetzt. Fluent ja, also wirklich einfach
- 41:16selbst definieren, wie ich da die Aufrufe mache.
- 41:19Ja. Obacht, wieder im Thema
- 41:21Validierung am Ende ne es gewährleistet jetzt keiner, dass
- 41:24ich alle, also alle Funktionen in meiner Kette drin hab.
- 41:28Ja richtig, das ist halt jetzt wirklich wieder dieser
- 41:29Validierungspunkt am Ende, ich find das eben, wo wir aber zum
- 41:32Beispiel am Ende ganz kurz, sorry in dieser Bild wie du
- 41:35meintest ja klassisch abfangen kannst.
- 41:37Genau kann man auf jeden Fall machen, ist halt die Frage
- 41:39wieviel man dann am Ende sozusagen zulässt.
- 41:41Ne. Oder halt eben auch nicht.
- 41:44Aber, und das finde ich ja, auf das ist halt auf der einen Seite
- 41:46oder auf der haben Seite ist halt eben das, sowas ist super
- 41:48lesbar oft ne also wenn du es richtig machst, dann kann ich es
- 41:52wirklich genau, dann kannst du halt den Code wirklich relativ
- 41:55einfach verständlich lesen, also wie als wäre es ein Buch sag ich
- 41:58jetzt mal auf der anderen Seite könntest du aber auch wenn du es
- 42:02falsch anwendest dir denken, so was passiert denn da eigentlich
- 42:05gerade weil wenn du zum Beispiel diesen.
- 42:07Plate Bilder nimmst zum Beispiel und sagst Whist Data Salat,
- 42:11Whist, Data Antipasti, Whist Data.
- 42:12Dass das dann weißt du auch, zum Beispiel nicht hundertprozentig,
- 42:15füg ich jetzt mehrere Data hinzu, also kann ich jetzt n
- 42:19Salat und antipasti essen oder sag ich mir zum Beispiel oder
- 42:22überschreibst du das oder ist das überhaupt valide, zweimal
- 42:25woist Data aufzurufen? Also du könntest ja einfach
- 42:28hundertmal Woist Data aufrufen und sagen und ab.
- 42:30Dafür und ja klar, und du weißt halt natürlich nicht erstmal von
- 42:36außen. Addet er das sozusagen, hab ich
- 42:39jetzt ne Liste an Starter oder überschreibe ich die wie du
- 42:41gerade meintest? Das ist halt genau das Ding,
- 42:43denn dabei, ja und? Das ist halt dann im Endeffekt n
- 42:45bisschen die Kunst zu sagen, OK, wie baut man jetzt so n Bilder
- 42:49auf oder so n Flur und Bilder in dem Fall jetzt in diesem
- 42:52konkreten, dass er auch wirklich irgendwie, sagen wir mal schön
- 42:56aussieht, dass er ne beziehungsweise nicht nur schön
- 42:59aussieht, sondern dass er halt eben auch gut implementiert ist
- 43:01und sowas vielleicht irgendwie. Intuitiv dann eben kapselt, aber
- 43:06ein bisschen wissen wird immer vorausgesetzt, wenn du Bilder
- 43:09anwendest. Ja, ich finde schön ist ein
- 43:12gutes Stichwort für eine Überleitung, um mal so bekannte
- 43:15Beispiele zu nennen oder Frameworks und Sprachen, die auf
- 43:19dieses Pattern, sage ich mal, darauf zurückgreifen.
- 43:23Ja, und das sind ja oft schöne Implementierungen, also man
- 43:27sieht das halt auch sehr oft im zum Beispiel bei Springboot gibt
- 43:31es das viel. Du hast halt auch so so Bilder
- 43:35Patterns in Lombok zum Beispiel, ich mein oder auch gerade wenn
- 43:39ich jetzt so Calls mache, ne, also beispielsweise ich schreib
- 43:44jetzt ich hab jetzt n frontend und möchte jetzt rest Calls
- 43:48absenden und ich verwende verschiedene Bibliotheken dafür,
- 43:50dann hast du ja auch oft sowas wie.
- 43:52Set Header, Set body und du also kapselst du chainst halt diese
- 43:57Aufrufe, um am Ende dein request Objekt sozusagen zu haben, was
- 44:01du denn Absendest beispielsweise, das geht ja auch
- 44:04in die Richtung, ja, dass das N Builder ist am Ende oder im
- 44:08mobile App Bereich. Ja wir haben zum Beispiel ja
- 44:10schon mit Flatter rumgespielt, ist auch ne ganz coole Sache und
- 44:14Dart als Sprache setzt ja auch auf diese Konstrukte.
- 44:18Ja gerade wenn du jetzt zum Beispiel deine UI Elemente
- 44:21zusammenbaust, dann hast du auch oft.
- 44:22Unter der Haube diese bilderpattern ich kann mich
- 44:26erinnern, ne und da sieht man ja, dass es halt schon seine
- 44:31Daseinsberechtigung hat. Ja, definitiv.
- 44:34Also ich würde halt auch sagen, dass prinzipiell Bilderpattern
- 44:38schon auch viel genutzt werden. Also das ist jetzt zum Beispiel
- 44:43schon, auch weil wir jetzt beispielsweise Singleton auch
- 44:46hatten würde ich würde ich sagen, dass es mehr
- 44:48Bilderpattern und Bilderpatterns öfter eingesetzt werden als
- 44:51Singletons auch. Aber dass sie jetzt auch nicht
- 44:54exorbitant eingesetzt werden. Also es ist halt auch oft so,
- 44:57dass ich mir manchmal denke, oh, ihr könnt n bilderpattern nehmen
- 45:00und dann denke ich noch ein bisschen drüber nach und denke
- 45:02mir dann auch gleichzeitig wieder oder kurz danach,
- 45:05eigentlich brauche ich das auch nicht so, also ich finde es ist
- 45:08jetzt nicht irgendwie inflationär gesät, dass man
- 45:11einfach überall bilderpattern hat, aber es gibt halt gute
- 45:15Möglichkeiten eben so n Bilderpattern einzusetzen und
- 45:18dafür ist es halt eben aber auch wichtig zu wissen.
- 45:21Es gibt ein Bilderpattern und wie verwende ich ein oder baue
- 45:24ein Bilderpattern. Das ist halt in dem Fall, das
- 45:27ist eigentlich genau der richtige Punkt zu sagen wann.
- 45:30Wie, wo, was? Ja und du hast ja so schön
- 45:33angefangen, magst du vielleicht zum Abschluss der Folge mal so
- 45:37ein Fazit sehen? Wann würdest du sagen, da
- 45:42verwende ich das Bilderpattern, da macht es Sinn.
- 45:44Genau. Also wenn du halt viele
- 45:46optionale Konfigurationsfelder hast beispielsweise, dann macht
- 45:48das Sinn, wenn du generell viele.
- 45:51Parameter hast, die du irgendwie in konstruktor reingeben
- 45:53würdest, wenn du verschiedene Objektvarianten hast, wo du
- 45:56sagst, OK, das ist aber immer dieses eine Objekt.
- 45:59Es hat aber unterschiedliche Ausprägungen.
- 46:01Du willst aber auf der anderen Seite auch nicht alles wieder in
- 46:04was weiß ich wie viele Tiefen von Abstraktionen einbetten,
- 46:08weil es vielleicht auch in dem Fall einfach nicht gut wäre.
- 46:13Das ist halt immer sehr sehr. Also ich find da geht auch immer
- 46:15n bisschen Erfahrung mit einher, so dieses Feingefühl zu sagen
- 46:18wann macht es Sinn und wann nicht.
- 46:21Auch wenn jetzt zum Beispiel, wenn du jetzt Objekte mit
- 46:23rekursivem Aufbau hast oder so ne, also so n Dom beispielsweise
- 46:28im Frontend ist so n schönes Beispiel dafür.
- 46:31Und ja ansonsten. Gerade weil du es da drin
- 46:34verkapseln kannst, dann halt auch ne.
- 46:36Stimmt. Und was wir eben ja auch schon
- 46:38meinten, wenn man jetzt irgendwie sauberen, lesbaren
- 46:40Code haben möchte, ist halt n bilderpad dann schon ganz schön
- 46:44ne. Also da, das ist halt einfach.
- 46:47Ne gute Möglichkeit einfach ne schöne Lesbarkeit einfach von
- 46:51diesem Code zu erzeugen, weil es einfach besser ist als zu sagen
- 46:54ey ich erzeug jetzt hier, ich mach jetzt n konstruktor und hab
- 46:57da 1000 Parameter, so hast du ja wie noch ne kleine Beschreibung
- 47:00über diese Funktion, beispielsweise dass du siehst,
- 47:03OK, das passiert jetzt, das passiert jetzt, das passiert
- 47:05jetzt ne wann ich es jetzt zum Beispiel nicht einwenden würde
- 47:08ist, wenn du kleine Objekte hast ne du hast vielleicht irgendwie
- 47:102 bis 3 Parameter oder am besten noch weniger so dann reicht n
- 47:15einfacher konstruktor du weißt eigentlich relativ.
- 47:17Schnell OK, was passiert hier überhaupt?
- 47:20Oder du guckst einmal eben kurz da rein in den Konstruktor und
- 47:23siehst OK, diese beiden Werte werden gesetzt, macht schon
- 47:26Sinn, passt alles ne dann beispielsweise was du ja auch
- 47:31meintest, Performance sensible Bereiche würde ich es auch nicht
- 47:34unbedingt einsetzen, weil ne hattest du ja so schön erklärt,
- 47:37muss jetzt nicht noch mal wiederholen und.
- 47:41Ja, einmalige Objektinstanzen ohne Wiederverwendung.
- 47:44Wenn du halt wirklich mal, sagen wir mal selten mal ne Instanz
- 47:47irgendwie erzeugen musst, warum dann die ganzen Bilder dieses
- 47:51diesen Overhead dazu bauen? Wenn du aber eigentlich gar
- 47:54nicht, wenn das jetzt ne seltene, wenn das jetzt selten
- 47:57instanziert wird, beispielsweise ne, weil wie gesagt es kommt
- 48:00Komplexität obendrauf. Und man muss halt eben auch
- 48:03genau gucken, okay was ist dann im Endeffekt valide und was
- 48:06nicht und wie also wie gesagt, du bist frei in der Anwendung
- 48:09von diesem Bilder Pattern und da muss man eben halt auch gucken
- 48:12okay nimmt man es hin und sagt der oder der Programmierer die
- 48:17Programmieren wird das schon verstehen oder man muss halt
- 48:21eine Menge sozusagen abfangen vielleicht oder sehr viel Logik
- 48:24einbauen. Ja, ich finde den letzten Punkt
- 48:28halt auch wirklich gut. Zu sagen, wie oft brauche ich.
- 48:32Eine Variante dieses Objekts davon, wie oft instanziiere ich
- 48:35das, weil man muss auch sagen, diese Wahl des Patterns, ob ich
- 48:40ein bilderpattern brauche, ist auch irgendwo kontextabhängig,
- 48:43ne in welchem Rahmen programmiere ich gerade.
- 48:47Es macht natürlich absolut Sinn, wie ich meinte, dass du ja in
- 48:50verschiedenen Frameworks für Sprachen zum Beispiel so ein
- 48:54HTTP client hast, der so ein Bilderpattern implementiert hat,
- 48:58unter der Haube ne weil. Da ist der Kontext.
- 49:01Ich muss alle Arten von Request irgendwie ermöglichen und
- 49:06zusammenbauen können für den Anwender.
- 49:08Das heißt ich hab ne enorme Vielfalt und möchte aber diese
- 49:12Flexibilität sauber darstellen, das ist ja n ganz anderer
- 49:15Kontext als zu sagen ich implementiere jetzt ein Call
- 49:19weil ich hab jetzt nur einen Endpunkt den ich anspreche in
- 49:21meiner Software und ich wir gehen mal davon aus wir
- 49:23verwenden jetzt nicht dieses Framework mit den Bildern weil
- 49:25dann würdest du dann logischerweise einfach das
- 49:27nehmen da aber dann hast du es ja auch nicht implementiert.
- 49:29Wenn ich es jetzt aber selbst implementiere, dann würde ich
- 49:32doch nicht anfangen n Riesenkonstrukt als Bilder
- 49:34Pattern aufzubauen für einen spezifischen Call oder
- 49:38beispielsweise das Config Management.
- 49:41So ne ich hab ich lad ne config, ja lädst du eine statisch am
- 49:44Anfang, dann lad sie halt, dann musst du ja nicht dynamisch
- 49:47irgendwie ne config zusammenbauen, also es ist halt
- 49:49auch immer ne Frage des Kontexts am Ende das ist kann man auf
- 49:53jeden Fall so als Take Home Message auch noch mal mitnehmen.
- 49:57Ja, dann fabi, vielen Dank dafür auch für deine Zusammenfassung.
- 50:01Am Ende hat mir mega Spaß gemacht, ich find das Pattern
- 50:04auch ziemlich cool, es macht auch Spaß das mal umzusetzen,
- 50:06also weil du hattest es vorhin schon gesagt, liebe Zuhörer,
- 50:08liebe Zuhörer, probier es ruhig mal aus, wenn du noch nie mit
- 50:11dem Pattern gearbeitet hast beziehungsweise es noch nie
- 50:13selbst implementiert hast, weil um diese ganzen Fallstricke ja
- 50:17und vor und Nachteile wirklich verstehen zu können, lohnt es
- 50:20sich es auf jeden Fall mal zu implementieren und es ist
- 50:23sprachenunabhängig ja also du kannst eigentlich in jeder
- 50:26Sprache. Wenn es Objektorientiert ist,
- 50:29sagen wir es mal so, das sollte es schon sein, abbilden, und das
- 50:32ist halt wirklich eine coole Sache und lohnt sich auf jeden
- 50:37Fall, um auch einfach mal das Verständnis dafür zu entwickeln.
- 50:40Ansonsten lieber zuhören, lieber zuhören, falls du Fragen hast,
- 50:44Hau raus, schreib uns, lass uns drüber quatschen, wenn du
- 50:47Anmerkungen hast, Ergänzung, Fragen zum Buffet hast immer
- 50:52raus damit, schreib uns die Mail, findest du in den
- 50:54Shownotes. Essenstipps sag uns essenstipps
- 50:58genau, sag uns auf jeden Fall, ob du das Pattern schon
- 51:01verwendet hast, ob du es vielleicht indirekt verwendet
- 51:05hast und jetzt weiß, dass das Pattern dahinter steckt, weil du
- 51:08zum Beispiel mit Frameworks arbeitest.
- 51:10So klassische Fälle hat jeder mal, dass man sich denkt, AH OK,
- 51:14deswegen geht das so und. Und ansonsten auch noch mal der
- 51:19Aufruf. Wenn dir der Podcast gefällt,
- 51:21lass gerne ne Bewertung da, abonniere ihn, empfehle ihn
- 51:24gerne weiter, das würde uns ungemein freuen und
- 51:26weiterhelfen. Alle Links zu unseren
- 51:29Plattformen in den Shownotes wie immer Schau auf unserem Discord
- 51:33Server vorbei, wir sind mittlerweile so ne unglaublich
- 51:35coole Truppe da Grüße gehen raus an alle und ansonsten würde ich
- 51:40sagen haben wir uns nächste Woche alle wieder ne.
- 51:42Und bis dahin habt ne schöne Zeit deine Coding Bodys.
- 51:45Gemeinsam besser.