Latest / Coding Buddies | Tech & Dev-Mindset / #149 Proxy Pattern - Der Türsteher in deinem Code
Transcript
- 0:00Das sind auf jeden Fall typische.
- 0:01Ich nenne es jetzt mal Alltagssituationen, die schon
- 0:04auf das Pattern Proxy hinweisen. Coding Buddies Dein Podcast rund
- 0:09um Softwareentwicklung und aktueller Tech News herzlich
- 0:12Willkommen. Halli Hallo und herzlich
- 0:26Willkommen hier zum Coding Buddies Podcast.
- 0:29Dein Podcast rund um Softwareentwicklung und zwar mit
- 0:32mir und mit Tino. Der darf natürlich nicht fehlen,
- 0:35der sitzt mir hier schon gegenüber.
- 0:36Tino, Wie geht's, wie steht's? Fabi, Was geht ab, was geht ab?
- 0:40Ich sag mal deinen Namen auch Fabi Fabi, der andere ist fabi
- 0:48was geht. Ja.
- 0:50Ist gut, gut, gut, alles gut. Wir waren ja ein bisschen in den
- 0:55Bergen, haben uns sportlich betätigt, sagt man das so
- 1:00beschäftigt? Wir waren ja ein bisschen
- 1:03snowboarden und haben einfach mal so ein bisschen die Bergluft
- 1:05genossen. Und ich muss sagen, es war eine
- 1:07sehr, sehr geile Woche. Fabi hat mir gut gefallen, aber
- 1:11jetzt geht's wieder ran. Podcast neue Folge steht an.
- 1:14Jetzt setzt die Post Berg phasische Depression ein.
- 1:20So nennt man das. Gibt es so eine Post?
- 1:23Berg Depression? Gibt es sowas bei dir?
- 1:25Also hast du danach das Gefühl so ah.
- 1:29Würd jetzt schon gern wieder den Lift hochnehmen und
- 1:32weiterfahren. Ja, ist immer so n Unterschied.
- 1:34Also es ist zwiegespalten, weil auf der einen Seite tut mir
- 1:37alles weh, ne so n bisschen zum Recht bestätigen.
- 1:40Ja, geht mir auch so. Und da denkt sich mein Körper,
- 1:43wahrscheinlich ist in Ordnung, wenn man jetzt nicht noch
- 1:46weitermacht. Aber so der Kopf denkt sich
- 1:48schon so, wär schon geil so. Weißt du ja, geht mir auch so.
- 1:51Ey, das ist halt. Es ist halt schade, dass es so
- 1:54saisonal ist. Der Sport ne, also wir beide
- 1:56sind ja schon große Fans vom Snowboarden an sich und würden
- 1:59es gerne ja auch öfter machen, aber es ist natürlich immer mit
- 2:02einer Reise mit Urlaub, mit Geld logischerweise und auch
- 2:06natürlich mit dem Wetter verbunden und deswegen hab ich
- 2:10immer so ne Phase wo ich mir denke, ahh er hätte jetzt schon
- 2:13Bock noch mal und jetzt wieder n ganzes Jahr warten ne das ist.
- 2:20Geht mir auch. Ärgerlich, ja, aber es gibt
- 2:22natürlich auch andere coole Highlights dieses Jahr, die noch
- 2:25so anstehen, die wir uns auch noch so vorgenommen haben.
- 2:28Worauf man sich freuen kann, bis denn quasi wieder der nächste
- 2:31Skiurlaub. Da ist außerdem ist man ja nach
- 2:33Hause gekommen und es hat mehr geschneit hier als in den
- 2:35Bergen. Das kommt noch hinzu.
- 2:38Also es ist super weiß hier gerade bei dir auch ne, du hast
- 2:41ja schon berichtet, so privat sage ich mal, dass du nur am
- 2:44Schnee schippen bist. Da ist ja jetzt so deine zweit
- 2:46Lieblingsbeschäftigung verbunden mit Schnee, ne.
- 2:51Aber was natürlich auch immer jede Woche ein Highlight ist,
- 2:53ist die neue Podcast Folge und ich habe Bock.
- 2:56Ich habe richtig Lust heute eine Folge aufzunehmen und du hast ja
- 2:59auch ein cooles Thema mitgebracht, denn wir wollen
- 3:00heute, das hast du ja schon mal angeteasert, mit einer Reihe
- 3:05weitermachen, wo wir jetzt glaube ich, schon eine Weile
- 3:07nicht zu gemacht haben. Also ich glaube, es gab jetzt
- 3:10ein paar Folgen nicht bezüglich dieser Reihe, deswegen geht es
- 3:12da heute weiter, und zwar mit unserer Design Pattern Reihe,
- 3:16erzähl doch mal was hast du denn da so?
- 3:18Na. Wir haben ja schon einige
- 3:20Patterns durchgesprochen beziehungsweise besprochen und
- 3:24was wir uns diesmal angucken wollen, ist wieder n
- 3:26strukturpattern und ich glaube so ungefähr das letzte
- 3:31Strukturpattern was jetzt so bei uns auf der Agenda steht.
- 3:35Ja, es geht ja, könnt sein, ja. Und genau.
- 3:38Und es geht um das Proxy Pattern.
- 3:41Ja, ich überlege gerade, was hatten wir denn alles zu
- 3:44strukturpattern. Wir hatten auf jeden Fall das
- 3:46Adapter Pattern besprochen. Die Decorator Bridge, das sind
- 3:51ja so gängige, also auch hier der Disclaimer.
- 3:54Wir werden natürlich nicht alle Pattern besprechen können in
- 3:56dieser Reihe, weil dann machen wir den Podcast nur noch zu
- 3:58Design patterns, aber zu den Struktur hatten wir auf jeden
- 4:02Fall schon die und Proxy ist eigentlich noch eine ganz coole
- 4:06Ergänzung, weil wenn man jetzt so noch mal zurückblickt, sagt
- 4:10ja okay Adapter Pattern, was war denn eigentlich so der Sinn
- 4:13hinter dem Adapter Pattern haben wir gesagt, ja, eigentlich.
- 4:17Dinge, die nicht passen, werden passend gemacht.
- 4:19So ja, also ich hab das ist ein Pattern, was dafür sorgt, dass
- 4:22ich adaptieren kann an eine gewisse Schnittstelle um mich
- 4:26kompatibel zu machen. Wir haben das Decorator Pattern
- 4:29besprochen, auch beispielsweise, dass wir sagen, OK, wir
- 4:32dekorieren so unsere Objekte, wie wir das wollen, ne und bauen
- 4:36immer mehr dazu, also wir dekorieren immer mehr und jetzt
- 4:41ist natürlich die Frage. Warum noch ein Pattern wie das
- 4:44Proxy pattern? Ja, also was ist jetzt der Sinn
- 4:47dahinter und ich finde, dass das Proxy pattern sich da ganz gut
- 4:50abhebt, das würde ich auch gerne herauskristallisieren in der
- 4:53Folge mit dir zusammen, dass man ganz klar weiß okay ja okay, das
- 4:57macht Sinn, noch ein Pattern mehr, da hat sich jemand noch
- 5:00mal was überlegt, was wirklich noch mal was anderes ist und
- 5:02nicht die xte Variante von dem gleichen Prinzip und deswegen
- 5:07würde ich sagen. Lass uns heute mal darüber
- 5:11sprechen, welches anderes Ziel steckt denn hinter dem Proxy
- 5:14Pattern? Ja, genau.
- 5:17Also ich meine, du kennst ja wahrscheinlich die so ein, ich
- 5:21sag mal gewisse Alltagssituationen, die man in
- 5:25der Softwareentwicklung kennt, jetzt nicht komplett im Alltag,
- 5:28aber wenn du jetzt eine Methode aufrufst und irgendwas wird, sag
- 5:32ich jetzt mal gecasht oder manchmal hast du eine Funktion
- 5:36wo du dir denkst. Na, aber die Funktion darf ich
- 5:39aber eigentlich unter den und den Umständen vielleicht gar
- 5:42nicht benutzen. Und das sind auf jeden Fall
- 5:45typische. Ich nenne es jetzt mal
- 5:47Alltagssituationen, die schon auf das Pattern Proxy hinweisen,
- 5:53so einen Kleinen hin geben, so das könnte man da an der Stelle
- 5:56verwenden. Na ja, so Alltagssituationen,
- 6:00die mir da einfallen in die Richtung ist ja auch zum
- 6:04Beispiel. Also auch natürlich technisch,
- 6:06aber jetzt nicht direkt Softwareentwicklung.
- 6:08Aber wenn ich zum Beispiel irgendwelche Videos mir anschaue
- 6:12oder so ne, dass die das auch gecasht wird beispielsweise oder
- 6:17Bilder, ne, dass ich halt nicht wirklich merke oder hoffentlich
- 6:21wenn es gut gemacht ist, nicht direkt merke, ob das Bild noch
- 6:25mal neu oder der Inhalt der mir angezeigt wird neu geholt wird
- 6:29oder einfach nur gespeichert wurde und erneut angezeigt
- 6:33wurde. Und da sind so Bilder, Videos,
- 6:35so klassische Beispiele für ja, für Caching.
- 6:38Ja, und mit mit dem Proxy Pattern kann ich halt dieses
- 6:41Caching auch gut umsetzen und das sind halt schon so Sachen,
- 6:45die eigentlich sage ich mal überall, wie soll ich sagen,
- 6:49einem begegnen, ja ich meine, man kennt das vielleicht auch
- 6:53noch mal, um die Softwareentwicklung
- 6:54aufzugreifen, gerade so Frontentwickler und Webseiten,
- 6:59dass man so sagt okay ja, jetzt habe ich irgendwie Daten
- 7:01geändert, ey, warte mal. Aber wenn ich jetzt auf die
- 7:03Seite gehe jetzt. Zeigt er mir aber hier noch alte
- 7:05Sachen an, beispielsweise wenn das auch gecasht wurde und dass
- 7:09dieses typische Invalidieren des cashes, Ich glaube, jeder jedem
- 7:13ist das denn schon mal begegnet ist, ein klassisches Beispiel.
- 7:16Und genau über dieses Pattern wollen wir heute reden.
- 7:19Es ist auch nicht kompliziert, aber sehr mächtig, würde ich mal
- 7:22sagen, also man kann wirklich coole Sachen damit machen und es
- 7:26ist nicht so schwer umzusetzen, was ja natürlich auch gerade
- 7:29weil in unserer Community auch viele Einsteiger dabei sind.
- 7:33Sag ich mal, ist es auch sehr einsteigerfreundlich und
- 7:35geeignet dafür, sich das auf jeden Fall mal anzugucken, weil
- 7:38wir haben ja auch gesagt, so das Beste ist sich so n Patter
- 7:41nehmen das Mal auszuprobieren, wirklich mal diese vor und
- 7:43Nachteile die wir ja heute wieder nennen werden mal zu
- 7:46fühlen. Ja also mal wirklich mal in die
- 7:48Erfahrung damit zu gehen um dann einschätzen zu können, wann kann
- 7:52ich es gut verwenden, wann ist es eher nicht so geeignet und
- 7:55dazu begleitend dann die Folge heute.
- 7:58Props auf jeden Fall. Alle, die das auch machen.
- 8:00Wir haben ja schon n bisschen gehört, dass es auf jeden Fall
- 8:03Leute gibt, die das auch ausprobieren, dass sie sich
- 8:06wirklich mal hinsetzen und sagen, ich probier es mal so,
- 8:08ich Code jetzt mal so n Petter nach, das ist schon cool.
- 8:11Genau und deswegen auch da noch mal die Anmerkung, Liebe
- 8:13Zuhörer, liebe Zuhörer, falls du es gerne ausprobieren möchtest
- 8:16oder Ausprobierst und Fragen dazu hast, komm gerne auf
- 8:19unserem Discord vorbei. Da findest du Leute, die genau
- 8:22den gleichen Weg gehen und das Ausprobieren Fragen dazu
- 8:25stellen. Man kann sich wunderbar
- 8:26austauschen und vor allem gibt es sehr erfahrene
- 8:29Entwicklerinnen und Entwickler, da die auch immer hilfsbereit
- 8:31sind und da gerne ein Feedback geben und nur so kann man
- 8:35eigentlich sage ich mal das Bestmögliche in seinem Lernweg
- 8:38herausholen. Und deswegen lass uns mal drüber
- 8:42quatschen. Wie sieht eigentlich so ganz
- 8:45allgemein das Proxy Pattern aus, bevor wir mal so auf Beispiele
- 8:50eingehen, aber erstmal so was ist so der Grundgedanke, so
- 8:52diese Kernaussage hinter dem Pattern.
- 8:55Ja, also quasi die Kernidee. Ne, ja du hast ja, also der
- 9:00Proxy steht natürlich im Mittelpunkt, das ist ich hab
- 9:03mich früher hab ich mich mal gefragt, was soll so n Proxy
- 9:05sein ne also ich hab einfach. Quasi mir gedacht, so okay
- 9:10irgendwas, also weißt du im Studium auch ne, dann dachte ich
- 9:12mir so Proxy okay was soll das sein Proxy, dann googelst du das
- 9:15ja Stellvertreter denkst du dir so okay Stellvertreter wofür
- 9:19wofür ein Stellvertreter? Ich weiß nicht, ich hab auch
- 9:22manchmal das Gefühl, dass ich damals im Studium manchmal so
- 9:24ein paar Sachen noch gar nicht verstehen wollte, weil
- 9:28eigentlich. So im Nachhinein.
- 9:30Eigentlich ist es ja wirklich relativ einfach zu verstehen.
- 9:36Ein Stellvertreter macht etwas für jemanden, der es eigentlich
- 9:40machen soll, ne. Also du hast quasi ich sag mal
- 9:44einen Client ne oder ein echtes Objekt irgendwo im Code, was
- 9:48etwas tun soll, ne egal was du hast, irgendein Objekt, das soll
- 9:52etwas tun und du hast einen Proxy und dieser Proxy sagt OK
- 9:55pass auf echtes Objekt ich. Vertrete dich und mache das, was
- 10:00du eigentlich machen sollst, primär und bin der
- 10:03Ansprechpartner sozusagen ne. Das heißt am Ende hast du zwar
- 10:07dieses echte Objekt, was das tut, was was getan werden muss,
- 10:11aber ich sag mal der Code, ja der restliche Code deiner deiner
- 10:16Codebase spricht nur mit dem Proxy mit dem Stellvertreter ne
- 10:21und der. Kann dann halt bestimmte Dinge
- 10:23übernehmen, bevor wirklich eine irgendeine Ausführung passiert.
- 10:26Also der Proxy kann zum Beispiel irgendwas prüfen, der kann also,
- 10:29ob es zum Beispiel ob eine valide Eingabe da ist, er kann
- 10:32irgendwie kontrollieren, ob irgendwelche Zugriffsrechte
- 10:35vorhanden sind, er kann irgendwas delegieren, weil
- 10:39vielleicht ne wie du meintest schon irgendein Cash aufgebaut
- 10:42wurde oder irgendwas, das heißt vielleicht muss eigentlich das
- 10:44echte Objekt gar nicht bemüht werden oder was auch immer,
- 10:46aber. Aber am Ende ist es relativ um
- 10:49das zusammenzufassen. Du hast irgendwie deinen Code,
- 10:53der möchte irgendwas ausführen, ne irgendeine Funktion aufrufen
- 10:56und du kannst jetzt entweder sagen, OK, ich rufe diese echte
- 10:58Funktion auf oder ich gehe über diesen Weg des Proxys, diesen
- 11:01Stellvertreter der sagt OK pass auf, Ich möchte das Ausführen
- 11:05und der Stellvertreter sagt OK ich guck mal was wir machen
- 11:08können, so nach dem Motto. Ja, also Stellvertreter ist da
- 11:12halt auch wirklich die Richtige. Sag ich mal.
- 11:14Der richtige Begriff, an den man da denken sollte.
- 11:16Und weil du ja meintest so echte Anwendung oder echte Parallelen
- 11:22im normalen Leben nicht in der Softwareentwicklung sag ich mal.
- 11:25Ich mein jeder kennt es ja auch, wenn ich zum Beispiel irgendein
- 11:28Problem hab bei einem Service, bei einer Dienstleistung die ich
- 11:31verwende, ne Versicherung der Internetanbieter oder weiß ich
- 11:35was ne? Wenn ich jetzt da eine Anfrage
- 11:38hab, ne an den eigentlichen Sachbearbeiter oder die
- 11:42Sachbearbeiterin ist es ja wirklich oft so, dass ich
- 11:45erstmal über eine Hotline gehen muss, was am Ende so gesehen
- 11:48auch nichts anderes als ein Proxy ist, dass ich da anrufe.
- 11:52Für mich ist es, ich möchte zu meinem Sachverhalt eine Lösung
- 11:56kriegen, eine Frage stellen oder was das ist für mich die gleiche
- 11:59Schnittstelle, ob am Telefon direkt der Berater rangeht, was
- 12:02natürlich wünschenswert wäre, also an das echte ranzukommen
- 12:06und. Wird aber sehr wahrscheinlich
- 12:08eine Proxy dazwischen sein und zwar ein Kundenservice, der
- 12:11erstmal genau diese Aufgaben die du meintest übernimmt.
- 12:14Wer bist du? Deine Kundennummer bitte gibt es
- 12:17vielleicht Lösungen für dich so aus der aus dem FAQ sage ich mal
- 12:21auf das man verweisen kann, dass man quasi das echte, den echten
- 12:25Sachbearbeiter oder Sachbearbeiterin gar nicht
- 12:27damit. Ich nenn es jetzt mal provokativ
- 12:30belästigen muss ne oder die Zeit verschwenden muss, wenn ich
- 12:33vorgelagert als Proxy schon ne Lösung bieten kann oder weiß ey
- 12:38du bist gar nicht Kunde hier, warum soll ich dich vermitteln,
- 12:40so nach dem Motto. Und das ist es halt ne und Proxy
- 12:44hat halt diese Zusatzfunktion, was eigentlich nicht diese
- 12:49Business Logik ist. So zum Beispiel wie ne Frage
- 12:52beantworten, Daten ändern, Verträge abschließen oder weiß
- 12:55ich was ne also diese eigentliche Funktion sondern nur
- 12:58zusätzliche Logik wie beispielsweise überprüfe ob du
- 13:02wirklich n Kunde bist. Überprüfe, ob das überhaupt ein
- 13:05Fall ist, den ich weiter delegieren kann.
- 13:08Ist es ein Scherzanruf? Keine Ahnung, du weißt was ich
- 13:11meine, ja, also darfst sie fragen, ist es vielleicht ein
- 13:14Scherzanruf? Sagen Sie wirklich ein Problem?
- 13:17Nein, gut, tschüss und das ist es halt am Ende ne für den
- 13:23Client wie du so schön gesagt hast.
- 13:25Also für mich als Anrufer, für mich als.
- 13:30Ja, Nutzer einer Software, wie auch immer ne auf welcher Ebene
- 13:33man jetzt Client definiert, am Ende ist das Interface was ich
- 13:38bedienen möchte die Schnittstelle, die Funktion das
- 13:41gleiche und ich weiß nicht, hängt da jetzt noch n Proxy
- 13:45dazwischen oder hab ich Kontakt zu dem echten Service den ich
- 13:48verwenden möchte und das merkt man als Client nicht und das ist
- 13:51halt auch schon n Unterschied zu anderen Pattern.
- 13:54Da hier schon mal die Anmerkung, weswegen ist halt n anderen
- 13:58Ansatz verfolgt, weil es für mich als Client kein Unterschied
- 14:03macht. Ja also.
- 14:06Sagen wir mal so, ich Ruf bei einem Kundenservice an und ich
- 14:10weiß nicht welche Rolle er da drin hat.
- 14:11Ist er wirklich nur ein Proxy oder ist er vielleicht schon ein
- 14:14Berater oder einen bearbeit Sachbearbeiter, der aber nicht
- 14:17meinen Fall macht und dann noch mal weiter delegiert zu dem
- 14:20Sachbearbeiter der meinen Fall bearbeitet?
- 14:23Wie auch immer, das ist für mich, ich weiß es nicht, ich
- 14:26habe nur ein Problem was ich quasi über die Schnittstelle
- 14:28Telefon lösen möchte sozusagen, also so kann man sich das halt
- 14:32ganz gut vorstellen. Ja ich.
- 14:34Finde es ganz gut, dass du auch sagst.
- 14:35Weil ich dich gerade fragen wollte, wie kann man das denn
- 14:37umsetzen? Ja, dass man vielleicht auch gar
- 14:40nicht weiß, mit wem man quasi gerade spricht, weil du halt
- 14:43eben dieses Interface hast und der Proxy genauso wie das
- 14:46eigentliche Objekt eben die beide dieses Interface
- 14:49implementieren. Ne, also kannst dir das ja auch
- 14:51ungefähr so vorstellen, als würdest du irgendwie sagen wir
- 14:54mal was drucken wollen und du hast sozusagen 2 Türen ne und
- 14:58auf der einen Tür steht halt drauf Drucker a und auf der
- 15:01anderen steht drauf Drucker b. Aber du kannst halt beiden etwas
- 15:05geben. Du musst halt nur irgendwie den
- 15:07Dateinamen geben und sagen, das möchte ich bitte gedruckt haben
- 15:09und am Ende ist es halt einfach nur quasi die gleiche
- 15:11Schnittstelle. Ne, du gibst in jede Tür, damit
- 15:14man sich es besser jetzt vorstellen kann, einfach nur den
- 15:16Dateinamen rein, ne auf dem Blatt Papier oder so und dann
- 15:18nimmt das jemand an und druckt das am Ende ne und also das
- 15:22Interface ist genau das Gleiche, das heißt dieses die Funktion
- 15:26drucken ne die sozusagen das Interface halt hat haben beide.
- 15:31Implementieren beide ne jetzt ist er natürlich nur sozusagen
- 15:35der Under The Hood ist es ja so, dass der Proxy im Endeffekt,
- 15:39also sagen wir mal erstmal das das echte Objekt selber ne, also
- 15:43der ich nenn es mal Drucker ne der druckt dann wirklich dieses
- 15:46Dokument ne ohne wenn und aber, also da wird eigentlich das wird
- 15:50einfach genommen und wird gedruckt ne OK das die Datei
- 15:52zack hau ich dir raus wenn du jetzt aber zum Beispiel diesen
- 15:55Proxy hast, dann kann der vielleicht noch unter anderem
- 15:57sowas checken wie weiß ich nicht.
- 16:01Bist du alt genug? Hast du schon Druck?
- 16:05Genau. Und dann gibt der Proxy das aber
- 16:07im Endeffekt weiter an das echte Objekt.
- 16:10So und wenn du das jetzt so in in Code hast, dann haben wir ja
- 16:14schon von Interfaces gesprochen, du hast den Proxy, der
- 16:16implementiert das Interface, du hast das echte Objekt, was das
- 16:19Interface implementiert, beide müssen also eine bestimmte
- 16:22Funktion wie zum Beispiel drucken implementieren als
- 16:24Beispiel. Und dann ist es aber so, dass
- 16:27der Proxy selber noch das echte Objekt hält und mit diesem
- 16:32echten Objekt arbeiten kann. Also genau das ist sagen kann
- 16:37das. Ist nämlich genau der
- 16:38entscheidende Punkt ne, weil der Proxy wird die echte Aufgabe
- 16:42niemals übernehmen, er hat wird keine Business Logik beinhalten,
- 16:46sondern nur diese Zusatzentscheidung treffen und
- 16:50am Ende steht quasi die Entscheidung delegiere ich das?
- 16:54An den echten Service weiter also sind meine Checks bei,
- 16:58gehen wir mal so von Access Control Security Aspekten aus.
- 17:03Ich checke zum Beispiel den Client und wenn er berechtigt
- 17:07ist diesen Service zu verwenden, leite ich das, delegiere ich das
- 17:12weiter an den echten Service, weil wie du meinst ich diese
- 17:15Referenz da drauf halte und dann kriegt der Client quasi vom
- 17:18echten Service auch eine weil also eine echte Antwort sage ich
- 17:22mal und nicht etwas von dem Proxy zurückgemeldet.
- 17:24Wird, weil das kann ja auch sein, es kann ja sein, dass dann
- 17:27einfach zurückkommt, so ist nicht, darfst du nicht, ja und
- 17:30du als Client weißt nicht, dass der Proxy das entschieden hat,
- 17:33sondern kann halt genauso gut auch der echte Service
- 17:35entschieden haben, aber so trenne ich halt diese Ebenen mit
- 17:38diesem Pattern voneinander und mache es vor allem auch
- 17:41austauschbar, was ja auch wichtig ist, ja.
- 17:44Also beispielsweise ich habe erstmal nur nen Service, weil so
- 17:47Access Control keine Rolle gespielt hat.
- 17:50Dann auf einmal kommen die Anforderungen rein und das ist
- 17:52ja normales Projektgeschehen sag ich mal in der
- 17:55Softwareentwicklung das auf einmal es heißt.
- 17:57Ey du, wir müssen jetzt hier aber kontrollieren, wer das
- 18:00verwendet, welcher Client, wie machen wir denn das und dann
- 18:03sagt man sich so ha du, ich hab die Coding Buddies Folge gehört,
- 18:06es gibt das Proxy Pattern und genau das werden wir jetzt hier
- 18:09anwenden, weil wir da quasi diese Ebene einbauen.
- 18:13Zu entscheiden darf der Client das oder nicht und das wäre dann
- 18:17schon wieder n gutes Anwendungsbeispiel sozusagen.
- 18:20Ich mein du kommst kommst ja relativ schnell auch an den
- 18:22Punkt, dass du vielleicht genau solche, also ich glaube man hat
- 18:25relativ schnell Momente, wo man genau das was du geschrieben
- 18:28hast, irgendwie in seinem Code hat und du kannst es natürlich
- 18:32logischerweise wie immer über verschiedenste Wege lösen.
- 18:34Du kannst ja auch sagen, OK, ich mach halt, ich hau halt einfach
- 18:37ne ne if davor oder was auch immer und überprüfe eine
- 18:40bestimmte Bedingung, nur dann führe ich etwas aus und genau
- 18:43das ist jetzt der, also ist ja der entscheidende Unterschied.
- 18:46Wie möchtest du deine Software quasi aufbauen?
- 18:49Designen? Nimmst du dafür ein Design
- 18:52pattern, um es halt eben, ich sag mal etwas schöner und halt
- 18:56auch ich sag mal wartbarer erweiterbarer, du kennst die
- 19:02ganzen Buzzwords quasi, also kannst du es, wie möchtest du es
- 19:08implementieren, das ist halt der der entscheidende Punkt am Ende.
- 19:12Genau. OK, fassen wir noch mal kurz
- 19:14zusammen, bevor wir auf so reale Beispiele kommen, dass wir
- 19:17einfach noch mal kurz den Punkt haben, was beinhaltet dieses
- 19:21Pattern, also die Kernidee haben wir ja quasi besprochen und noch
- 19:25mal ganz klar, so als Merksatz sag ich mal der für mich auch
- 19:29immer wichtig ist, wenn ich an dieses Pattern denke, ich habe
- 19:33ne Schnittstelle für den Client, diese wird von 2 Objekten quasi
- 19:37implementiert von dem echten Service, also von dem echten
- 19:40Objekt und von dem Proxy. Und was hier ganz klar zu
- 19:44differenzieren ist, und das ist der Merksatz, der Echte, das
- 19:48echte Objekt quasi, beinhaltet die Business Logik, diese
- 19:51sensiblen Operationen, wenn es um Access Control geht.
- 19:55Teure Operation werden wir auch dazu kommen, ne, wenn es halt
- 19:58wirklich aufwendig ist das durchzuführen, dann ist n Proxy
- 20:02auch sinnvoll zu entscheiden, muss das jetzt gemacht werden,
- 20:04ja. Und der Proxy, wie gesagt
- 20:07checkt, ob der Client das darf, ob es notwendig ist und wenn ja,
- 20:10delegiert das dann an das echte Objekt um diese Berechnung
- 20:13durchzuführen. So kann man das so noch mal kurz
- 20:17und knapp zusammenfassend, so sieht das Pad dann aus, aber
- 20:20jetzt ist halt die Frage warum ja also wir haben so ein paar
- 20:23Sachen angeteasert, schon Beispiele genannt, aber es gibt
- 20:27ja so sage ich mal Hauptkategorien wo man denn sich
- 20:30denkt so. OK, das schreit nach dem Proxy
- 20:33Pattern. Hau mal ein erstes raus so.
- 20:36Also wir hatten ja schon so ein kleines Beispiel auch genannt,
- 20:40also zugriffskontrolle ist ja sehr wichtig.
- 20:43Bist du zum Beispiel irgendwie ein Admin oder in
- 20:46Anführungsstrichen nur ein einfacher User?
- 20:48Da gibt es vielleicht irgendwie eine interne API, die irgendwo
- 20:54sitzt, wo du aber von. Außen, ich sag mal als extern,
- 20:58wie auch immer du es nennen magst, nicht drauf zugreifen
- 21:00kannst. Gibt es irgendwelche Services
- 21:04die Security relevant sind für bestimmte Anwendungen, für
- 21:08bestimmte Dinge? Also es gibt ja verschiedene
- 21:13Möglichkeiten, die du, die du irgendwie eventuell hast und ich
- 21:18finde was was Wichtiges ist halt eben oder was man ganz oft hat,
- 21:22ist halt eben diese diese Rollen, diese Rollen.
- 21:25Anwendung welche Rolle hast du? Darfst du das bestimmte?
- 21:29Dieses User Management darfst du bestimmte Dinge ausführen, je
- 21:32nachdem was du für eine Rolle beinhaltet.
- 21:35Das ist halt ein häufiges, ein häufiges Thema, da hast du ja
- 21:40zum Beispiel auch sowas wie auch in der Netzwerkkommunikation
- 21:43kennt man ja sowas auch oft zum Proxy, der irgendwo dazwischen
- 21:46sitzt, der halt eben auch, ich sag mal bestimmte Header oder
- 21:50bestimmte. Ich nenn es jetzt einfach mal
- 21:53allgemein Zugriffsrechte überprüft.
- 21:55Ist es in Ordnung, darfst du hier überhaupt drauf zugreifen
- 21:57oder nicht und dann gegebenenfalls auch wieder
- 22:00delegiert weiterleitet zu der Seite die du eigentlich
- 22:02erreichen möchtest. Beispielsweise ja ganz klassisch
- 22:06proxies ja, da in dem Fall bei dem ganzen Thema so Security
- 22:12Checks oder so, da hab ich irgendwie immer so diese
- 22:14Analogie im Kopf, dass ich mir das.
- 22:16Vorstelle, wie auch so im echten Leben.
- 22:18Wenn du beispielsweise auf einem Festival gehst oder einen Club
- 22:21besuchen möchtest. Wie auch immer, dass du
- 22:23natürlich das Ziel hast, sozusagen dieses Konzert oder
- 22:28diesen Abend zu besuchen, diese Veranstaltung, ja, und du gehst
- 22:32hin und sagst, ich besuche das jetzt, das heißt, du kommst an,
- 22:36möchtest rein und der Proxy in dem Fall ist ja ganz oft, denn
- 22:41so eine Art Security oder so eine Eingangskontrolle, oder von
- 22:45mir aus auch ein Drehkreuz wie? Jetzt im Skiurlaub ob du n
- 22:47Skipass hast oder nicht. Ja, aber das ist im Endeffekt da
- 22:52stell ich mir immer so den Proxy vor, der dann sagt Nee warte
- 22:55mal. Also du kannst gerne über mich
- 22:58das besuchen, das Festival hier ja also kein Thema, aber erstmal
- 23:02möchte ich bitte sehen ob du n gültiges Ticket hast in
- 23:05gegebenenfalls möchte ich auch noch prüfen ob du alt genug
- 23:08bist. Ja, und das sind so im Prinzip
- 23:11diese, diese klassische Security Proxy Anwendungsfall, dass du
- 23:14sagst ich geh da jetzt hin und ich ruf sozusagen besuche
- 23:18Festival auf. Und werd dann erstmal gecheckt,
- 23:22aber am Ende rufe ich nur besuche Festival auf und der
- 23:24Security lässt mich durch und ich kann denn das Konzert
- 23:27beispielsweise besuchen und ich finde diese Analogie sich
- 23:31vorzustellen wie das dazwischen geschaltet ist zwischen dem
- 23:34echten Festival mich als Kleinbesucher diese
- 23:38Schnittstelle Proxy, dazwischen der den weiterleitet und sagt,
- 23:41OK darfst durch oder nee geh mal besser nach Hause, so wirst du
- 23:45hier nicht reinkommen, weißt du, und das finde ich ist immer so
- 23:48ne ganz coole Analogie und. Der Proxy vom Berghain ne.
- 23:52Ja, genau, der ist ein besonders strenger Proxy.
- 23:58Wer kennt ihn nicht genau. Dann haben wir natürlich auch
- 24:03schon mal so ein bisschen angeteasert, dass wir gesagt
- 24:05haben, OK, es gibt ja aber auch zum Beispiel Operationen, die
- 24:07sehr teuer sind, ne datenbankzugriffe, aufwändige
- 24:11Datenbankzugriffe, Netzwerkzugriffe hattest du
- 24:14genannt, aber natürlich auch sowas wie.
- 24:17Auf großen Daten arbeiten ja die, wo das wirklich aufwendig
- 24:22ist, die Daten einzulesen, zu verarbeiten, dass man sich
- 24:25denkt, Boah, jedes Mal das ganze oder oder oder.
- 24:29So brauchst du das wirklich. Also ganz ehrlich, ich kann es
- 24:33machen, ich kann es machen, aber bist du dir sicher, dass du das
- 24:37brauchst, weil das das kostet mich Echtzeit so ne.
- 24:40Das ist ja das, was dein System sich denkt in dem Fall, wenn der
- 24:43Client sagt, Ach weißt du was, ich weiß nicht ob ich das
- 24:45brauche, aber les doch mal die ganze Datenbank aus hier bitte,
- 24:47vielleicht sind da ja Sachen drin die mich interessiert, so
- 24:49was genau und das ist ja auch oft so dieses lazy loading was
- 24:55man auch sag ich mal in der Softwareentwicklungswelt kennt
- 24:59und im Endeffekt hast du dann einen Proxy der sagt.
- 25:04Okay. Ich baue das aber erst, wenn du
- 25:07es wirklich brauchst. Beweise mir, dass du das
- 25:10brauchst und dann bekommst du es.
- 25:12Oder ich lese die Daten aus, aber erst wenn du sie.
- 25:16Wirklich an der Stelle verwenden möchtest vorher nicht.
- 25:20Das ist ja, wenn du zum Beispiel auf einer auf einer Website bist
- 25:24und du hast irgendwo am Ende deiner Website zum Beispiel
- 25:27irgendwie ein Bild, aber du siehst dieses Bild aber nicht
- 25:31an, dann musst du es ja noch nicht laden, du musst ja nur das
- 25:33Laden, was du wirklich siehst. Dann kannst du natürlich in dem
- 25:36Moment sagen, OK, ich mach n lazy load ne, also ich lade es
- 25:40erst, also lazy ne für alle. Falls jetzt irgendjemand sagt
- 25:44ich weiß nicht was lazy jetzt bedeutet, also ne faul, also du
- 25:48du lädst halt, du machst halt nur das nötigste, ne du bist
- 25:50faul, du sagst OK ich lade nur dann wenn ich es wirklich
- 25:52brauche, das war ja damals einfach auch n Riesenthema ja so
- 25:56sag ich mal die ersten Websites die mit Bildern gearbeitet haben
- 25:59ne und du hattest einfach auch gar nicht.
- 26:02Diese Netzwerkanbindung ja, dass du so viel so es klingt halt aus
- 26:07heutiger Sicht witzig, aber so viel Daten ja so ne Datengröße
- 26:10einfach downloaden konntest. Und da wurde viel mit Lazy
- 26:14Loading auch gearbeitet, damit die Seite sich nicht minutenlang
- 26:17aufbaut, ne, dass du halt performancegewinn hast, dass du
- 26:21so n bisschen was dem Client schon anbietest, womit er
- 26:25erstmal arbeiten kann und du im Hintergrund quasi immer
- 26:28entscheidest. Jetzt könnte es gebrauchen.
- 26:31Jetzt braucht es und wieder ein bisschen mehr, aber nicht alles
- 26:34auf einmal. Weil du kannst natürlich sagen,
- 26:36ja gut, wart halt 5 Minuten, aber dann hast du alles.
- 26:39Das ist natürlich so von der User Experience eine absolute
- 26:41Katastrophe. Ja und das war damals halt ein
- 26:43Riesenthema und deswegen gibt es halt diese Konzepte um da noch
- 26:47mal so einen Kleinen. Rückblick zu geben.
- 26:49Also ich finde, eigentlich sollte man an der Stelle eine
- 26:51bessere Netzwerkbandbreite zur Verfügung stellen und dann geht
- 26:54es. Ja, das das, das war die Antwort
- 26:57damals mit dem Modem ne und? Zieh doch einfach mehr Daten.
- 27:03Ja, weil damals haben es nämlich seit nimmer lange geladen, aber
- 27:07ich finde das beste Beispiel für lazy loading in Real Life ja ist
- 27:12wenn du ein Restaurant gehst ne. Du setzt dich hin und bestellst
- 27:16und wartest auf dein Essen und du hast ja quasi erstmal noch
- 27:21nicht dein Essen. Aber dann kommt der Proxy und
- 27:24sagt, Na, Pass auf, du kriegst schon mal n kleinen Happen,
- 27:27nämlich das kleine Probierbrot. Am Anfang weißt du ja, das
- 27:30heißt, du kriegst schon mal n. Bisschen, aber noch nicht dein
- 27:33richtiges Essen. Ja, aber das passt auch gut ne,
- 27:36weil du kommst als klein total ausgehungert da an und denkst
- 27:39dir oh ey, ich hab jetzt richtig Bock was zu essen ich hab
- 27:41wirklich Hunger. Bestellst was willst natürlich
- 27:44noch das Essen, was am längsten in der Zubereitung dauert, wo
- 27:47der Kellner schon sagt, ja das können wir machen, kann aber so
- 27:50ne halbe Stunde dauern und du denkst auch Boah bitte nicht,
- 27:52aber ich will es haben, ich hab es bestellt ich werd es
- 27:54durchziehen, ich werd es nicht überleben aber ich will wenn ich
- 27:57das noch essen kann genau das Essen und dann kommt da der
- 28:00Proxy und gibt dir n Brotkorb mit Dips und du denkst dir boah.
- 28:04Damit kann ich es überbrücken. Weißt du, das ist ja genau das
- 28:06gleiche wie mit der Website, du stellst den Halt erstmal so ein
- 28:09bisschen zufrieden bevor, denn so das eigentliche Produkt
- 28:12kommt, was halt aufwendig in der Herstellung ist und dauert, das
- 28:15ist eigentlich auch eine sehr geile.
- 28:16Analogie finde ich auf jeden Fall.
- 28:21Ich weiß, ich muss auf jeden Fall sehr schmunzeln, als ich
- 28:23das mal gehört habe, merke ich mir auf jeden Fall finde ich
- 28:27richtig gut, das beschreibt doch dieses ganze lazy loading ganz
- 28:31gut. Genau.
- 28:32Also wir hatten jetzt Security Checks oder so
- 28:34zugriffskontrollen sage ich jetzt mal.
- 28:36Dann hatten wir die dieses Lazy loading.
- 28:39Was haben wir noch, na was mir da noch einfällt ist halt immer
- 28:45was ich vorhin so ein bisschen angerissen habe so so
- 28:48Zusatzfunktionen ja also die jetzt nicht irgendwas Security
- 28:52mäßiges sind oder irgendwelche Performance gewinne ja gut
- 28:55Performance spielt da auch oftmals ein bisschen rein, aber
- 28:58wenn ich einfach quasi. Um die eigentliche Business
- 29:02Logik, die ja im echten Objekt enthalten ist, mit meinem Proxy
- 29:05noch Zusatzfunktion, sei es auch was einfaches wie Logging, wäre
- 29:09ein Beispiel ne, aber ich denke da eigentlich eher an sowas wie
- 29:13Caching, deswegen hatte ich dieses Videobeispiel gemacht.
- 29:16Caching ist da oft ein Thema, auch so Remote Proxys ja, also
- 29:23da zum Beispiel bei Remote Proxys denke ich ganz oft an so
- 29:28Kreditkarte zum Beispiel ja. Ne Kreditkarte ist auch n super
- 29:32Proxy Beispiel weil das kennt jeder oder oder was heißt
- 29:36Kreditkarte EC Karte auch von mir aus ja also gehen wir mal in
- 29:39die Welt des Geldtransfers ne und ich geh jetzt in den Laden
- 29:43und ich hab halt kein Bock mein Geld mit mir rumzuschleppen.
- 29:46Das ist ja auch so n bisschen die kernfuhr Aussage dahinter.
- 29:49Ich will nicht zur Bank gehen, mir mein Geld holen um dann
- 29:53immer mit Geld in der Tasche rumzurennen um Sachen zu kaufen
- 29:57ja so n bisschen OK die ganze Zeit ich weiß nicht wie es bei
- 30:00dir ist, aber ich bin schon Fan davon nicht immer Bargeld so
- 30:05mega rumzuschleppen das nervt mich auch immer zum Automaten zu
- 30:08gehen und da kommt ja so ne Karte super gelegen weil das am
- 30:12Ende nur nen Proxy ist zwischen dir.
- 30:15Als Käufer und sozusagen der eigentlichen Geldtransaktion mit
- 30:21dem Verkäufer, weil es wirkt, und das ist jetzt so, dieser
- 30:25Remote Proxy dahinter. Es wirkt natürlich im echten
- 30:29Leben total lokal. Ne weil ich hab ne Karte in der
- 30:32Hand, ich hab jetzt zwar keine Geldscheine, aber ich hab ne
- 30:35Karte in der Hand und diese Karte lege ich jetzt da auf sein
- 30:38Gerät und die sagt. Bestätigt, bezahlt und er sagt,
- 30:42Hey, danke, dass du bezahlt hast.
- 30:44Hier hast du dein Produkt, das wirkt wieso n lokale wie ne
- 30:48lokale Transaktion ist ja aber am Ende Remote, weil kein
- 30:52Netzwerk, keine Transaktion, ja wer kennt das nicht in Gebieten
- 30:56wo einfach der Empfang schlecht ist und der sagt du sorry meine
- 30:59Gerät spinnt schon wieder kleinen Moment.
- 31:01Kannst du bitte nach oben kommen?
- 31:02Nur da können Sie zahlen, ja. Und das ist ja so Klassiker dann
- 31:07am Ende ne, das ist halt wie eine lokale Transaktion, wirkt
- 31:10aber am Ende einen Remote Prozess ist und diese Karte an
- 31:14sich das nur als Proxy triggert am Ende und an die eigentlichen,
- 31:19an den eigentlichen Bezahlvorgang weiterleitet
- 31:21sozusagen, das ist halt auch noch ein klassisches Beispiel,
- 31:25wo denn so Proxys Sinn machen. Definitiv finde ich ein sehr,
- 31:29sehr gutes Beispiel. Bei Remote Proxy muss ich mal.
- 31:32Ich glaube das war auch so. Weiß nicht in der in der Uni
- 31:36oder so so richtig richtig schlechtes Beispiel mal gewesen
- 31:38ne du willst ne Licht anmachen, ja drückst auf den Schalter aber
- 31:41der das Licht geht irgendwo ganz woanders an und denkst dir so
- 31:44Wow sehr weit hergeholt dieses Beispiel.
- 31:46Ja krass, wer hat das verkabelt? Halten wir uns doch lieber an
- 31:51die Kreditkarte oder an die EC Karte.
- 31:53Das find ich sehr gut. Ja genau das sind im Prinzip so
- 31:55die 3 großen Anwendungsfälle, ne.
- 31:58Also drittens sagen wir mal so, man kann das natürlich auch
- 32:01unterteilen, dass du sagst Caching ist einer Remote Proxy
- 32:04ist einer, dass diese Zusatzfunktion haben wir jetzt
- 32:07mal als dritten Punkt ja zusammengefasst.
- 32:10Ganz kurz, du hast ja gerade gesagt, sowas wie.
- 32:14Zusatzverhalten einbauen ne, jetzt zum Beispiel mit so einem
- 32:18Remote Proxy oder mit Caching oder so ne wenn ich jetzt wenn
- 32:22ich zusatzverhalten höre ne, dann könnte man ja vielleicht
- 32:25irgendwie auch denken so okay warte mal decorator dekoriert
- 32:30mit etwas mehr, aber was ist denn jetzt vielleicht zu der?
- 32:36Also wie kann könnte man das denn jetzt zum Beispiel von weil
- 32:38wir ja auch über Decorator gesprochen hatten, davon
- 32:41abgrenzen. Das ist ne gute Frage, weil das
- 32:45da unterscheiden sich ja jetzt die Pattern dann in einer Sache.
- 32:49Also ja n Decorator ist auch immer noch n bisschen mehr ne,
- 32:53also wir hatten ja gesagt wir haben ne Funktionalität, wir
- 32:57Kapseln immer noch mehr drumherum und immer mehr und da
- 32:59hatten wir ja auch diese Analogie von von von der
- 33:03Kleidung ne immer noch ne Jacke drüber oder immer mehr den
- 33:06Tannenbaum schmücken oder wie auch immer was man dann nehmen
- 33:08möchte als Analogie der Unterschied ist wann wenn ich
- 33:13hier mit einem Proxy zusatzverhalten implementiere
- 33:16versus ich mache das mit einem dekorator Pattern ist und das
- 33:20ist jetzt genau der Punkt, dass der Client darüber entscheidet.
- 33:24Der Client sagt so und so möchte ich mein Objekt dekorieren.
- 33:29Ich als Client schmücke den Tannenbaum, ich als Client
- 33:32entscheide, wieviel Jacken ich anziehe und immer noch eine
- 33:35drüber, welche Jacke ich anziehe, in welcher Reihenfolge
- 33:38ich die Jacke anziehe, in welcher Reihenfolge ich die
- 33:41Christbaumkugeln an dem Baum hänge.
- 33:43Völlig egal. Aber das sind Client
- 33:45Entscheidungen. Ja, also ich biete dem Client
- 33:47die Möglichkeit darüber zu entscheiden.
- 33:49Beim Proxy Pattern hatten wir ja gesagt, es ist exakt die gleiche
- 33:54Schnittstelle und der Client weiß nicht ob ein Proxy
- 33:57dazwischen hängt oder nicht und das ist der Unterschied, er kann
- 34:00nicht darüber, also der Client ist nicht in der Lage zu sagen
- 34:03Festivalbeispiel noch mal Security geh mal schön schritt
- 34:06zur Seite, ich gehe da nämlich jetzt einfach durch, ja weil ich
- 34:10will nicht kontrolliert werden, ich als client sage ich.
- 34:14Ich als klein sage, ich geh aufs Festival und will nicht
- 34:17kontrolliert werden. Dann sagt der Proxy ja nicht,
- 34:19ach. So, ja Ach so o.
- 34:22K gut, dann dann geh durch. Ich kontrollier den nächsten,
- 34:24weil der weiß nicht, dass er das nicht machen muss.
- 34:27Ich dekorier dir deine Entscheidung.
- 34:29Ich darf mit meinem Bier da rein.
- 34:30Genau. Ganz genau.
- 34:33Das wäre nämlich das decorator Pattern zu sagen, ich darf rein,
- 34:36ich darf mein Getränk mitnehmen und meine Kumpels ohne Karte
- 34:40kommen auch noch mit rein und du gibst mir noch 50€
- 34:42Getränkegutschein obendrauf. So, das wäre dann der
- 34:46Unterschied, warum nimmt man dann nicht einfach das decorator
- 34:49Pattern klingt viel besser, das klingt erstmal besser für die
- 34:52Software wäre es ja in dem Fall für die Software des Festivals
- 34:55eher nicht so gut, touché. Ja genau, also ähnliche
- 35:00Struktur. Beide delegieren weiter am Ende,
- 35:02aber es ist halt dieser Kernunterschied, dass du sagst,
- 35:06klein driven sage ich mal oder klein hat kein Mitspracherecht.
- 35:12Finde ich gut. Jetzt haben wir natürlich auch
- 35:14das Adapterpad dann auch schon angemerkt.
- 35:17Der Vollständigkeit halber magst du vielleicht das mal
- 35:19voneinander separieren. Genau also Adapter, also ein
- 35:26Adapter ist ja im Endeffekt dafür, darum wie der Name ja
- 35:29schon sagt, etwas zu adaptieren. Das heißt 2 Dinge zu verbinden,
- 35:35die nicht unbedingt füreinander ursprünglich geschaffen waren,
- 35:41das heißt, du hast irgendwie auf der einen Seite etwas, was sage
- 35:45ich jetzt mal, sagen wir mal, du kriegst irgendwie Daten rein,
- 35:49die irgendwie da. Da sind, wie sie sind und auf
- 35:53der anderen Seite können diese Daten aber gar nicht verarbeitet
- 35:55werden. Das heißt, du hast irgendwo eine
- 35:56Stelle, die dann am Ende dafür sorgt, dass diese Daten, ich sag
- 36:01mal, übersetzt werden für die andere Partei, dass sie das auch
- 36:04versteht, und das heißt das, was der Client hat, also erwartet,
- 36:13der die Gegenseite erwartet etwas anderes als das, was der
- 36:17Client hat, aber es soll quasi gültig sein.
- 36:19Weißt du, ich meine und das. Beim Proxy ist es ja halt eben,
- 36:24ich sag mal anders ne, also wie du ja auch schon gesagt hast,
- 36:29das Interface worüber du kommunizierst bleibt das
- 36:33gleiche, also der Client dem Client ist es eigentlich relativ
- 36:36egal. Ja also mit mit wem gesprochen
- 36:39wird, ob jetzt mit dem also du hast eine feste Anlaufstelle sag
- 36:43ich jetzt mal ne also. Mit der du kommunizierst.
- 36:47Und Du hast ein Interface dafür. Du weißt aber nicht, ob du jetzt
- 36:49mit einem echten Objekt, mit einem Proxy oder wie auch immer
- 36:51sprichst. Bei einem Adapter ist dir
- 36:53relativ klar, mit wem du sprichst.
- 36:56Die Frage also ne was dahinter steht du.
- 36:58Du musst halt nur wissen welchen Adapter nehm ich um mit der mit
- 37:01dem mit dem Ich sprechen möchte quasi zu kommunizieren.
- 37:04Das heißt beim also beim Proxy weißt du ich hab ein festes Ziel
- 37:11wo ich hin möchte was ich gerne ansprechen möchte.
- 37:15Aber was mit wem ich spreche, ist mir eigentlich egal.
- 37:18Wenn ich jetzt aber den Adapter nehme, dann weiß ich, dass ich
- 37:21vielleicht mit unterschiedlichen Akteuren sprechen möchte.
- 37:26Aber ich brauche eine andere Übersetzungssoftware, um halt
- 37:31eben an die entsprechenden Akteure zu kommen oder sie zu
- 37:34erreichen, sagen wir mal so. Und das das letzte was du jetzt
- 37:38gesagt hast, ist eigentlich wirklich so der Kernunterschied.
- 37:41Dass ich mit dem Adapter Pattern natürlich das Ziel verfolge,
- 37:44Kompatibilität zu schaffen. Ja, also dass ich Sachen passend
- 37:48zueinander mache und Proxy Pattern ja eher den Einsatz hat,
- 37:53Sachen kontrolliert zu machen. Ja, also mein Ziel ist es ja,
- 37:57Sachen zu kontrollieren und nicht einfach nur zu sagen, ihr
- 38:00passt OK dann los, ja, das wäre ja.
- 38:05Genau das Beispiel. So ne zum Beispiel jetzt noch
- 38:07mal das Festival. Ne, da ist ja der Sinn ne
- 38:09Kontrolle einzubauen und nicht zu sagen OK ihr lauft alle in
- 38:12dieser Schlange, ihr passt alle in diese Schlange rein in der in
- 38:15die Warteschlange, also dann gut dann geht durch solange ihr in
- 38:18dieser Schlange seid sozusagen ne und das das ist halt auch so
- 38:23n entscheidender Unterschied dabei also du verfolgst n ganz
- 38:26anderes Ziel. Während man wie gesagt beim
- 38:28Adapter, wie wir meinten, immer an diese Kompatibilität denkt,
- 38:31ne, da spielt auch Legacy dann ganz viel ne Rolle.
- 38:34Ne Oh Mann ey, jetzt müssen wir irgendwie so n altsystem da noch
- 38:36anbinden, die Schnittstelle passt doch eigentlich gar nicht
- 38:38mehr na ja mach n Adapter damit die Schnittstelle wieder passt.
- 38:42Genau, ist ja ne ganz andere Zielsetzung, ne.
- 38:44Richtig. Ja, trotzdem hat jedes Pattern.
- 38:51Ja, immer so vor und Nachteile ne also wir wir haben es ja
- 38:54jetzt sag ich mal als sehr mächtig betitelt, haben auch
- 38:57Vorteile und Anwendung genannt, aber lass mal noch mal einmal
- 39:00zusammenfassen, ich finde sowas ist immer wichtig, es hat ja
- 39:04immer ne Kehrseite der der diese einpattern Medaille wie man so
- 39:08schön sagt und es gibt also auch Nachteile also lass noch mal
- 39:12schauen was sind so die Vorteile und welche Nachteile stehen da
- 39:16gegenüber? Ja also.
- 39:18Ich mein Nachteile ist eigentlich.
- 39:20Ich finde, es ist halt immer so ein Ding, wie ich schon meinte,
- 39:23so, du kannst alles mögliche programmieren, wie du es gerne
- 39:25möchtest. Du kannst es halt, brauchst kein
- 39:28Proxy, wenn du kein Proxy haben möchtest oder vielleicht nicht
- 39:32weiß, dass es einen gibt, weil du im Endeffekt ja alles einfach
- 39:36in eine Klasse ballern kannst. Bedeutet aber gleichzeitig auch,
- 39:38dass du logischerweise der Nachteil, den du eigentlich
- 39:41immer in irgendeinem Pattern. Generell hast ist du hast
- 39:45irgendwie ein Overhead, du brauchst mehr Struktur, du
- 39:47brauchst mehr Klassen, du hast irgendwie eine gewisse Art von
- 39:50Abstraktion, weil du da logischerweise irgendwie ein
- 39:52Interface benötigt, was bei eigentlich gefühlt so gut wie
- 39:56allen oder bei sehr sehr vielen Pattern halt einfach der Fall
- 40:01ist. Und es ist natürlich auch das
- 40:03Debugging ist auch etwas schwieriger oder kann
- 40:06schwieriger sein. Ich weiß nicht, ob das
- 40:07irgendjemand mal passiert ist, aber es ist total geil, wenn du
- 40:10irgendwas. Debuggst und dann auf einmal ist
- 40:13zum Beispiel bei Weiß nicht, sagen wir mal bei Java ne, da
- 40:15haben wir im Studium auch mit angefangen und ich hab
- 40:17irgendwann damals das Debugging gelernt, ne und wollte irgendwas
- 40:20in nem Objekt debuggen und auf einmal findest du dich beim
- 40:23debuggen in irgendeinem Proxy wieder und du denkst dir was zur
- 40:27Hölle passiert denn hier gerade? Also du kannst rein, da wollte
- 40:31ich doch gar nicht hin, das heißt du kannst irgendwo landen
- 40:34wo du eigentlich vielleicht gar nicht landen willst.
- 40:35Und wenn du da nicht weißt, was da eigentlich los ist, dann
- 40:37denkst du dir so okay warte mal. Ich check es nicht so.
- 40:40Weißt du, das heißt, das ist natürlich ein bisschen
- 40:44komplexer, schwieriger, dann unter Umständen ne, ich sag
- 40:46nicht, das ist immer so, ist aber unter Umständen und du hast
- 40:49logischerweise eventuellen Performancearbeit.
- 40:53Also es ist natürlich, es kommt drauf an ne wenn du jetzt zum
- 40:55Beispiel sagst du hast ein Cash, ja dann ist es, dient es
- 40:58natürlich logischerweise. Die Performance zu optimieren,
- 41:02aber rein laufzeittechnisch wenn du irgendwas tust, jetzt mal
- 41:06unabhängig vom Anwendungsfall hast du natürlich mehr Aufrufe
- 41:09mehr zu tun, mehr hier, mehr da zu gucken, mehr zu überprüfen,
- 41:12unter Umständen wie gesagt, es kommt immer ein bisschen auf die
- 41:15Implementierung. Naja du klar, du hast halt wenn
- 41:18wenn du keinen Nutzen dahinter ist und du sagst einfach nur ich
- 41:20verwende das Proxy Pattern um es einfach drin zu haben, weil ich
- 41:23habe das gelernt und ich will das jetzt verwenden.
- 41:26Erzeugt es natürlich n Overhead, der sich erstmal rechtfertigen
- 41:29muss ne oder oder sich lohnen muss, wie zum Beispiel wie du
- 41:32meintest ja, aber ich möchte ja ein Caching implementieren damit
- 41:35und damit kriege ich über die Gesamtheit wieder ne bessere
- 41:38Performance hin, weil ich einfach Cache ja und nicht
- 41:40einfach nur n Proxy aufrufe, der am Ende auch nur den Service den
- 41:44Echten aufruft. Ja, das ist dann.
- 41:46Richtig, einfach auch gut ab zu. Grenzen, weil sonst könnte man
- 41:48sagen, ja, ich hab doch gerade über Performance gesprochen.
- 41:50Wieso ist das jetzt? Ja, absolut absolut.
- 41:52Ich find auch die Banking ist n super, Stichwort weil.
- 41:57Proxy das Pattern kann man ja auch verketten, man kann ja
- 42:00Proxys verketten, also findet man ganz oft unter Proxy
- 42:04chaining und das bietet Möglichkeiten, natürlich klar,
- 42:09also wenn du eine komplexere Logik hast, komplexere Checks
- 42:12oder so, dann kann ich so was ja auch verketten, das verbietet
- 42:15mir ja keiner, weil wie gesagt, der Client weiß ja nicht was
- 42:18dahinter ist. Ob der jetzt mehrere Proxys
- 42:20durchläuft, bis er eigentlich irgendwann mal zu einem echten
- 42:23Service kommt, der seine Anfrage bearbeitet oder nicht, die.
- 42:26Merkt er ja nicht. Fakt ist und das Stichwort, die
- 42:29Backen ist da super, wenn dann irgendwo n Fehler in der Mitte
- 42:33bei irgendeinem Proxy ist und du weißt gar nicht mehr, lande ich
- 42:36jetzt in dem Fall, wann lande ich da, was muss passieren,
- 42:39damit ich da überhaupt hinkomme und das sind die backen kann
- 42:42dann richtig richtig anstrengend werden, also da halt auch sag
- 42:46ich mal mit Vorsicht das Ganze genießen wenn man sagt Hey wäre
- 42:49aber geil wenn ich jetzt noch n Proxy dahinter hätte, weil man
- 42:51jetzt so n bisschen die Vorteile gelernt hat dadurch.
- 42:54Und anfängt, die zu verketten. Wie gesagt, gibt es, macht man
- 42:58in gewissen Fällen auch, aber mit Vorsicht genießen auf jeden
- 43:00Fall, das wär auf jeden Fall mein Rat, weil sowas zu debacken
- 43:04kann halt richtig die Hölle werden.
- 43:06Und ja klar, mehr Struktur, mehr Abstraktion.
- 43:09Was du meintest, ich finde, das ist halt immer witzig, weil das
- 43:12ist sowohl vor und Nachteil bei gefühlt allen Patterns wie du ja
- 43:15meintest, weil Hey mein Vorteil ist, ich habe mehr Struktur in
- 43:18meiner Software Software und mein Nachteil ist ich muss
- 43:21Struktur mehr Struktur aufbauen ja OK klar, also es muss sich
- 43:24natürlich lohnen wenn ich so kleine Skripte schreibe, dann
- 43:27brauche ich mit sowas nicht anfangen, wenn es keinen echten
- 43:29Anwendungsfall gibt wie du auch meintest ne aber.
- 43:33Sobald ich irgendwie so Security Performance oder auch Legacy
- 43:37kann, da auch mit Reinspielen. Ja so Aspekte habe kann ich ja
- 43:40dieses Open Close principle dahinter ne dass ich halt von
- 43:44außen nicht weiß was da drin passiert ist ja n gutes Prinzip,
- 43:48das kann ich ja für mich nutzen an der Stelle ich kann
- 43:51bestehenden Code stabil halten, ich kann das ändern ohne dass
- 43:55ich viel anderen Code anrühren muss.
- 43:58Ja, testbarkeit auch klar, sobald ich anfange mit
- 44:02Interfaces zu arbeiten, kann ich mir natürlich auch
- 44:04testimplementierung davon machen und dann wirklich sauber und
- 44:08ordentlich diese Software abtesten darf man ja auch nicht
- 44:11unterschätzen, was das für ein Mehrwert in einem Projekt gibt.
- 44:14Ja, wir sind der absolute Verfechter davon, deswegen auch
- 44:16hier noch mal die Anmerkung, definitiv aber was was sind so
- 44:22typische Anfängerfehler die das gilt ja sag ich mal für viele
- 44:25Pattern so natürlich auch fürs Proxy pattern das.
- 44:28Was also ich hatte jetzt schon mal eine Sache genannt, ist so
- 44:31was wie triviale Skripte, kleine Logiken.
- 44:34Ja, ich, ich sag ich mal, ich hab n getter, ja ich will jetzt
- 44:39irgend n wert haben, dann sag ich ja nicht get x zum Beispiel
- 44:43Moment Get X wird jetzt erstmal durch n Proxy laufen und ich
- 44:47werde gucken ob du x haben darfst.
- 44:49Ja klar dass du x haben an der Stelle es gibt.
- 44:52Kein Access Logic dahinter, das ist n Getta als Beispiel.
- 44:56Ja, es ist halt n Getta, der ist Public Mann, weißt du also das
- 45:02aber ich kenn das deswegen, das ist überhaupt keine Verteufelung
- 45:05oder sich drüber lustig machen, sondern bei mir war es wirklich
- 45:09so, ich hab n Pattern gelernt und ich hab es verwendet.
- 45:11Und es ist meiner Meinung nach auch der richtige Weg.
- 45:13Aber man sollte sich dann halt fragen, wenn man mehrere kennt,
- 45:17wann macht es Sinn halt so ne. Der typische Anwendungsfall,
- 45:20wenn du dich irgendwo hinstellst auf irgend ne Brücke und sagst,
- 45:23entschuldigen Sie sie dürfen hier vorbei.
- 45:26Ja ich weiß jeder da vorbei, aber sie dürfen auch vorbei.
- 45:28Ja, Sir, warten Sie bitte kurz. Das ist ne öffentliche Strafe,
- 45:33wird weitergehen. Ich muss das nur kurz
- 45:36kontrollieren. Oh Gott, ey.
- 45:41Aber es ist auf jeden Fall genau bei einfachen Gattern definitiv
- 45:43triviale Logik oder? Weiß nicht wirklich kleine
- 45:48Services, die sag ich jetzt mal sehr kleinen Umfang.
- 45:52Sorry, die ich mir vorstelle, ich find's immer auch Scheiße.
- 45:55Witzig, steht dir vor, steht einer echt auf der Brücke, so
- 45:58entschuldigen. Sie.
- 45:59Ich dürfte bitte nicht Ihren Ausweis sehen.
- 46:01Gehen sie weiter, Oh Gott, ey. Ja, aber so, da macht's keinen
- 46:08Sinn. Stell ihn nicht auf die Brücke,
- 46:10sonst Security, wenn der da nicht zu Gott.
- 46:11Lass die Leute einfach drüber laufen.
- 46:14Also wenn man das jetzt so kurz, ich sag mal kurz und knackig
- 46:18zusammenfassen will, wenn du kein Problem hast, ja nutz kein
- 46:21Pattern. Ja wenn du kein Security oder
- 46:24Performance Thema hast, nutz kein Proxy.
- 46:28Es macht kein lazy loading, wenn es nichts zu laden gibt.
- 46:35Okay. Gut, dann hauen wir doch mal so
- 46:39ein paar Take aways. Wir haben es jetzt gut
- 46:41zusammengefasst. Die vor und Nachteile genannt.
- 46:45Genau gibt man noch mal so abschließend paar Take.
- 46:47Aways also was wir sage ich jetzt mal gelernt haben, ja aus
- 46:51dieser Folge ein Proxy ist ein Stellvertreter.
- 46:57Ey, ganz ehrlich, ich habe das ja, es ist die Übersetzung okay.
- 47:00Aber ich habe es noch nie als Stellvertreter in meinem Kopf
- 47:03also genannt. So weißt du, es ist.
- 47:05Es wie sagt man, ich komm nicht aufs Wort, also es macht mich
- 47:10fertig. Ich rede also mit dir selbst,
- 47:12aber nicht so, nein, ich habe keinen Stellvertreter, der mit
- 47:16mir selbst redet, nein, mir fehlt das Wort, ich habe es noch
- 47:20nie so klassifiziert okay verstehe, ja verstehe habe ich
- 47:24auch lange nicht, aber irgendwann als ich es verstanden
- 47:27habe es gibt kein Zurück mehr jetzt.
- 47:30Genau also wie gesagt Proxy Stellvertreter.
- 47:32Er kontrolliert ja. Oder delegiert.
- 47:35Oder was wir genannt hatten. Aber er arbeitet nicht, also
- 47:39genau, ganz wichtig, also ich nenne es jetzt mal, arbeitet
- 47:42nicht in der Business Logik, also diese Business Logik die
- 47:45stattfinden soll, das ist auch finde ich noch mal ein wichtiger
- 47:47Punkt, du duplizierst nicht irgendeine Logik, sondern der
- 47:50Proxy sagt am Ende auch wenn alles erlaubt ist.
- 47:55Zum Beispiel bitte echtes Objekt, mach jetzt deine Arbeit,
- 47:59also diese Business Logik. Das Interface bleibt gleich, was
- 48:03der Proxy und das echte Objekt, beide haben ne, also beide
- 48:07Objekte können genau das ist immer das gleiche, ja nur dass
- 48:11dann im Endeffekt der Proxy wiederum aufruft, was der echt,
- 48:14dass das echte Objekt machen soll genau ist super, für was
- 48:18hatten wir gesagt, Security und Performance zum Beispiel, auch
- 48:21wenn es n Performance over wie sagt man Overhead bringen kann
- 48:28ja aber auch da aufpassen, nein. Ihr wisst, was ich meine und
- 48:34gefährlich ist. Aber, und das muss man natürlich
- 48:36auch immer sagen, ist over Engineering, wie du auch
- 48:37meintest, nicht so viel Proxys ineinander hintereinander
- 48:41schalten, wo du dann irgendwann überhaupt nicht mehr weißt, an
- 48:44welchem Proxy du rechts abgebogen bist, sondern halt
- 48:47eben bewusst einsetzen. Also Patterns sind halt eben
- 48:50Werkzeuge, aber keine Pflicht, also du musst es nicht nutzen,
- 48:54kannst es nutzen, wenn es Sinn macht.
- 48:57Genau. Genau also die bewusste
- 48:59Entscheidung für ein Pattern treffen mit den Argumenten
- 49:01dafür. Gerade wenn man so diese vor und
- 49:03Nachteile, die wir ja besprochen haben, mal abwägt, kann man ja
- 49:06für sich entscheiden, ist das gerade ein Anwendungsfall dafür
- 49:09oder nicht oder gibt es vielleicht ein anderes Pattern,
- 49:11was eher meiner Vorstellung entspricht, wenn ich
- 49:14beispielsweise sage, ich möchte es kompatibel gestalten, dann
- 49:17ist es halt eher das Adapter Pattern, ja als wenn ich gar
- 49:20nicht zum Beispiel so eine Access Control machen möchte,
- 49:22aber. Und das sind genau die
- 49:23Entscheidungen, die Fragen, die man sich stellen muss.
- 49:26Und deswegen, liebe Zuhörer und liebe Zuhörer, auch mal die
- 49:28Abschlussfrage an dich. Zu dieser Folge hast du in einem
- 49:32Projekt vielleicht schon mal mit einem Proxy gearbeitet, in einer
- 49:35Software, ohne dass du es vielleicht weißt oder bewusst
- 49:40eingesetzt hast. Lass es uns gerne wissen,
- 49:42schreib uns auf allen Plattformen also auf, die nicht
- 49:45auf allen Plattformen, sondern auf der Plattform deiner Wahl so
- 49:48rum, du kannst es aber auch auf einen schreiben, wir freuen uns
- 49:50über jede Nachricht, auch wenn sie doppelt ist.
- 49:52Und ja, deswegen bleibt mir auch gar nicht mehr so viel zu sagen,
- 49:59falls der Podcast dir gefallen hat.
- 50:01Liebe zuhören, lieber Zuhörer, lass gerne Bewertung da
- 50:03empfehlen, gerne weiter kommen, unsere Community auf unseren
- 50:07Discord Channel, Schau dir gerne auch unsere anderen Plattformen
- 50:10an, Schau auf Twitch mal vorbei in den Livestreams immer
- 50:13Dienstag 20:00 Uhr kommen wir zusammen, da werden auch mal
- 50:16Pattern auftreten wenn sie denn gebraucht werden und.
- 50:20Und ansonsten findest du auch in den Shownotes und Spenden Link.
- 50:25Wenn du sagst, der Podcast ist richtig, richtig cool.
- 50:27Ich würde euch gerne beide unterstützen, dann vielen vielen
- 50:30Dank dafür und ansonsten würde ich sagen, hören uns alle
- 50:34nächste Woche wieder zu einer brandneuen Folge, habt eine
- 50:37schöne Zeit bis dahin, eine gute Woche und bis dahin deine Coding
- 50:41war. Dies gemeinsam besser die alle
- 50:45liefen nicht mehr egal ist wirklich gut die Mail.
- 50:48Was ist schon wieder, heißt es schon wieder mit Essen nicht.
- 50:50Wir holen uns einen Burger ab und fahren es noch von OK.