Latest / Coding Buddies | Tech & Dev-Mindset / #163 IPOS - Dieses Prinzip ist kein Schreibfehler (und hat es in sich)
Transcript
- 0:00Manchmal recherchiert man für eine Folge in die komplett
- 0:02falsche Richtung, trifft aber trotzdem auf coole Punkte.
- 0:05Und deshalb geht es heute um das etwas andere Iosp.
- 0:08Prinzip Coding Buddies Dein Podcast rund um
- 0:12Softwareentwicklung und aktueller Tech News.
- 0:15Herzlich Willkommen. Halli Hallo und herzlich
- 0:29Willkommen zur neuen Folge des Cody Buddies Podcast.
- 0:32Schön, dass du wieder eingeschaltet hast und mal
- 0:35wieder mit dabei bist. Deine Gastgeber, meine
- 0:37Wenigkeit, der Tino und natürlich der fantastische Fabi
- 0:41Fabi. Grüße dich zu einer weiteren
- 0:43Folge. Hey Tino, Was geht?
- 0:47Was geht? Ich fang gleich mal an.
- 0:50Ich hab gesagt was geht, ich hab ich hab gerade meinen Kaffee
- 0:54getrunken, ja. Stark, stark und ich hab mich
- 0:58mal gefragt ob es ne gute Idee wäre, wenn man einfach, also ich
- 1:02mag ja kaffeegeschmack ne, es gibt ja Leute, die mögen jetzt
- 1:05kaffeegeschmack nicht so sehr, aber ich mag ihn halt wirklich
- 1:08sehr und jetzt ist die Frage ob man kaffeegeschmack noch pimpen
- 1:13kann, weil ich trink den auch immer sehr stark ja damit also
- 1:16ich also mein Prinzip ist je stärker der Kaffee desto mehr
- 1:20kaffeegeschmack ich weiß nicht ob das stimmt, aber man kann
- 1:22mich gerne da berichtigen oder? Vielleicht mir da noch n paar
- 1:25Tipps geben, aber was ist wenn du so Bröselkaffee nimmst und
- 1:29dir darauf so n bisschen bröselkaffee und darauf dann so
- 1:32n maschinenkaffee noch drauf machst?
- 1:34Dann wird der ja noch krasser. Weißt du ja, klingt.
- 1:38Aber auch n bisschen eklig, muss ich sagen.
- 1:40Aber hast du es schon mal? Probiert ist die Frage.
- 1:43Nein, also Brösel Bröselkaffee kennt man ja jeder hatte schon
- 1:48die Situation wo er sich dachte ich mach so n löslichen Kaffee.
- 1:52Ja, den kannst du natürlich unfassbar stark machen, bis der
- 1:55Löffel drin steht. Aber weiß ich nicht, machst du
- 1:59das nicht mit frischen Bohnen, damit der Geschmack auch geil
- 2:02ist. Und dann so Brösel Kaffee dazu,
- 2:04nur damit es mehr kickt oder stärker wird.
- 2:06Aber ich glaube geschmacklich ist das nicht gut.
- 2:08Ist ja nur die genaue da willst. Du dir so einen richtigen Brei
- 2:10anrühren, dass du so viel reinmachst.
- 2:12Hast du das? Wirklich löffelig, das ist
- 2:15wirklich, wirklich eklig, ist ja nur eine Überlegung.
- 2:17Ja, ich wollte es ja nur mal einen Raum werfen.
- 2:19Ja, man macht dir doch einfach eine große Tasse.
- 2:22Espresso sozusagen. Aber mehr Kaffeegeschmack geht
- 2:26doch nicht. Aber es ist nicht, weil mein
- 2:28Herz das mitmacht. Das andere ist auch nicht gut
- 2:31für dein Herz. Nur mal so.
- 2:35Entkoffeinierter Kaffee, na ja, o.
- 2:37K dann ja, dann mach genau löslichen entkoffeinierten
- 2:40Kaffee machst du da rein und dann gib ihm, bis es dir genug
- 2:44ist, bis es nicht mehr schmeckt. Probier es aus, Berichte dann
- 2:47einfach in der nächsten Folge mach ich hast du jetzt ne Woche
- 2:50Zeit damit. Die perfekte Dosis zu finden, um
- 2:53uns allen das mitzuteilen, ja. Also ich find es auch n bisschen
- 2:56eklig in der Vorstellung. Ich wollte ja nur mal fragen.
- 2:59Ja, weil manchmal hat man ja Ideen, wo man sich so denkt,
- 3:02dies ist Quatsch und andere denken, aber ist gar nicht so
- 3:04Quatsch, aber ich merke es ist Quatsch.
- 3:07Ja, pass auf. Wir hatten das Thema ja auch im
- 3:09letzten. Livestream kurz.
- 3:11Ich erinner mich daran ja und ich glaube, die Resonanz war
- 3:15auch eher so, so Alter. Also vielleicht hast du jetzt
- 3:20ist die Stichprobe groß genug jetzt.
- 3:23Mich interessiert das, also ich. Es beschäftigt mich noch.
- 3:26Aber aber an der Stelle muss man natürlich sagen, liebe Zuhörer,
- 3:31liebe Zuhörer, falls du bei dem Livestream dabei sein möchtest,
- 3:34um direkt deine Meinung sagen zu können zu solchen Themen, dann
- 3:38schau doch gerne mal vorbei. Dienstag, 20:00 Uhr sind wir
- 3:40immer live und falls du dem Podcast noch nicht folgst, dann
- 3:43mach auch das gerne, um diese Diskussion fortan nicht mehr zu
- 3:46verpassen. Also vielen Dank dafür.
- 3:50Ich weiß nicht, ob man die verpassen will.
- 3:54Verpass ich sehr gerne die Diskussion, OK.
- 3:58Aber lass mal reinstarten. In unsere heutige Folge.
- 4:01So richtig ins Thema, und zwar geht es ja um, ich sag mal, ein
- 4:06Prinzip, was wir irgendwie schon mal hatten, jetzt vor kurzem gar
- 4:10nicht so lange her, aber auch irgendwie wieder nicht.
- 4:16OK, krass jetzt, jetzt bin ich, jetzt bin ich neugierig.
- 4:21Na ja, also ich fang erstmal so an.
- 4:23Ja wir hatten ja das IOSP Prinzip, das wurde uns ja
- 4:26vorgeschlagen auf dem Discord und dann haben wir gesagt, OK,
- 4:30wir gucken uns das mal an, weil wir kannten das selber noch
- 4:33nicht und dann haben wir gesagt, es ist irgendwie interessant,
- 4:35lass uns das mal angucken, recherchieren und dann mal ne
- 4:37Podcast folge darüber machen und mal bewerten, so wie wir das so
- 4:39finden. Was ja wirklich n cooles Prinzip
- 4:42ist. Ne so.
- 4:44Echt, wirklich unbekannt. Für viele aber hat n sehr guten
- 4:48Kern sag ich mal. Genau fand ich dann nämlich
- 4:51auch. Das Witzige war, als, wir haben
- 4:54ja gesagt, OK, wir machen das und haben dann uns so n bisschen
- 4:57irgendwie belesen und so weiter und jeder hat so für sich
- 5:00recherchiert und dann haben wir uns quasi getroffen, haben
- 5:05darüber geredet und haben gemerkt, OK warte mal, wir haben
- 5:09irgendwie. Was anderes uns irgendwie daraus
- 5:14recherchiert, weil du hast das richtige Prinzip gefunden und
- 5:18ich irgendwas völlig was. Ist einfach falsch abgebogen.
- 5:20Stimmt nicht. Ja, genau, und es und das ist
- 5:25halt auch das, worum es geht. Das witzige ist, dass es halt
- 5:27eigentlich gleich heißt, also auch IOSP, manche sagen auch,
- 5:31oder manchmal findet es man, findet man es auch unter IPOS
- 5:35oder I Pos oder so. Als man ist sich glaub ich
- 5:40uneinig, wie genau das heißt. Ja, das eine ist ja auch
- 5:43eigentlich eher IOS principal, ne, also Integration, Operation,
- 5:49Segregation, Principal und das was wir jetzt haben ist da geht
- 5:54es um Input, Output, Storage und Processing ne OK so.
- 6:01Klingt erstmal n bisschen nach diesem altbekannten Eva Prinzip,
- 6:05aber ich denke da steckt noch mehr hinter.
- 6:09Ja, also ich sag mal so, du kennst ja wahrscheinlich, oder?
- 6:12Das kennen ja, also ich kenne es auf jeden Fall, ich denke, das
- 6:14kennen viele, dass man irgendwie mit einem Softwareprojekt
- 6:17startet, alles harmlos, alles gut, ja man haut irgendwo ne
- 6:21Funktion hin, irgendwo brauchst du vielleicht mal n API call ne
- 6:25oder API call sorry hab es mal wieder falsch ausgesprochen.
- 6:29Das machst du mit Absicht, oder? Das ist immer so n kleiner
- 6:31Träger den du siehst kitzelst. Hinten im Nacken.
- 6:34Also ich für mich ist das völlig fein, aber es hat ja echt einige
- 6:37Leute hart geträgt. Wo du das das erste Mal gesagt
- 6:40hast, API, was hat er gesagt. Ja, das war ich.
- 6:46Meine natürlich die API, aber das ist jetzt nur ein Beispiel,
- 6:52ne, aber was halt. Also ich finde an dem Beispiel
- 6:55kann man es ganz gut erklären, weil du fängst dann an und hast
- 6:58dann aber irgendwann ne es geht relativ schnell hast du so ein
- 7:02wenn du nicht aufpasst hast du so ein Code wo dann sowas wie?
- 7:06Drin ist, dass der Input gelesen wird, die Daten verarbeitet
- 7:09werden, die werden gespeichert und dann wird quasi Response
- 7:13rausgeschickt und an sich klingt das ja auch erstmal ganz gut,
- 7:16bis zu dem Punkt, wo du dann irgendwann sagst, OK warte mal,
- 7:18das ist irgendwie alles nur im Controller drin oder was weiß
- 7:24ich, du lagerst das eine aus, aber nur halbherzig, also weißt
- 7:27du, wenn du sozusagen an einem Punkt kommst, wo deine
- 7:30Verantwortlichkeiten wieder eigentlich völlig auseinander
- 7:34driften, sag ich jetzt mal ne. Und man dann halt hinterher gar
- 7:39nicht mehr checkt, was passiert. Man kann es irgendwie alles
- 7:42nicht testen und man kennt es ja und sowas geht ja eigentlich
- 7:47viel schneller als man irgendwie denkt und dann zack.
- 7:52Also das was du recherchiert hast, nennen wir es mal I Post.
- 7:55Das klingt irgendwie cool. Ja.
- 7:57Obwohl es erinnert so n bisschen an diese komischen
- 7:59Zigarettendinger, ne, die heißen icos heißen die ne ach so, na ja
- 8:02gut, aber wir reden hier von Softwarethemen von guten Sachen
- 8:06ja, also nennen wir es doch icos klingt erstmal cool und ich
- 8:12glaube das Prinzip, wenn ich dich jetzt auch so richtig
- 8:15verstanden hab, ist quasi auch in Richtung wie das IOSP auch
- 8:21ähnlichen Ansatz verfolgt, dass du ne klare Trennung von Ebenen
- 8:25oder Schichten sag ich mal hast. Also würde ich das jetzt
- 8:29verstehen, dass man sagt, ich hab halt Input ganz klar
- 8:32definiert, was ist Input Processing, hast du gesagt
- 8:36Output oder auch Storage, dass ich halt so klare
- 8:38Verantwortlichkeiten hab und das sind Ebenen unterteile um
- 8:42gedanklich in meiner Architektur, das ist ja auch
- 8:46irgendwo nachher wieder n softwarearchitektur Grundstein
- 8:48den ich damit lege mit dieser Denkweise, dass ich wieder genau
- 8:53weiß, wo kümmer ich mich um was. Ja.
- 8:57Ist ja auch n gutes Beispiel jetzt denken sich so Leute, ja
- 8:59ich hab n Controller, warum sollte der denn das und das
- 9:02machen, das passiert aber wirklich schnell, dass man da n
- 9:04bisschen Zuständigkeiten sagt man das auch vermischt.
- 9:09Ja und deswegen ist das halt auch immer cool, nennen wir es
- 9:15mal. Ich finde, dass diese Prinzipien
- 9:17kann man auch so n bisschen als eselsbrücken betrachten, ja.
- 9:22Also wenn ich zum Beispiel diese Abkürzung ipos jetzt im Kopf hab
- 9:25ne und ich denk bei dem entwickeln daran dann ja, das
- 9:28kann man sich gut merken und dann ja wofür stand das noch
- 9:31mal? OK, was ist der Sinn dahinter,
- 9:32weil das Prinzip genauso wie bei IOSP ist ja nie kompliziert in
- 9:38der Theorie. Die Praxis.
- 9:40Ist nachher das Entscheidende ist wirklich sauber
- 9:42durchzusetzen, um die Benefits davon zu haben und genauso, wir
- 9:47werden ja jetzt da auch so n bisschen drüber reden hoffe ich
- 9:49ne also ich hoffe du hast noch n bisschen Zeit.
- 9:52Muss gleich los. OK, ich beeil mich, dass es in
- 9:58der Theorie nicht immer einfach ist, diese 4 Ebenen einzuhalten,
- 10:01aber man halt gute Benefits davon zieht, wenn man, wenn man
- 10:04es schafft halt ja. Auf jeden Fall.
- 10:06Ich mein Gut, im Endeffekt gibt es, es gibt immer viele
- 10:08Prinzipien, die dafür sorgen oder sagen, ja, damit
- 10:11strukturierst du deinen Code und so weiter ne das da gibt es
- 10:14natürlich verschiedene und das sind doch.
- 10:16Mehr oder weniger verschiedene, aber vielleicht auch Ansätze,
- 10:19die sich wieder ähneln. Es ist aber trotzdem immer
- 10:22irgendwie interessant, darüber sag ich mal Bescheid zu wissen
- 10:25oder auch mal die ein oder andere Brille aufsetzen zu
- 10:29können, um zu sagen macht das gerade mehr Sinn oder das gerade
- 10:32mehr Sinn ne ich meine du hattest ja auch gesagt, dass.
- 10:36Dieses ipos da sozusagen schichtentrend, und das tut es
- 10:40auch irgendwo. Aber in in diesem Fall ist es
- 10:43schon so, ist der Fokus von der Denkweise, sag ich jetzt mal,
- 10:46für dieses Prinzip mehr wie fließen Daten durch dein System,
- 10:51weißt du also wenn du das so n bisschen abgrenzt zu IOSP was
- 10:56wir hatten, dann ist das ja wirklich so sag ich mal ne.
- 11:01Mehr noch, diese Art von wer ist wirklich für die Business Logik
- 11:05verantwortlich und wer nicht ne so diese Trennung sag ich jetzt
- 11:08mal. Und hier ist es natürlich auch
- 11:10irgendwo sinnvoll zu sagen, OK wo findet die Business Logik
- 11:14statt, aber irgendwie ist da mehr so diese Brille aufzusetzen
- 11:17wie fließen Daten durch mein System durch ne und gerade wenn
- 11:20wir jetzt bei dem Controller sind und wir ne ordentliche
- 11:23Struktur aufbauen wollen, dann ist es ja nicht so dass man sagt
- 11:27OK du kippst Daten in den Controller rein und.
- 11:30Da ist Feierabend und dann gibt es wieder ne Antwort raus.
- 11:33Sozusagen ja, aber genauso kann man natürlich auch n Controller
- 11:36mit IOSP betrachten, ja. Ja, es geht halt beides.
- 11:43Aber siehst du es nicht denn trotzdem so, dass diese
- 11:47Schichten so Verantwortlichkeiten definieren?
- 11:51Ja, schon. Wie gesagt, das ist halt nur so
- 11:54n. Also ich finde auch, wenn wenn
- 11:57ich mal ehrlich bin, dass die. Also die Art und weisen von
- 12:02beiden Prinzipien zum Beispiel, aber auch von anderen Prinzipien
- 12:04schon sehr ähnlich sind. Aber.
- 12:07Wie gesagt, es ist halt. Irgendwie ne Art und Weise an
- 12:11die Dinge ranzugehen oder Dinge zu betrachten.
- 12:14Ja, also find ich immer und für mich ist es halt so n Ding, dass
- 12:17dass dieses Prinzip halt dafür da ist zu sagen, wie fließen
- 12:20Daten halt durch mein System. Ne.
- 12:22Die diese diese Grundbrille aufzusetzen.
- 12:26Und dann halt eben die Schichten daraus abzuleiten.
- 12:28Ne. Gerade bei IOSP kann sich das
- 12:30ganze ja noch, wenn du es richtig durchziehst oder je
- 12:33nachdem wie krass du wie feingranular du es durchziehst,
- 12:36kann das ja noch sehr sehr feingranularer dann am Ende
- 12:40sein, ne, dass du immer wieder ne Schicht hast die sagt OK wir
- 12:43sind jetzt hier an der Operation, aber wir sind wieder
- 12:46einer oder an der Integration noch mal in der Integration
- 12:48jetzt sind wir in der Operation zum Beispiel ne das also.
- 12:51Das das war ja diese Baumstruktur, die sich dadurch
- 12:54sozusagen ergibt, dass man das wirklich wieso n.
- 12:56Baum aufzeichnen kann. Das ist ja auch wirklich das
- 12:58Spannende dabei, wenn man es also komplett durchzieht, ja
- 13:02genau, ja, geh ich mit, also wenn man so drüber nachdenkt,
- 13:06dann ist IOSP in dem Ursprung so, wie wir das ja auch erklärt
- 13:12hatten. Es ist halt ne Denkweise wie ich
- 13:16unterteile. Ne ist es halt wirklich Logik,
- 13:19also ist es Operation oder ist es eher NN Ablauf den ich
- 13:23definiere die Integration sozusagen und hier so wie ich
- 13:29das jetzt verstanden habe, geht es eher darum ja ich find Fluss
- 13:34Datenfluss gar nicht schlecht das so zu nennen es wirklich in
- 13:384 Ebenen einzuteilen diese. Ein Kreislauf sozusagen und
- 13:43nicht Kreislauf, sondern ein Ablauf.
- 13:45Ne, ich krieg halt zum Beispiel von außen ne Anfrage, keine
- 13:48Ahnung was das immer es kann. Was hast du gesagt NAPI Call
- 13:52sein ja den ich empfange entgegennehme es können
- 13:55Sensordaten sein ja also es muss ja jetzt nicht alles wieder Back
- 13:58and Frontend sein, das kann natürlich auch irgendwas
- 14:00embedded mäßiges sein, dass Sensordaten aufgezeichnet werden
- 14:04die verarbeitet werden müssen, dann hab ich ja auch.
- 14:06Mein Input Processing, vielleicht auch noch n Storage,
- 14:09wenn ich so die letzten Messungen meinetwegen speichern
- 14:11möchte oder so und auch wieder n Output, dass ich irgendwas auf
- 14:14einer auf dem Display Anzeige oder so.
- 14:17Ja und im Prinzip geht es darum die Verantwortlichkeiten für
- 14:23diese 4 Schritte im Fluss festzulegen und IOSP an sich ist
- 14:30irgendwie noch ne Ebene abstrakter da drüber, weil.
- 14:36Das wiederum kann ja in diesen Teil 4 Ebenen, die wir heute
- 14:39besprechen, ja wieder integriert sein und mehrfach drin
- 14:42vorkommen. Ja, find ich gut.
- 14:44Sich den Baum noch mal vorstellt, ne, dass ich so
- 14:46verschiedenen Ebenen habe, wo meine Blätter sag ich mal drin
- 14:50sind und dann geh ich diese Ebenen runter und wieder hoch
- 14:53sozusagen, aber der Baum kann ja mehrere Blätter da drin haben,
- 14:57weißt du wie ich das mein? Ja, das war halbwegs
- 14:59verständlich, also was ich eigentlich noch.
- 15:02Oder was, wo, was? Ich auch.
- 15:04Eigentlich gerade noch sagen wollte, das hast du ja mehr oder
- 15:06weniger gerade ausgedrückt. Ich versuche noch mal
- 15:08zusammenzufassen es das eine schließt das andere ja nicht
- 15:10aus, nur weil man etwas betrachtet aus der Brille von
- 15:15ipos ne wo wie die Daten durchs System fließen heißt das dann
- 15:19noch lange nicht, dass man nicht auch in der Lage ist zusätzlich,
- 15:22das ist ja eine relativ grobe Brille wie du meintest.
- 15:25Diese 4 Einheiten die du dann irgendwie siehst, die eigentlich
- 15:27fast immer auftreten. Und dann aber zum Beispiel IOSP
- 15:32noch drauf zu setzen, um zum Beispiel die einzelnen Bereiche
- 15:35zum Beispiel auch vielleicht noch mal n bisschen besser zu
- 15:39strukturieren und so weiter in viel Feingranularer, das ist ja,
- 15:43das schließt sich das eine ja nicht aus, und das sollte man
- 15:45auch immer irgendwie, vielleicht im im Auge behalten, ne, das ist
- 15:48jetzt nicht zum Beispiel wie bei Softwarearchitekturen, wo du
- 15:51sagst, OK, ich mach jetzt mal n Monolith und gleichzeitig mach
- 15:54ich noch n microservice. Oder Microservices draußen.
- 15:57Das wird irgendwie nicht funktionieren, aber gerade bei
- 16:00sowas zum Beispiel, da schließt sich das eine, schließt das eine
- 16:02das andere nicht aus, ne? Ja, aber dann lass uns das Ganze
- 16:07doch mal an einem simplen Beispiel machen.
- 16:09Ich find halt so, n Backend ist eigentlich mal n ganz gute,
- 16:12gutes Beispiel für sowas um diese 4 Schichten mal
- 16:15durchzusprechen, weil ich hab das Gefühl ja also ich hoffe da
- 16:19kommen wir hinzu dem Fazit, wenn nicht dann ist auch cool, dass
- 16:23man das. Ipos nenn ich es jetzt noch mal.
- 16:28Ja, also wie gesagt, gibt halt verschiedene, also diese 4
- 16:30Ebenen ja im Prinzip ja wirklich n Grundstein für Architekturen
- 16:35ist. Was ich vorhin schon mal kurz
- 16:37meinte, weil wenn ich jetzt so drüber nachdenke, wir haben so
- 16:39über hexagonale Architekturen gesprochen beispielsweise dann
- 16:42habe ich ipos da drin in, also vervielfacht sozusagen.
- 16:48Ich habe dann so Domain basiert ja immer sozusagen ipos.
- 16:53Ich weiß. Nicht wie ich es anders
- 16:55formulieren soll, aber es ist im Prinzip irgendwo ja schon der
- 16:58Grundstein für Architekturen. Und wenn wir das jetzt mal am
- 17:01Beispiel durchsprechen, glaub ich, wird das auch ersichtlich.
- 17:04Ja, deswegen lass uns da mal anfangen, wir nehmen jetzt mal n
- 17:07ganz einfaches Backend und das hat jetzt nicht verschiedene,
- 17:10also wir betrachten das jetzt nicht domänenweise, sondern es
- 17:14gibt nur eine, es ist jetzt so n ganz ganz einfaches Backend ja
- 17:18minimal bei und. Wir haben jetzt nen Controller
- 17:23wie du meintest. Das ist für mich jetzt gerade
- 17:26so, diese Inputschicht ja unter anderem ja werden wir noch
- 17:30sehen, aber es ist auf jeden Fall ne Inputschicht, das heißt
- 17:33über diesen Controller ja, wir haben jetzt so ne
- 17:35Controllerklasse kann ich Anfragen entgegennehmen,
- 17:39beispielsweise eine ganz simple Anfrage, ich möchte wissen, die
- 17:45wievielte Folge ist das vom Coding Buddies Podcast?
- 17:49Ja. Irgendwas jenseits der 160.
- 17:52Ja, genau, ich weiß es gerade auch nicht, das ist schon mal
- 17:55gut, Backend weiß es nicht, also größer 160 erwarten wir als
- 18:00Antwort so, das heißt, diese Anfrage kommt rein so, jetzt ist
- 18:06das was ist so die Aufgabe von dieser input Ebene natürlich die
- 18:11Daten empfangen OK aber zählst du da noch andere Sachen hinzu?
- 18:15Ja, du kannst halt Daten, also Daten entgegennehmen.
- 18:18Klar wie du meintest sie aber zum Beispiel auch zu validieren,
- 18:21ja, oder in vielleicht in n internes Format umzuwandeln ne
- 18:26und da kannst du natürlich das direkt im Controller machen, ne,
- 18:29dass du das sozusagen wirklich dann dort aufnimmst.
- 18:31Du kannst es natürlich, aber sozusagen auch noch auslagern,
- 18:33dass du dass der Controller jetzt gar nicht so viel macht.
- 18:38Da sind wir dann aber schon wieder, würde ich sagen, schon
- 18:39fast wieder so n bisschen gehen wir in die Richtung IOSP, was
- 18:42wir schon gesagt haben, ne, dass wir sagen wir der Controller ist
- 18:45NN Operator n Integrator, der quasi dann im Endeffekt die
- 18:49einzelnen Operations aufruft, ne und zum Beispiel sagt OK bitte
- 18:52hier ich geb das jetzt mal weiter erstmal jetzt die
- 18:56Eingaben validieren ne, aber das ist prinzipiell genau der die
- 19:00Aufgabe vom Input von der Inputschicht, dass man sagt OK
- 19:03es kommen Daten rein und wir. Validieren Sie und bearbeiten
- 19:07Sie so oft, dass wir sie quasi auch nicht nutzen können.
- 19:09Ja, also das ist zum Beispiel n wichtiger Punkt, den ich auch da
- 19:13bei der Inputschicht sehe oder was so ne Practice ist, die ich
- 19:17gerne mache. Ja, ist ja auch Geschmackssache,
- 19:19immer am Ende des Tages, aber man trennt ja oft im Prinzip das
- 19:27interne Datenmodell von der Außenrepräsentation.
- 19:31Ne, also so klassische DTOS und mein internes Datenmodell.
- 19:38Angenommen, ich empfange jetzt, wie soll ich sagen oder geben
- 19:44wir ja doch sagen wir mal, ich empfange als Werte oder als
- 19:49Anfrage zum Beispiel irgendwelche Filter oder so als
- 19:53String so, das ist aber ne ne Zahl ist jetzt wirklich n ganz
- 19:57simples Beispiel. Dann will ich intern ist es für
- 20:00mich ne Zahlen intecher bei beispielsweise Empfang hab ich
- 20:03aber n string so das ist jetzt ne relativ simple Konvertierung.
- 20:08Ja, aber es ist passt halt nicht zu meinem internen Datenmodell
- 20:11und das sowas seh ich halt auch bei der bei der Inputschicht zu
- 20:16sagen OK ich muss aus diesem String ne Zahl machen und das
- 20:20geb ich dann in mein. Processing sozusagen.
- 20:24Weil intern erwartet mein System da ne Zahl und ich will nicht da
- 20:28jetzt n String reingeben und erwartet dann von meinem System,
- 20:30dass es das noch konvertiert. So, das ist so meine Denkweise,
- 20:35ich versuch dann zum Beispiel von sag ich mal einem DTO ja
- 20:39was, ich empfange es intern zu mappen auf meine interne
- 20:43Datenpräsentation, aber dann halt noch in diese Inputschicht
- 20:47zum Beispiel im Controller. Genau.
- 20:49Und gebe dann das an die Processingschicht, was
- 20:52beispielsweise ein Service sein kann, der hat weiß genau Input
- 20:56Output ist klar definiert vom Format, also vom Datentyp her
- 20:59und arbeitet damit. Genau.
- 21:02Und dann hast du halt in deinem Processing hast du halt die
- 21:05Business Logik drin, die halt die Daten dann im Endeffekt die
- 21:08aufbereiteten Daten die zu deinem.
- 21:10System passen die dann halt verarbeitet werden.
- 21:13Also da steckt dann halt. Das ist quasi Schicht 2.
- 21:15Jetzt sind wir jetzt. Gedanklich ne genau Input
- 21:17Processing, genau wo dann die Geschäftslogik drin steckt.
- 21:21Zum Inputschicht Ich find gerade beim Controller zum Beispiel ist
- 21:24n Controller auch sag ich mal nativ auf jeden Fall auch
- 21:29irgendwie ne Art von. Input Teil definitiv, weil du
- 21:34kannst. Natürlich, wenn du sagst, du
- 21:35erwartest zum Beispiel Daten ja n String beispielsweise in
- 21:39deinem, was du entgegennimmst in deinem Rest Endpunkt nur mal als
- 21:42Beispiel und. Du Sendest aber n Canon Array
- 21:46oder so ne, dann knallt es da ja auch schon.
- 21:49Also bevor du überhaupt dieses. Validieren das absolut, seh ich
- 21:53da auch. Aber bevor du die Daten fehlen
- 21:55halt ja. Also wenn du einfach keine
- 21:57gültige Anfrage kriegst. Genau also musst du.
- 21:59Das nicht in dein System schleifen, weil ist halt ne.
- 22:02Richtig. Also es ist ja ein Unterschied,
- 22:04ob du zum Beispiel sagst, du hast erwartest, eine Zahl
- 22:07kriegst eine Zahl, aber du sagst, die Zahl darf nur
- 22:09zwischen 5 und 10 liegen, als Beispiel ne, dann musst du es
- 22:13halt noch mal für dich validieren mit deinem ich nenn
- 22:15es mal eigenen input Teil, aber das wollte ich noch mal so
- 22:18sagen, weil ich das irgendwie interessant für später finde,
- 22:22ne. Aber das ist ein spannender
- 22:24Punkt. Ich weiß nicht, ob das das
- 22:25später ist. Siehst du?
- 22:28Was siehst du da in der Inputschicht zu prüfen, dass die
- 22:31Werte da sind, also dass es eine valide Anfrage ist oder auch
- 22:35noch, ob der es in einem Geldgültigen.
- 22:38Wertebereich ist ja ist n guter Punkt.
- 22:42Also es kommt tatsächlich etwas drauf an.
- 22:44Weil also angenommen du hast zum Beispiel sowas wie n so ne so ne
- 22:55anmeldeform oder so ne. Und da sind vielleicht irgendwie
- 22:59Dinge definiert, wo du wirklich sagst, ich validiere Werte,
- 23:03damit ich sozusagen mit der Business Logik damit arbeiten
- 23:07kann. Dann würde ich sagen, dass das
- 23:08Validieren der Werte, je nachdem wie es halt eben aussieht, zum
- 23:12Beispiel weiß nicht, da darf kein SZ drin sein oder so, rex
- 23:16Dinge oder so ne, also Sonderzeichen oder so, dass man
- 23:20sowas schon vorher finde ich abfragen kann im in der input
- 23:24Validierung. Bevor man wirklich in die
- 23:26Geschäftslogik reingeht, da würde ich schon, das würde ich
- 23:29schon sagen, wenn es jetzt zum Beispiel um bestimmte Werte
- 23:31geht, so kleinere Abfragen bei Berechnung oder so ne kann man
- 23:39es theoretisch auch in der in der Geschäftslogik dann mit
- 23:44Reingeben, ne, also dass man aber das das das hängt
- 23:47tatsächlich n bisschen finde ich vom Anwendungsfall ab aber.
- 23:51Es ist schon schön, wenn du Daten in die Geschäftslogik
- 23:54reingibst, wo die Geschäftslogik weiß.
- 23:56Ich kann damit arbeiten und muss nicht noch überprüfen.
- 23:59Sind denn die Daten valide, mit denen ich jetzt arbeiten darf,
- 24:02sondern ich finde, die Geschäftslogik kann schon sagen.
- 24:05Das was ich. Bekomme damit kann ich meine
- 24:08Logik auch ausführen und muss nicht vorher noch sagen ja, aber
- 24:11vielleicht passt das hier gerade gar nicht.
- 24:16OK. Seh ich an manchen Punkten
- 24:20anders, aber wie gesagt, das ist halt Geschmackssache.
- 24:24Ich zum Beispiel gehen wir also ob die valide sind, ja ob das
- 24:28gilt, der Datentyp eingehalten ist, ob das zum Beispiel sag ich
- 24:32mal, konvertiert werden kann, überhaupt sowas seh ich auch in
- 24:35der Inputschicht, aber zum Beispiel hat etwas keine Ahnung,
- 24:39du überprüfst ob es ne. Gültige Länge hat etwas nicht zu
- 24:42lang ist zu kurz ob der Wertebereich eingehalten ist, ob
- 24:46zum Beispiel sagen wir mal, du willst auf irgendwas zugreifen
- 24:49und kriegst nen Index -1 oder sowas, sowas seh ich halt
- 24:54irgendwie im Service dann also in der Processingschicht, weil
- 24:57es denn einfach sich besser abtesten lässt an der Stelle
- 25:00auch als das im Controller zu machen, also sowas sowas bau ich
- 25:05zum Beispiel dann in den Service mit ein.
- 25:07Also wie gesagt, das ist ja auch dann immer Geschmackssache, ne,
- 25:10aber deswegen spannende Frage, wo hört bei dir Validierung auf
- 25:16und wo? Also in im Input auf ne weil wie
- 25:20gesagt diese Fehlerfälle die jetzt so wirklich definierte
- 25:23Fehlerfälle sind, die hab ich zum Beispiel dann meistens in
- 25:27der Processing Service Schicht. Und alles, was, so sag ich mal n
- 25:31klassischer Bad Request ist, hab ich dann im Controller sowas wie
- 25:35es fehlen Daten im im Body. So jetzt trifft mal n bisschen
- 25:38ab aber ich find die Frage spannend also liebe Zuhörerin
- 25:40liebe Zuhörer, sag uns auch gerne mal deine Meinung dazu,
- 25:43weil das macht halt gefühlt auch jeder anders.
- 25:46Also deswegen hatte ich vorhin gemeint, noch ganz kurz, dass
- 25:49man halt zum Beispiel ja diesen Input auch auslagern kann.
- 25:52Also angenommen du kriegst NDTO rein und möchtest es, aber zum
- 25:55Beispiel in dein internes Datenformat wandeln, kannst du
- 25:57das ja in einem eigenen ich nenn es jetzt.
- 25:59Mal Service ja, was jetzt? Nicht unbedingt, sagen wir mal.
- 26:01Ich nenne es jetzt mal Input, Service, Name austauschbar, aber
- 26:06dass du dann quasi diese ganze Umwandlung dort machen könntest
- 26:09beispielsweise und dann das Objekt in den Service rein
- 26:11gibst, das heißt du könntest dann quasi muss das nicht alles
- 26:14im Controller auf Controller Ebene testen, sondern kannst
- 26:17sozusagen diese Validierung, Umwandlung und so weiter alles
- 26:19einzeln in einem einzelnen Klasse testen und kannst dann
- 26:22sozusagen im Service davon ausgehen, dass du halt eben die
- 26:24entsprechenden Daten auch so bekommst, wie du sie haben
- 26:27möchtest. Gerade jetzt in dem Punkt, wo
- 26:29ich meinte, wenn du sagst, du kannst einen String reingeben,
- 26:32OK, das kann der Controller nicht unbedingt abfangen, aber
- 26:35bestimmt also ne, aber du kannst halt Sonderzeichen reingeben und
- 26:39die kannst du theoretisch schon mal vorfiltern, damit du das
- 26:41nicht im Service machen musst. Aber wie ich auch meinte, es
- 26:43kommt voll auf den Anwendungsfall drauf an, aber ja
- 26:47ist voll spannende Geschichte, weil da trifft man glaube ich
- 26:50auch bei 2 Leuten auf 3 meinungs.
- 26:53Ja, das zeigt halt einfach, dass diese Grenzen halt so n bisschen
- 26:56schwimmend sind. Es gibt halt kein richtig oder
- 26:58falsch. Ne, das Gleiche sieht man,
- 27:01obwohl ich glaub in der nächsten Schicht ist es n bisschen klarer
- 27:04noch wenn wir jetzt sagen wir haben jetzt unser Processing,
- 27:07beispielsweise ne Serviceklasse die jetzt die Business Logik
- 27:10beinhaltet und die Business Logik hat halt.
- 27:13Wir jetzt zum Beispiel drin, dass wir uns eine Anfrage
- 27:16speichern oder bei was hatte ich vorhin gesagt, Sensordaten, die
- 27:19letzte Messung speichern, also auf jeden Fall eine Art Storage
- 27:23harm, auf den wir zugreifen, und da finde ich kann kann man sehr
- 27:27gut die Grenze ziehen, weil die Business Logik hat wie gesagt
- 27:32also die der Service hat wie gesagt jetzt in der Processing
- 27:35Schicht die Business Logik mit der Reihenfolge was wie
- 27:38berechnet werden muss oder gespeichert werden muss et
- 27:41cetera aber dann. Wenn ich in dem Moment komme,
- 27:44dass ich etwas aus dem Speichern lese oder schreibe, verlass ich
- 27:47halt die Schicht und hab wieder ne Schnittstelle und bin dann in
- 27:50der Storage Ebene, was ja ganz oft so im klassischen Sinne nen
- 27:55Repository ist und nur das Repository arbeitet auf der
- 27:59Datenbank heißt lädt, also liest davon und schreibt da drauf.
- 28:03So und das ist ne ganz klare Trennung finde ich.
- 28:06Ja, auf jeden Fall. Definitiv geh ich auch so.
- 28:12Ich glaub da gibt es auch gar nicht so viel zu zu sagen, weil
- 28:16was Gutes ist natürlich dann an der Stelle diese die
- 28:20Schnittstelle zur Datenbank so zu gestalten, dass man halt im
- 28:23Endeffekt die Datenbank auch austauschen könnte.
- 28:25Ne so gut wie es geht das mal sozusagen wichtiger.
- 28:29Punkt. Weil wenn ich das im Service
- 28:30hab, dann wird es halt schwierig.
- 28:32Genau deswegen hier wieder auch die Trennung und dann gibt dann
- 28:36kommen wir zum Output, ne sozusagen dem letzten Part.
- 28:40Und das ist ja der Punkt, wo sozusagen die Ausgabe
- 28:43stattfindet, wo das Ergebnis im Endeffekt wieder nach außen
- 28:45gegeben wird. Also wenn du jetzt zum Beispiel
- 28:48sowas wie bei unserem Backend hast, dann zum Beispiel den AP
- 28:51Response beispielsweise ne und ich finde um.
- 28:56Bevor ich das jetzt, wo ich darauf jetzt eingehe, finde ich,
- 28:58es gibt noch ein kleines cooles Beispiel, was irgendwie relativ
- 29:01straight ist meiner Meinung nach, weil wenn du zum Beispiel
- 29:05Ziel I Befehl machst. Du machst zum Beispiel, da hast
- 29:07du ja auch so den Input über das Terminal.
- 29:10Beispielsweise gibst du etwas rein, dann wird irgendwie was
- 29:12berechnet und dann wird zum Beispiel eventuell eine Datei
- 29:16erzeugt oder so, die dann. Am Ende rausgegeben wird.
- 29:22Man könnte also es ist natürlich auch wieder so n Ding es.
- 29:25Ist die. Dateiausgabe, die sozusagen
- 29:28erzeugt wird, ist das das Storage oder ist das die?
- 29:31Ist das der Output? Kann man drüber reden, aber ich
- 29:33find es, es kann halt relativ straight sein, dass es ein so ne
- 29:36Linie ist. Weißt du wo du sozusagen
- 29:37anfängst und dann hinten hinten rauskommst?
- 29:40Bei so einem Controller ist es ja so, wir haben den.
- 29:43Request, der reinkommt, dann geht der irgendwie ne
- 29:46Validierung, dann die Processings wird gespeichert und
- 29:49dann geht der ja irgendwie wieder zurück und kommt der über
- 29:52den Controller wieder raus ne und?
- 29:55Quasi rückgabewerte sozusagen, die man dann genau und damit
- 29:59antwortet. Sozusagen.
- 30:01Genau. Also jetzt größer 160 bei der
- 30:04Folge. Richtig, und da finde ich ja zum
- 30:07Beispiel, also da denk ich mir dann oder im ersten Moment, wenn
- 30:10ich so darüber nachdenke, hab ich mir gedacht, OK.
- 30:12Wenn jetzt n Controller n Request bekommt ne und der aber
- 30:16gleichzeitig auch wieder antwortet.
- 30:18Ne hab ich mich dann gefragt, ist da nicht eigentlich die
- 30:21Trennung kaputt? Ne wenn man jetzt sagt man also
- 30:23wir hatten ja auch von der Trennung von
- 30:25Verantwortlichkeiten gesprochen und das fand ich irgendwie
- 30:28interessant, wie siehst du das? Weil du jetzt quasi eine
- 30:35Controller klasse oder ne Instanz davon nutzt um Input und
- 30:39Output zu machen. Genau, beim Backend
- 30:41beispielsweise. Also sagen wir mal so, auf
- 30:47theoretischer gedanklicher Ebene ist es noch klar getrennt.
- 30:52Auf codetechnischer Ebene ist das halt nicht mehr einfach so
- 30:56ersichtlich ne, weil ich hab jetzt zum Beispiel eine Funktion
- 30:58die aufgerufen wird ne beispielsweise da ist jetzt mein
- 31:02Get Endpunkt, der ruft die Funktion auf wo wir die Daten
- 31:06entgegennehmen, dann wird der Service aufgerufen und das
- 31:08Ergebnis vom Service wird. Mit einer Antwort 200 OK, Größe
- 31:13160 zurückgegeben. So dann hab ich jetzt in einer
- 31:16Funktion Input und Output. Gedanklich ist es ja trotzdem
- 31:20irgendwo klar getrennt, aber halt Code technisch nicht das
- 31:25das versteh ich was du damit meinst ist aber oft sag ich mal
- 31:31auf so Framework basiert einfach so umzusetzen weil es ja auch
- 31:35weil es ja auch. In eine Schleife.
- 31:38Es ist halt n Roundtrip sozusagen ja in dem Fall bei
- 31:41Backends. Jetzt, weil.
- 31:43Ich muss natürlich genau auf diesen Request auch antworten.
- 31:47Ja, also ist das ja auch gut ersichtlich.
- 31:49Ich kriege diese Antwort, die die Anfrage rein, ich verarbeite
- 31:52sie und ich antworte da drauf und das seh ich halt im Code
- 31:56dann auch sauber strukturiert und trotzdem könnte man
- 31:59gedanklich in den Codezeilen so n Overlay machen sag ich mal und
- 32:04sagen Input Processing. Output und im Processing in der
- 32:09Funktion hab ich dann noch mein Storage sozusagen.
- 32:12Also ich kann das ja trotzdem klar trennen, so Highlighten
- 32:16sozusagen zeigen, wo ist die Ebene und dadurch glaub ich
- 32:20meiner Meinung nach ist es schon sauber getrennt, aber es ist
- 32:24natürlich nicht so schön ersichtlich, als wenn ich noch
- 32:28beispielsweise gehen wir noch mal in so n.
- 32:32Embedded Bereich. Ja, ich hab jetzt meine
- 32:34Sensordaten gut, das seh ich jetzt kann ich auch nur in der
- 32:37Theorie machen, aber da hab ich halt den Sensor als Input, diese
- 32:41Daten werden wahrscheinlich denn aufbereitet irgendwie
- 32:44verarbeitbar gemacht, geht ins Processing, da wird die
- 32:48Berechnung durchgeführt was auch immer der das damit passiert und
- 32:52am Ende ja dann hab ich das so n bisschen gespeichert auf dem
- 32:55Gerät und dann geh ich zum Beispiel zu einem Display und
- 32:57zeig das an das Ergebnis ja oder?
- 33:01Taschenrechner, ja, Input ist. Ich drück meine Zahlen und meine
- 33:06Plus zum Beispiel, Na meine rechenoperation nenn ich es mal.
- 33:10Das wird intern verarbeitet, dann kann man ja auch oft noch
- 33:13mal das letzte Ergebnis widerrufen, das heißt es wird
- 33:15auch irgendwo gespeichert und das Display wenn ich auf ist
- 33:19gleich drücke zeigt mir mein Output an so und da, da hast du
- 33:23halt ne klare Trennung, da kannst du sagen ich hab die
- 33:24Tasten als Input. Ich hab meine Recheneinheit da
- 33:27drin. Ich hab noch n kleinen Speicher
- 33:30und das Display ist die Anzeige am Ende ne also wenn du jetzt
- 33:33nicht so n roundtrip hast sondern wirklich geradlinig,
- 33:36dann ist es halt absolut klar trennbar.
- 33:38Genau. Also das mein ich auch ne, das
- 33:39ist halt, das ist halt bei manchen Systemen ist es halt,
- 33:42also man sieht erstmal super gut, dass dieses ipos ja schon
- 33:46irgendwie in vielen Systemen oder wenn ich gerade nahezu in
- 33:50allen Systemen irgendwie drin steckt, dass man es auch so
- 33:53einteilen kann wie du meintest so highlighten kann.
- 33:57Und gerade beim Controller war für mich als erstes so, na ja
- 34:00OK, aber du hast doch, also weil es auf der einen Seite heißt
- 34:03Trend das und auf der anderen Seite, wenn du dir den
- 34:06Controller nimmst, war für mich so OK, das ist aber irgendwie
- 34:09dann Input und output irgendwie das gleiche ne was ich aber noch
- 34:12interessant finde, so vom Gedankengang her und das hab ich
- 34:16früher zum Beispiel auch ganz oft gemacht.
- 34:18Es gab den Punkt, wo dann zum Beispiel das Processing vorbei
- 34:21war und du kriegst ja dann irgendwie was zurück, oder du
- 34:24willst ja irgendwie was zurückgeben und wenn es nur in
- 34:26200 OK ist, ne im besten Fall ist es nicht nur 200 OK, aber du
- 34:32willst ja irgendwas zurückgeben und dann kann es ja sein, dass
- 34:36zum Beispiel die Rückgabe etwas anders ist als das, was du aus
- 34:41dem Processing irgendwie aus dem Business Model Zurückbekommst.
- 34:44Ne zum Beispiel möchtest du für irgendein Objekt nicht die
- 34:46Datenbank ID mit übergeben? Geben oder so ne kann ja sein,
- 34:50so macht ja auch irgendwie Sinn und dann hast du irgendwie n
- 34:54Punkt wo du dann sagst OK ich bereite meine Daten irgendwie
- 34:57noch mal auf bevor ich sie wirklich jetzt endgültig
- 34:59rausschicke. So sehr wichtiger Punkt, ja.
- 35:02Genau. Und dann kann es natürlich auch
- 35:04sein. OK, vielleicht schicke ich ne
- 35:06200 zurück, vielleicht schicke ich aber auch was anderes
- 35:09zurück, auch in einem Fehlerfall, was schicke ich da
- 35:11zurück und ich hab das ganz oft so gemacht, dass ich dann im
- 35:13Controller gesagt Hab, wenn das und das passiert ist, dann
- 35:16schicke ich zum Beispiel ne 404 104 04 zurück oder wenn das dann
- 35:20200 OK mit den und den Daten und die Daten habe ich dann da noch
- 35:23aufbereitet, aber eigentlich ist es ja viel schöner, dass man
- 35:26dann. Sagt oder die Idee an der Stelle
- 35:29ist man diesen diese Output, diesen Output Bereich wieder
- 35:33auslagert in eine eigene Klasse, nenne ich das mal, dass du sagen
- 35:36kannst, OK, hier nimm mal das was ich vom Processing bekommen
- 35:40habe und bereite mir bitte die Antwort auf und dann hast du
- 35:43nämlich genau diese Orchestrierung des Controllers,
- 35:45dass der Controller sagt, OK, ich Krieg einen Input, der
- 35:48Controller sagt nur. Mach erstmal bitte Validierung,
- 35:52dann mach bitte das Processing. Das Processing kümmert sich dann
- 35:55irgendwie auch noch ums Speichern und dann bitte bereite
- 35:58mir den Rückgabe die Rückgabewerte auf und dann hast
- 36:02du sozusagen den Controller irgendwie.
- 36:03Als Art. Hülle.
- 36:05Ne, der dann natürlich irgendwie was rein und raus gibt.
- 36:08Aber das eigentliche was man dann highlightet ist dann
- 36:11sozusagen wirklich dieses Input. Ne was?
- 36:15Wo ich meinte, was man ja theoretisch auslagern kann, muss
- 36:17man nicht. Aber dann hast du den Input, den
- 36:20Processing und den Output und der Controller ist nur die
- 36:22Hülle. Ne und das fand ich irgendwie
- 36:24irgendwie ganz interessant so, weil so, dass den Code dann auch
- 36:29wieder schöner macht und den Controller irgendwie klarer dann
- 36:34definiert am Ende oder Struck das.
- 36:35Macht den Controller halt unglaublich schlank, am Ende
- 36:38genau und. Man besinnt sich sozusagen auf
- 36:42die eigentliche Funktionalität, dass ich sehr schnell lesen
- 36:44kann. Auf was reagiert der Controller
- 36:47und was kann er antworten? Genau, weil das ist nur wichtig
- 36:51an der Stelle und ich finde es auch gut dieses, dass du sagst,
- 36:54das Aufbereiten des Ergebnisses, dass man das auch noch mal, also
- 36:59nicht es ist, was heißt auslagern, aber dass man das
- 37:02getrennt betrachtet, und das ist auch wichtig, und beispielsweise
- 37:06finde ich, ist es keine schlechte Practice.
- 37:09Die internen Datenmodelle, was als Antwort ist, weil du jetzt
- 37:12meintest da ist ne ID drin. Ja dann ist natürlich n
- 37:14klassischer Fall, dass ich mir auch ne Response DTO bastel, was
- 37:18nicht mehr die ID drin hat, aber ich bin mittlerweile an dem
- 37:22Punkt, dass ich mir immer ein DTO bastel, selbst wenn sie noch
- 37:25identisch zum Datenmodell sind, weil ich habe diese Abstraktion
- 37:29genau die du meintest drin, dass ich halt die Chance habe zu
- 37:32sagen, wenn mein System sich so ändert, dass ich nicht mehr
- 37:35alles rausgehen kann. Habe ich halt diese
- 37:38Schnittstelle ne und dann ist der Controller weiß ganz klar da
- 37:41gehe ich hin und da wird verwaltet was wirklich am Ende
- 37:44zurückgesendet wird und ich sorge nur noch dafür, dass das
- 37:46Zurückgesendet wird, weil meine Aufgabe ist nur das
- 37:49Orchestrieren und das ist n wichtiger Punkt und all diese
- 37:52Mechanismen oder diese Denkweisen haben am Ende ja
- 37:56immer gleiche oder ähnliche Benefits, lass uns da ganz kurz
- 38:00noch drüber sprechen, warum das ganze, ich hatte es vorhin kurz
- 38:03angerissen. Es ist einfach viel, viel besser
- 38:08für die Testbarkeit sowas umzusetzen.
- 38:11Und ja, wir sagen das bei jedem zweiten Prinzip, aber es ist
- 38:13halt ganz oft der Benefit dahinter, weil es unfassbar
- 38:17wichtig ist seine Software abzutesten und beispielsweise
- 38:20wenn ich alles Controller und Service so sauber trenne, ja
- 38:24dann kann ich halt zum Beispiel sagen.
- 38:26Was teste ich bei den Controller?
- 38:28Dass ich ein Bad request kriege, wenn ich halt die Sachen nicht
- 38:31mitschicke, die erwartet, wenn es halt nicht möglich ist aus
- 38:34dem DTO dieses Datenmodell zu erstellen.
- 38:37Das ist ein klassischer Bad Request, braucht gar nicht ins
- 38:39System reingehen, weil damit kann man nichts anfangen.
- 38:42Dann was ich meinte wenn ich auf dem Service so Verifiziere wie
- 38:46die Eingaben sind ja also quasi ich habe valide Eingaben, aber
- 38:49sind die überhaupt brauchbar? Das sind so für mich so 2
- 38:52gedankenebenen ja, dass ich sage.
- 38:56Ist es valide von den Typen her und alles?
- 38:59Und kann ich damit arbeiten? Ja, dann habe ich im Service
- 39:02aber noch ne Ebene, möchte ich damit arbeiten und das habe ich
- 39:06dann aber dediziert im Service und kann das super geil testen,
- 39:09weil ich weiß an dem Punkt habe ich auf jeden Fall mein
- 39:12Datenmodell. Ich gebe jetzt komplett die
- 39:15Input so rein und kann sauber abtesten ob überhaupt damit was
- 39:19passiert oder nicht. Richtig und genauso kann ich
- 39:22dann später auch abstrahiert diesen Storage betrachten und
- 39:25kann zum Beispiel sagen Ey Service, Mach mal das und das
- 39:28und übrigens im Storage wirst du das haben was ich dir jetzt sage
- 39:31und dann kannst du das halt alles sauber abtesten und
- 39:34genauso kannst du dann auf der Output Ebene auch wieder sagen
- 39:38was geb ich denn zurück im Falle von dem und dem ne um wieder
- 39:42diese Rück. Validierung sozusagen zu haben.
- 39:46Und auch diese Umwandlung und gleichzeitig hab ich natürlich
- 39:50auch noch die Möglichkeit Integration Test mäßig einmal
- 39:53den Zyklus durch auch geil. Genau.
- 39:56Da nur nicht so viel von das kostet.
- 39:59Das kostet ja. Und wenn man sich jetzt fragt,
- 40:01OK. Warum soll ich das alles
- 40:04irgendwie mir drauf drücken? Warum interessiert mich das?
- 40:07Ich kann das eher alles von RI machen lassen, ja, aber man kann
- 40:11und wird auch ne Menge davon machen lassen, aber man sollte
- 40:15natürlich auch immer noch die Struktur im Auge behalten, man
- 40:18ist ja auf mindestens noch Reviewer des ganzen Codes und
- 40:22ich hatte letztens nämlich auch wieder ne schöne Sache wo ich
- 40:24mir dachte, da gehört das ganz bestimmt nicht hin, obwohl er.
- 40:28Obwohl gar nicht. Obwohl.
- 40:30AI meinte ja doch da will ich es aber gerne haben.
- 40:33Es war aber wirklich Quatsch. Ja und das passt sogar auch hier
- 40:37so n bisschen rein geh ich nicht jetzt näher drauf ein Wir sind
- 40:39schon n bisschen über die Zeit sag ich jetzt mal, aber das ist
- 40:42wichtig ja sich sowas sowas zu wissen um sowas halt hinterher
- 40:45anwenden zu können um den Code trotzdem strukturiert zu halten.
- 40:49Das ist so n guter Punkt. Ich muss es noch mal
- 40:51wiederholen, damit sich es einbrennt.
- 40:53Es hilft dir beim Reviewen auch einfach zu verstehen, was da
- 40:56passiert. Wenn du diese klaren Trennungen
- 40:57hast, weil du genau weißt, wo du gucken musst und genau weißt,
- 41:00was zu erwarten ist. Genau, sehr, sehr guter Punkt,
- 41:03ja. Und in diesem Sinne würde ich
- 41:06sagen, sind wir fertig. Damit haben wir jetzt das I POS
- 41:10princula Zufallstreffer hat. Spaß gemacht, da drüber zu.
- 41:13Reden auf jeden Fall fand ich auch und liebe Zuhörerinnen,
- 41:17lieber Zuhörer, wenn du sagst, ja.
- 41:20Ich kenn ja jemanden, bei dem ist der Code gerade richtig
- 41:22chaotisch. Da kämpft jemand mit chaotischem
- 41:25Code, dann schick ihn auf jeden Fall oder leiht ihn diese Folge
- 41:28weiter oder ihr und ansonsten wie gesagt Folge gerne auch den
- 41:33Podcast. Wenn er dir gefällt, wenn du das
- 41:34noch nicht machst. Es gibt auch so n kleines
- 41:36Glöckchen, drück da auch gerne drauf, dann verpasst du keine
- 41:38Folge und ansonsten würde ich sagen macht es gut, wir hören
- 41:44uns in der nächsten Folge wieder deine Coding.
- 41:46Buddies gemeinsam besser. Weißt du was mich fragt?
- 41:51Ich glaube, du kannst diese Buchstaben mit einer ios PI
- 41:53Coast in Hoch und ich habe einfach die Bilder.
- 41:55Man muss immer wieder was rauskommen was man machen kann.
- 41:57Ja, Mann und weißt du was? Scheiß drauf.
- 42:00Ich mache mir jetzt so einen krassen Kaffee.