#149 Proxy Pattern - Der Türsteher in deinem Code - podcast episode cover

#149 Proxy Pattern - Der Türsteher in deinem Code

Jan 29, 202651 min
--:--
--:--
Download Metacast podcast app
Listen to this episode in Metacast mobile app
Don't just listen to podcasts. Learn from them with transcripts, summaries, and chapters for every episode. Skim, search, and bookmark insights. Learn more

Episode description

Wer kennt es nicht? Ewig anstehen, warten oder erstmal Fragen beantworten. Und dabei möchte man doch nur kurz etwas erledigen..


In der neuen Folge geht es weiter mit unserer Design Patterns Reihe. Dabei sprechen wir über das Proxy Pattern und erklären, warum es ein mächtiger Verbündeter sein kann.


🔗 Unser Tipp für deinen eigenen Server:

Wir nutzen selbst die vServer von STRATO – perfekt für bspw. deine eigene CI/CD-Pipeline.

Zum Angebot: ⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠https://acn.strato.de/aff_c?offer_id=1&aff_id=1307&url_id=15&source=vserver_podcast⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠


Dir hat die Folge gefallen?

Unterstütze uns gerne mit einer kleinen Spende:

⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠https://streamlabs.com/thecodingbuddies/tip⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠

Jeder Beitrag hilft, unseren Content weiter auszubauen – danke dir!


🧠 Du suchst eine IDE, die keine Wünsche offen lässt?

Hol dir jetzt deine Jahreslizenz für jede JetBrains IDE und spare 20% mit dem Code: "CODINGBUDDIESxJB".

⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠https://www.jetbrains.com/de-de/products/⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠


🌐 Alle Links auf einen Blick:

🔗 ⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠www.links.codingbuddies.de⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠


📬 Du hast Feedback?

Dann schreib uns gern an:

✉️ ⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠podcast@codingbuddies.de

Transcript

Das sind auf jeden Fall typische. Ich nenne es jetzt mal Alltagssituationen, die schon auf das Pattern Proxy hinweisen. Coding Buddies Dein Podcast rund um Softwareentwicklung und aktueller Tech News herzlich Willkommen. Halli Hallo und herzlich Willkommen hier zum Coding Buddies Podcast. Dein Podcast rund um Softwareentwicklung und zwar mit mir und mit Tino. Der darf natürlich nicht fehlen, der sitzt mir hier schon gegenüber.

Tino, Wie geht's, wie steht's? Fabi, Was geht ab, was geht ab? Ich sag mal deinen Namen auch Fabi Fabi, der andere ist fabi was geht. Ja. Ist gut, gut, gut, alles gut. Wir waren ja ein bisschen in den Bergen, haben uns sportlich betätigt, sagt man das so beschäftigt? Wir waren ja ein bisschen snowboarden und haben einfach mal so ein bisschen die Bergluft genossen. Und ich muss sagen, es war eine sehr, sehr geile Woche. Fabi hat mir gut gefallen, aber

jetzt geht's wieder ran. Podcast neue Folge steht an. Jetzt setzt die Post Berg phasische Depression ein. So nennt man das. Gibt es so eine Post? Berg Depression? Gibt es sowas bei dir? Also hast du danach das Gefühl so ah. Würd jetzt schon gern wieder den Lift hochnehmen und weiterfahren. Ja, ist immer so n Unterschied. Also es ist zwiegespalten, weil auf der einen Seite tut mir alles weh, ne so n bisschen zum Recht bestätigen.

Ja, geht mir auch so. Und da denkt sich mein Körper, wahrscheinlich ist in Ordnung, wenn man jetzt nicht noch weitermacht. Aber so der Kopf denkt sich schon so, wär schon geil so. Weißt du ja, geht mir auch so. Ey, das ist halt. Es ist halt schade, dass es so

saisonal ist. Der Sport ne, also wir beide sind ja schon große Fans vom Snowboarden an sich und würden es gerne ja auch öfter machen, aber es ist natürlich immer mit einer Reise mit Urlaub, mit Geld logischerweise und auch natürlich mit dem Wetter verbunden und deswegen hab ich immer so ne Phase wo ich mir denke, ahh er hätte jetzt schon Bock noch mal und jetzt wieder n ganzes Jahr warten ne das ist.

Geht mir auch. Ärgerlich, ja, aber es gibt natürlich auch andere coole Highlights dieses Jahr, die noch so anstehen, die wir uns auch noch so vorgenommen haben. Worauf man sich freuen kann, bis denn quasi wieder der nächste Skiurlaub. Da ist außerdem ist man ja nach Hause gekommen und es hat mehr geschneit hier als in den Bergen. Das kommt noch hinzu. Also es ist super weiß hier gerade bei dir auch ne, du hast ja schon berichtet, so privat sage ich mal, dass du nur am

Schnee schippen bist. Da ist ja jetzt so deine zweit Lieblingsbeschäftigung verbunden mit Schnee, ne. Aber was natürlich auch immer jede Woche ein Highlight ist, ist die neue Podcast Folge und ich habe Bock. Ich habe richtig Lust heute eine Folge aufzunehmen und du hast ja auch ein cooles Thema mitgebracht, denn wir wollen heute, das hast du ja schon mal angeteasert, mit einer Reihe weitermachen, wo wir jetzt glaube ich, schon eine Weile

nicht zu gemacht haben. Also ich glaube, es gab jetzt ein paar Folgen nicht bezüglich dieser Reihe, deswegen geht es da heute weiter, und zwar mit unserer Design Pattern Reihe, erzähl doch mal was hast du denn da so? Na. Wir haben ja schon einige Patterns durchgesprochen beziehungsweise besprochen und was wir uns diesmal angucken wollen, ist wieder n strukturpattern und ich glaube so ungefähr das letzte Strukturpattern was jetzt so bei uns auf der Agenda steht.

Ja, es geht ja, könnt sein, ja. Und genau. Und es geht um das Proxy Pattern. Ja, ich überlege gerade, was hatten wir denn alles zu strukturpattern. Wir hatten auf jeden Fall das Adapter Pattern besprochen. Die Decorator Bridge, das sind ja so gängige, also auch hier der Disclaimer.

Wir werden natürlich nicht alle Pattern besprechen können in dieser Reihe, weil dann machen wir den Podcast nur noch zu Design patterns, aber zu den Struktur hatten wir auf jeden Fall schon die und Proxy ist eigentlich noch eine ganz coole Ergänzung, weil wenn man jetzt so noch mal zurückblickt, sagt ja okay Adapter Pattern, was war denn eigentlich so der Sinn hinter dem Adapter Pattern haben wir gesagt, ja, eigentlich. Dinge, die nicht passen, werden passend gemacht.

So ja, also ich hab das ist ein Pattern, was dafür sorgt, dass ich adaptieren kann an eine gewisse Schnittstelle um mich kompatibel zu machen. Wir haben das Decorator Pattern besprochen, auch beispielsweise, dass wir sagen, OK, wir dekorieren so unsere Objekte, wie wir das wollen, ne und bauen immer mehr dazu, also wir dekorieren immer mehr und jetzt ist natürlich die Frage. Warum noch ein Pattern wie das

Proxy pattern? Ja, also was ist jetzt der Sinn dahinter und ich finde, dass das Proxy pattern sich da ganz gut abhebt, das würde ich auch gerne herauskristallisieren in der Folge mit dir zusammen, dass man ganz klar weiß okay ja okay, das macht Sinn, noch ein Pattern mehr, da hat sich jemand noch mal was überlegt, was wirklich noch mal was anderes ist und nicht die xte Variante von dem gleichen Prinzip und deswegen

würde ich sagen. Lass uns heute mal darüber sprechen, welches anderes Ziel steckt denn hinter dem Proxy Pattern? Ja, genau. Also ich meine, du kennst ja wahrscheinlich die so ein, ich sag mal gewisse Alltagssituationen, die man in der Softwareentwicklung kennt, jetzt nicht komplett im Alltag, aber wenn du jetzt eine Methode aufrufst und irgendwas wird, sag ich jetzt mal gecasht oder manchmal hast du eine Funktion

wo du dir denkst. Na, aber die Funktion darf ich aber eigentlich unter den und den Umständen vielleicht gar nicht benutzen. Und das sind auf jeden Fall typische. Ich nenne es jetzt mal Alltagssituationen, die schon auf das Pattern Proxy hinweisen, so einen Kleinen hin geben, so das könnte man da an der Stelle verwenden. Na ja, so Alltagssituationen, die mir da einfallen in die Richtung ist ja auch zum Beispiel. Also auch natürlich technisch, aber jetzt nicht direkt Softwareentwicklung.

Aber wenn ich zum Beispiel irgendwelche Videos mir anschaue oder so ne, dass die das auch gecasht wird beispielsweise oder Bilder, ne, dass ich halt nicht wirklich merke oder hoffentlich wenn es gut gemacht ist, nicht direkt merke, ob das Bild noch mal neu oder der Inhalt der mir angezeigt wird neu geholt wird oder einfach nur gespeichert wurde und erneut angezeigt wurde. Und da sind so Bilder, Videos, so klassische Beispiele für ja, für Caching.

Ja, und mit mit dem Proxy Pattern kann ich halt dieses Caching auch gut umsetzen und das sind halt schon so Sachen, die eigentlich sage ich mal überall, wie soll ich sagen, einem begegnen, ja ich meine, man kennt das vielleicht auch noch mal, um die Softwareentwicklung aufzugreifen, gerade so Frontentwickler und Webseiten, dass man so sagt okay ja, jetzt habe ich irgendwie Daten geändert, ey, warte mal. Aber wenn ich jetzt auf die

Seite gehe jetzt. Zeigt er mir aber hier noch alte Sachen an, beispielsweise wenn das auch gecasht wurde und dass dieses typische Invalidieren des cashes, Ich glaube, jeder jedem ist das denn schon mal begegnet ist, ein klassisches Beispiel. Und genau über dieses Pattern wollen wir heute reden.

Es ist auch nicht kompliziert, aber sehr mächtig, würde ich mal sagen, also man kann wirklich coole Sachen damit machen und es ist nicht so schwer umzusetzen, was ja natürlich auch gerade weil in unserer Community auch viele Einsteiger dabei sind.

Sag ich mal, ist es auch sehr einsteigerfreundlich und geeignet dafür, sich das auf jeden Fall mal anzugucken, weil wir haben ja auch gesagt, so das Beste ist sich so n Patter nehmen das Mal auszuprobieren, wirklich mal diese vor und Nachteile die wir ja heute wieder nennen werden mal zu fühlen. Ja also mal wirklich mal in die Erfahrung damit zu gehen um dann einschätzen zu können, wann kann ich es gut verwenden, wann ist es eher nicht so geeignet und dazu begleitend dann die Folge heute.

Props auf jeden Fall. Alle, die das auch machen. Wir haben ja schon n bisschen gehört, dass es auf jeden Fall Leute gibt, die das auch ausprobieren, dass sie sich wirklich mal hinsetzen und sagen, ich probier es mal so, ich Code jetzt mal so n Petter nach, das ist schon cool. Genau und deswegen auch da noch mal die Anmerkung, Liebe Zuhörer, liebe Zuhörer, falls du es gerne ausprobieren möchtest oder Ausprobierst und Fragen dazu hast, komm gerne auf

unserem Discord vorbei. Da findest du Leute, die genau den gleichen Weg gehen und das Ausprobieren Fragen dazu stellen. Man kann sich wunderbar austauschen und vor allem gibt es sehr erfahrene Entwicklerinnen und Entwickler, da die auch immer hilfsbereit sind und da gerne ein Feedback geben und nur so kann man eigentlich sage ich mal das Bestmögliche in seinem Lernweg herausholen. Und deswegen lass uns mal drüber

quatschen. Wie sieht eigentlich so ganz allgemein das Proxy Pattern aus, bevor wir mal so auf Beispiele eingehen, aber erstmal so was ist so der Grundgedanke, so diese Kernaussage hinter dem Pattern. Ja, also quasi die Kernidee. Ne, ja du hast ja, also der Proxy steht natürlich im Mittelpunkt, das ist ich hab mich früher hab ich mich mal gefragt, was soll so n Proxy

sein ne also ich hab einfach. Quasi mir gedacht, so okay irgendwas, also weißt du im Studium auch ne, dann dachte ich mir so Proxy okay was soll das sein Proxy, dann googelst du das ja Stellvertreter denkst du dir so okay Stellvertreter wofür wofür ein Stellvertreter? Ich weiß nicht, ich hab auch manchmal das Gefühl, dass ich damals im Studium manchmal so ein paar Sachen noch gar nicht verstehen wollte, weil

eigentlich. So im Nachhinein. Eigentlich ist es ja wirklich relativ einfach zu verstehen. Ein Stellvertreter macht etwas für jemanden, der es eigentlich machen soll, ne. Also du hast quasi ich sag mal einen Client ne oder ein echtes Objekt irgendwo im Code, was etwas tun soll, ne egal was du hast, irgendein Objekt, das soll etwas tun und du hast einen Proxy und dieser Proxy sagt OK

pass auf echtes Objekt ich. Vertrete dich und mache das, was du eigentlich machen sollst, primär und bin der Ansprechpartner sozusagen ne. Das heißt am Ende hast du zwar dieses echte Objekt, was das tut, was was getan werden muss, aber ich sag mal der Code, ja der restliche Code deiner deiner Codebase spricht nur mit dem Proxy mit dem Stellvertreter ne und der. Kann dann halt bestimmte Dinge übernehmen, bevor wirklich eine irgendeine Ausführung passiert.

Also der Proxy kann zum Beispiel irgendwas prüfen, der kann also, ob es zum Beispiel ob eine valide Eingabe da ist, er kann irgendwie kontrollieren, ob irgendwelche Zugriffsrechte vorhanden sind, er kann irgendwas delegieren, weil vielleicht ne wie du meintest schon irgendein Cash aufgebaut wurde oder irgendwas, das heißt vielleicht muss eigentlich das echte Objekt gar nicht bemüht werden oder was auch immer, aber. Aber am Ende ist es relativ um

das zusammenzufassen. Du hast irgendwie deinen Code, der möchte irgendwas ausführen, ne irgendeine Funktion aufrufen und du kannst jetzt entweder sagen, OK, ich rufe diese echte Funktion auf oder ich gehe über diesen Weg des Proxys, diesen Stellvertreter der sagt OK pass auf, Ich möchte das Ausführen und der Stellvertreter sagt OK ich guck mal was wir machen können, so nach dem Motto. Ja, also Stellvertreter ist da halt auch wirklich die Richtige. Sag ich mal.

Der richtige Begriff, an den man da denken sollte. Und weil du ja meintest so echte Anwendung oder echte Parallelen im normalen Leben nicht in der Softwareentwicklung sag ich mal. Ich mein jeder kennt es ja auch, wenn ich zum Beispiel irgendein Problem hab bei einem Service, bei einer Dienstleistung die ich verwende, ne Versicherung der Internetanbieter oder weiß ich

was ne? Wenn ich jetzt da eine Anfrage hab, ne an den eigentlichen Sachbearbeiter oder die Sachbearbeiterin ist es ja wirklich oft so, dass ich erstmal über eine Hotline gehen muss, was am Ende so gesehen auch nichts anderes als ein Proxy ist, dass ich da anrufe.

Für mich ist es, ich möchte zu meinem Sachverhalt eine Lösung kriegen, eine Frage stellen oder was das ist für mich die gleiche Schnittstelle, ob am Telefon direkt der Berater rangeht, was natürlich wünschenswert wäre, also an das echte ranzukommen und. Wird aber sehr wahrscheinlich eine Proxy dazwischen sein und zwar ein Kundenservice, der erstmal genau diese Aufgaben die du meintest übernimmt.

Wer bist du? Deine Kundennummer bitte gibt es vielleicht Lösungen für dich so aus der aus dem FAQ sage ich mal auf das man verweisen kann, dass man quasi das echte, den echten Sachbearbeiter oder Sachbearbeiterin gar nicht

damit. Ich nenn es jetzt mal provokativ belästigen muss ne oder die Zeit verschwenden muss, wenn ich vorgelagert als Proxy schon ne Lösung bieten kann oder weiß ey du bist gar nicht Kunde hier, warum soll ich dich vermitteln, so nach dem Motto. Und das ist es halt ne und Proxy hat halt diese Zusatzfunktion, was eigentlich nicht diese

Business Logik ist. So zum Beispiel wie ne Frage beantworten, Daten ändern, Verträge abschließen oder weiß ich was ne also diese eigentliche Funktion sondern nur zusätzliche Logik wie beispielsweise überprüfe ob du wirklich n Kunde bist. Überprüfe, ob das überhaupt ein Fall ist, den ich weiter delegieren kann. Ist es ein Scherzanruf? Keine Ahnung, du weißt was ich meine, ja, also darfst sie fragen, ist es vielleicht ein Scherzanruf? Sagen Sie wirklich ein Problem?

Nein, gut, tschüss und das ist es halt am Ende ne für den Client wie du so schön gesagt hast. Also für mich als Anrufer, für mich als.

Ja, Nutzer einer Software, wie auch immer ne auf welcher Ebene man jetzt Client definiert, am Ende ist das Interface was ich bedienen möchte die Schnittstelle, die Funktion das gleiche und ich weiß nicht, hängt da jetzt noch n Proxy dazwischen oder hab ich Kontakt zu dem echten Service den ich verwenden möchte und das merkt man als Client nicht und das ist halt auch schon n Unterschied zu anderen Pattern.

Da hier schon mal die Anmerkung, weswegen ist halt n anderen Ansatz verfolgt, weil es für mich als Client kein Unterschied macht. Ja also. Sagen wir mal so, ich Ruf bei einem Kundenservice an und ich weiß nicht welche Rolle er da drin hat. Ist er wirklich nur ein Proxy oder ist er vielleicht schon ein Berater oder einen bearbeit Sachbearbeiter, der aber nicht meinen Fall macht und dann noch mal weiter delegiert zu dem Sachbearbeiter der meinen Fall bearbeitet?

Wie auch immer, das ist für mich, ich weiß es nicht, ich habe nur ein Problem was ich quasi über die Schnittstelle Telefon lösen möchte sozusagen, also so kann man sich das halt ganz gut vorstellen. Ja ich. Finde es ganz gut, dass du auch sagst. Weil ich dich gerade fragen wollte, wie kann man das denn

umsetzen? Ja, dass man vielleicht auch gar nicht weiß, mit wem man quasi gerade spricht, weil du halt eben dieses Interface hast und der Proxy genauso wie das eigentliche Objekt eben die beide dieses Interface

implementieren. Ne, also kannst dir das ja auch ungefähr so vorstellen, als würdest du irgendwie sagen wir mal was drucken wollen und du hast sozusagen 2 Türen ne und auf der einen Tür steht halt drauf Drucker a und auf der anderen steht drauf Drucker b. Aber du kannst halt beiden etwas

geben. Du musst halt nur irgendwie den Dateinamen geben und sagen, das möchte ich bitte gedruckt haben und am Ende ist es halt einfach nur quasi die gleiche Schnittstelle. Ne, du gibst in jede Tür, damit man sich es besser jetzt vorstellen kann, einfach nur den Dateinamen rein, ne auf dem Blatt Papier oder so und dann nimmt das jemand an und druckt das am Ende ne und also das Interface ist genau das Gleiche, das heißt dieses die Funktion

drucken ne die sozusagen das Interface halt hat haben beide.

Implementieren beide ne jetzt ist er natürlich nur sozusagen der Under The Hood ist es ja so, dass der Proxy im Endeffekt, also sagen wir mal erstmal das das echte Objekt selber ne, also der ich nenn es mal Drucker ne der druckt dann wirklich dieses Dokument ne ohne wenn und aber, also da wird eigentlich das wird einfach genommen und wird gedruckt ne OK das die Datei zack hau ich dir raus wenn du jetzt aber zum Beispiel diesen Proxy hast, dann kann der vielleicht noch unter anderem

sowas checken wie weiß ich nicht. Bist du alt genug? Hast du schon Druck? Genau. Und dann gibt der Proxy das aber im Endeffekt weiter an das echte Objekt.

So und wenn du das jetzt so in in Code hast, dann haben wir ja schon von Interfaces gesprochen, du hast den Proxy, der implementiert das Interface, du hast das echte Objekt, was das Interface implementiert, beide müssen also eine bestimmte Funktion wie zum Beispiel drucken implementieren als Beispiel. Und dann ist es aber so, dass der Proxy selber noch das echte Objekt hält und mit diesem echten Objekt arbeiten kann. Also genau das ist sagen kann

das. Ist nämlich genau der entscheidende Punkt ne, weil der Proxy wird die echte Aufgabe niemals übernehmen, er hat wird keine Business Logik beinhalten, sondern nur diese Zusatzentscheidung treffen und am Ende steht quasi die Entscheidung delegiere ich das? An den echten Service weiter also sind meine Checks bei, gehen wir mal so von Access Control Security Aspekten aus.

Ich checke zum Beispiel den Client und wenn er berechtigt ist diesen Service zu verwenden, leite ich das, delegiere ich das weiter an den echten Service, weil wie du meinst ich diese Referenz da drauf halte und dann kriegt der Client quasi vom echten Service auch eine weil also eine echte Antwort sage ich mal und nicht etwas von dem Proxy zurückgemeldet.

Wird, weil das kann ja auch sein, es kann ja sein, dass dann einfach zurückkommt, so ist nicht, darfst du nicht, ja und du als Client weißt nicht, dass der Proxy das entschieden hat, sondern kann halt genauso gut auch der echte Service entschieden haben, aber so trenne ich halt diese Ebenen mit diesem Pattern voneinander und mache es vor allem auch austauschbar, was ja auch wichtig ist, ja.

Also beispielsweise ich habe erstmal nur nen Service, weil so Access Control keine Rolle gespielt hat. Dann auf einmal kommen die Anforderungen rein und das ist ja normales Projektgeschehen sag ich mal in der Softwareentwicklung das auf einmal es heißt.

Ey du, wir müssen jetzt hier aber kontrollieren, wer das verwendet, welcher Client, wie machen wir denn das und dann sagt man sich so ha du, ich hab die Coding Buddies Folge gehört, es gibt das Proxy Pattern und genau das werden wir jetzt hier anwenden, weil wir da quasi diese Ebene einbauen. Zu entscheiden darf der Client das oder nicht und das wäre dann schon wieder n gutes Anwendungsbeispiel sozusagen.

Ich mein du kommst kommst ja relativ schnell auch an den Punkt, dass du vielleicht genau solche, also ich glaube man hat relativ schnell Momente, wo man genau das was du geschrieben hast, irgendwie in seinem Code hat und du kannst es natürlich logischerweise wie immer über verschiedenste Wege lösen.

Du kannst ja auch sagen, OK, ich mach halt, ich hau halt einfach ne ne if davor oder was auch immer und überprüfe eine bestimmte Bedingung, nur dann führe ich etwas aus und genau das ist jetzt der, also ist ja der entscheidende Unterschied. Wie möchtest du deine Software quasi aufbauen?

Designen? Nimmst du dafür ein Design pattern, um es halt eben, ich sag mal etwas schöner und halt auch ich sag mal wartbarer erweiterbarer, du kennst die ganzen Buzzwords quasi, also kannst du es, wie möchtest du es implementieren, das ist halt der der entscheidende Punkt am Ende.

Genau. OK, fassen wir noch mal kurz zusammen, bevor wir auf so reale Beispiele kommen, dass wir einfach noch mal kurz den Punkt haben, was beinhaltet dieses Pattern, also die Kernidee haben wir ja quasi besprochen und noch mal ganz klar, so als Merksatz sag ich mal der für mich auch immer wichtig ist, wenn ich an dieses Pattern denke, ich habe ne Schnittstelle für den Client, diese wird von 2 Objekten quasi implementiert von dem echten Service, also von dem echten

Objekt und von dem Proxy. Und was hier ganz klar zu differenzieren ist, und das ist der Merksatz, der Echte, das echte Objekt quasi, beinhaltet die Business Logik, diese sensiblen Operationen, wenn es um Access Control geht.

Teure Operation werden wir auch dazu kommen, ne, wenn es halt wirklich aufwendig ist das durchzuführen, dann ist n Proxy auch sinnvoll zu entscheiden, muss das jetzt gemacht werden, ja. Und der Proxy, wie gesagt checkt, ob der Client das darf, ob es notwendig ist und wenn ja, delegiert das dann an das echte Objekt um diese Berechnung

durchzuführen. So kann man das so noch mal kurz und knapp zusammenfassend, so sieht das Pad dann aus, aber jetzt ist halt die Frage warum ja also wir haben so ein paar Sachen angeteasert, schon Beispiele genannt, aber es gibt ja so sage ich mal Hauptkategorien wo man denn sich denkt so. OK, das schreit nach dem Proxy Pattern. Hau mal ein erstes raus so. Also wir hatten ja schon so ein kleines Beispiel auch genannt, also zugriffskontrolle ist ja sehr wichtig.

Bist du zum Beispiel irgendwie ein Admin oder in Anführungsstrichen nur ein einfacher User? Da gibt es vielleicht irgendwie eine interne API, die irgendwo sitzt, wo du aber von. Außen, ich sag mal als extern, wie auch immer du es nennen magst, nicht drauf zugreifen kannst. Gibt es irgendwelche Services die Security relevant sind für bestimmte Anwendungen, für

bestimmte Dinge? Also es gibt ja verschiedene Möglichkeiten, die du, die du irgendwie eventuell hast und ich finde was was Wichtiges ist halt eben oder was man ganz oft hat, ist halt eben diese diese Rollen, diese Rollen. Anwendung welche Rolle hast du? Darfst du das bestimmte? Dieses User Management darfst du bestimmte Dinge ausführen, je nachdem was du für eine Rolle beinhaltet.

Das ist halt ein häufiges, ein häufiges Thema, da hast du ja zum Beispiel auch sowas wie auch in der Netzwerkkommunikation kennt man ja sowas auch oft zum Proxy, der irgendwo dazwischen sitzt, der halt eben auch, ich sag mal bestimmte Header oder bestimmte. Ich nenn es jetzt einfach mal allgemein Zugriffsrechte überprüft. Ist es in Ordnung, darfst du hier überhaupt drauf zugreifen oder nicht und dann gegebenenfalls auch wieder delegiert weiterleitet zu der Seite die du eigentlich

erreichen möchtest. Beispielsweise ja ganz klassisch proxies ja, da in dem Fall bei dem ganzen Thema so Security Checks oder so, da hab ich irgendwie immer so diese Analogie im Kopf, dass ich mir das. Vorstelle, wie auch so im echten Leben. Wenn du beispielsweise auf einem Festival gehst oder einen Club

besuchen möchtest. Wie auch immer, dass du natürlich das Ziel hast, sozusagen dieses Konzert oder diesen Abend zu besuchen, diese Veranstaltung, ja, und du gehst hin und sagst, ich besuche das jetzt, das heißt, du kommst an, möchtest rein und der Proxy in dem Fall ist ja ganz oft, denn so eine Art Security oder so eine Eingangskontrolle, oder von mir aus auch ein Drehkreuz wie? Jetzt im Skiurlaub ob du n

Skipass hast oder nicht. Ja, aber das ist im Endeffekt da stell ich mir immer so den Proxy vor, der dann sagt Nee warte mal. Also du kannst gerne über mich das besuchen, das Festival hier ja also kein Thema, aber erstmal möchte ich bitte sehen ob du n gültiges Ticket hast in gegebenenfalls möchte ich auch noch prüfen ob du alt genug bist. Ja, und das sind so im Prinzip diese, diese klassische Security Proxy Anwendungsfall, dass du sagst ich geh da jetzt hin und ich ruf sozusagen besuche

Festival auf. Und werd dann erstmal gecheckt, aber am Ende rufe ich nur besuche Festival auf und der Security lässt mich durch und ich kann denn das Konzert beispielsweise besuchen und ich finde diese Analogie sich vorzustellen wie das dazwischen geschaltet ist zwischen dem echten Festival mich als Kleinbesucher diese Schnittstelle Proxy, dazwischen der den weiterleitet und sagt, OK darfst durch oder nee geh mal besser nach Hause, so wirst du

hier nicht reinkommen, weißt du, und das finde ich ist immer so ne ganz coole Analogie und. Der Proxy vom Berghain ne. Ja, genau, der ist ein besonders strenger Proxy. Wer kennt ihn nicht genau. Dann haben wir natürlich auch schon mal so ein bisschen angeteasert, dass wir gesagt haben, OK, es gibt ja aber auch zum Beispiel Operationen, die sehr teuer sind, ne datenbankzugriffe, aufwändige Datenbankzugriffe, Netzwerkzugriffe hattest du genannt, aber natürlich auch sowas wie.

Auf großen Daten arbeiten ja die, wo das wirklich aufwendig ist, die Daten einzulesen, zu verarbeiten, dass man sich denkt, Boah, jedes Mal das ganze oder oder oder. So brauchst du das wirklich. Also ganz ehrlich, ich kann es machen, ich kann es machen, aber bist du dir sicher, dass du das brauchst, weil das das kostet mich Echtzeit so ne.

Das ist ja das, was dein System sich denkt in dem Fall, wenn der Client sagt, Ach weißt du was, ich weiß nicht ob ich das brauche, aber les doch mal die ganze Datenbank aus hier bitte, vielleicht sind da ja Sachen drin die mich interessiert, so was genau und das ist ja auch oft so dieses lazy loading was man auch sag ich mal in der Softwareentwicklungswelt kennt und im Endeffekt hast du dann einen Proxy der sagt. Okay. Ich baue das aber erst, wenn du

es wirklich brauchst. Beweise mir, dass du das brauchst und dann bekommst du es. Oder ich lese die Daten aus, aber erst wenn du sie. Wirklich an der Stelle verwenden möchtest vorher nicht. Das ist ja, wenn du zum Beispiel auf einer auf einer Website bist und du hast irgendwo am Ende deiner Website zum Beispiel irgendwie ein Bild, aber du siehst dieses Bild aber nicht an, dann musst du es ja noch nicht laden, du musst ja nur das

Laden, was du wirklich siehst. Dann kannst du natürlich in dem Moment sagen, OK, ich mach n lazy load ne, also ich lade es

erst, also lazy ne für alle. Falls jetzt irgendjemand sagt ich weiß nicht was lazy jetzt bedeutet, also ne faul, also du du lädst halt, du machst halt nur das nötigste, ne du bist faul, du sagst OK ich lade nur dann wenn ich es wirklich brauche, das war ja damals einfach auch n Riesenthema ja so sag ich mal die ersten Websites die mit Bildern gearbeitet haben ne und du hattest einfach auch gar nicht.

Diese Netzwerkanbindung ja, dass du so viel so es klingt halt aus heutiger Sicht witzig, aber so viel Daten ja so ne Datengröße einfach downloaden konntest. Und da wurde viel mit Lazy Loading auch gearbeitet, damit die Seite sich nicht minutenlang aufbaut, ne, dass du halt performancegewinn hast, dass du so n bisschen was dem Client schon anbietest, womit er erstmal arbeiten kann und du im Hintergrund quasi immer entscheidest. Jetzt könnte es gebrauchen.

Jetzt braucht es und wieder ein bisschen mehr, aber nicht alles auf einmal. Weil du kannst natürlich sagen, ja gut, wart halt 5 Minuten, aber dann hast du alles. Das ist natürlich so von der User Experience eine absolute Katastrophe. Ja und das war damals halt ein Riesenthema und deswegen gibt es halt diese Konzepte um da noch mal so einen Kleinen. Rückblick zu geben.

Also ich finde, eigentlich sollte man an der Stelle eine bessere Netzwerkbandbreite zur Verfügung stellen und dann geht es. Ja, das das, das war die Antwort damals mit dem Modem ne und? Zieh doch einfach mehr Daten.

Ja, weil damals haben es nämlich seit nimmer lange geladen, aber ich finde das beste Beispiel für lazy loading in Real Life ja ist wenn du ein Restaurant gehst ne. Du setzt dich hin und bestellst und wartest auf dein Essen und du hast ja quasi erstmal noch nicht dein Essen. Aber dann kommt der Proxy und sagt, Na, Pass auf, du kriegst schon mal n kleinen Happen, nämlich das kleine Probierbrot. Am Anfang weißt du ja, das heißt, du kriegst schon mal n. Bisschen, aber noch nicht dein

richtiges Essen. Ja, aber das passt auch gut ne, weil du kommst als klein total ausgehungert da an und denkst dir oh ey, ich hab jetzt richtig Bock was zu essen ich hab wirklich Hunger. Bestellst was willst natürlich noch das Essen, was am längsten in der Zubereitung dauert, wo der Kellner schon sagt, ja das können wir machen, kann aber so ne halbe Stunde dauern und du denkst auch Boah bitte nicht, aber ich will es haben, ich hab es bestellt ich werd es

durchziehen, ich werd es nicht überleben aber ich will wenn ich das noch essen kann genau das Essen und dann kommt da der Proxy und gibt dir n Brotkorb mit Dips und du denkst dir boah. Damit kann ich es überbrücken. Weißt du, das ist ja genau das gleiche wie mit der Website, du stellst den Halt erstmal so ein bisschen zufrieden bevor, denn so das eigentliche Produkt kommt, was halt aufwendig in der Herstellung ist und dauert, das ist eigentlich auch eine sehr geile.

Analogie finde ich auf jeden Fall. Ich weiß, ich muss auf jeden Fall sehr schmunzeln, als ich das mal gehört habe, merke ich mir auf jeden Fall finde ich richtig gut, das beschreibt doch dieses ganze lazy loading ganz gut. Genau. Also wir hatten jetzt Security Checks oder so zugriffskontrollen sage ich jetzt mal. Dann hatten wir die dieses Lazy loading.

Was haben wir noch, na was mir da noch einfällt ist halt immer was ich vorhin so ein bisschen angerissen habe so so Zusatzfunktionen ja also die jetzt nicht irgendwas Security mäßiges sind oder irgendwelche Performance gewinne ja gut Performance spielt da auch oftmals ein bisschen rein, aber

wenn ich einfach quasi. Um die eigentliche Business Logik, die ja im echten Objekt enthalten ist, mit meinem Proxy noch Zusatzfunktion, sei es auch was einfaches wie Logging, wäre ein Beispiel ne, aber ich denke da eigentlich eher an sowas wie Caching, deswegen hatte ich dieses Videobeispiel gemacht.

Caching ist da oft ein Thema, auch so Remote Proxys ja, also da zum Beispiel bei Remote Proxys denke ich ganz oft an so Kreditkarte zum Beispiel ja. Ne Kreditkarte ist auch n super Proxy Beispiel weil das kennt jeder oder oder was heißt Kreditkarte EC Karte auch von mir aus ja also gehen wir mal in die Welt des Geldtransfers ne und ich geh jetzt in den Laden und ich hab halt kein Bock mein Geld mit mir rumzuschleppen. Das ist ja auch so n bisschen die kernfuhr Aussage dahinter.

Ich will nicht zur Bank gehen, mir mein Geld holen um dann immer mit Geld in der Tasche rumzurennen um Sachen zu kaufen ja so n bisschen OK die ganze Zeit ich weiß nicht wie es bei dir ist, aber ich bin schon Fan davon nicht immer Bargeld so mega rumzuschleppen das nervt mich auch immer zum Automaten zu gehen und da kommt ja so ne Karte super gelegen weil das am Ende nur nen Proxy ist zwischen dir.

Als Käufer und sozusagen der eigentlichen Geldtransaktion mit dem Verkäufer, weil es wirkt, und das ist jetzt so, dieser Remote Proxy dahinter. Es wirkt natürlich im echten Leben total lokal. Ne weil ich hab ne Karte in der Hand, ich hab jetzt zwar keine Geldscheine, aber ich hab ne Karte in der Hand und diese Karte lege ich jetzt da auf sein Gerät und die sagt. Bestätigt, bezahlt und er sagt, Hey, danke, dass du bezahlt hast.

Hier hast du dein Produkt, das wirkt wieso n lokale wie ne lokale Transaktion ist ja aber am Ende Remote, weil kein Netzwerk, keine Transaktion, ja wer kennt das nicht in Gebieten wo einfach der Empfang schlecht ist und der sagt du sorry meine Gerät spinnt schon wieder kleinen Moment. Kannst du bitte nach oben kommen?

Nur da können Sie zahlen, ja. Und das ist ja so Klassiker dann am Ende ne, das ist halt wie eine lokale Transaktion, wirkt aber am Ende einen Remote Prozess ist und diese Karte an sich das nur als Proxy triggert am Ende und an die eigentlichen, an den eigentlichen Bezahlvorgang weiterleitet sozusagen, das ist halt auch noch ein klassisches Beispiel, wo denn so Proxys Sinn machen. Definitiv finde ich ein sehr, sehr gutes Beispiel. Bei Remote Proxy muss ich mal.

Ich glaube das war auch so. Weiß nicht in der in der Uni oder so so richtig richtig schlechtes Beispiel mal gewesen ne du willst ne Licht anmachen, ja drückst auf den Schalter aber der das Licht geht irgendwo ganz woanders an und denkst dir so Wow sehr weit hergeholt dieses Beispiel. Ja krass, wer hat das verkabelt? Halten wir uns doch lieber an die Kreditkarte oder an die EC Karte. Das find ich sehr gut. Ja genau das sind im Prinzip so die 3 großen Anwendungsfälle, ne.

Also drittens sagen wir mal so, man kann das natürlich auch unterteilen, dass du sagst Caching ist einer Remote Proxy ist einer, dass diese Zusatzfunktion haben wir jetzt mal als dritten Punkt ja zusammengefasst. Ganz kurz, du hast ja gerade gesagt, sowas wie.

Zusatzverhalten einbauen ne, jetzt zum Beispiel mit so einem Remote Proxy oder mit Caching oder so ne wenn ich jetzt wenn ich zusatzverhalten höre ne, dann könnte man ja vielleicht irgendwie auch denken so okay warte mal decorator dekoriert mit etwas mehr, aber was ist denn jetzt vielleicht zu der? Also wie kann könnte man das denn jetzt zum Beispiel von weil wir ja auch über Decorator gesprochen hatten, davon

abgrenzen. Das ist ne gute Frage, weil das da unterscheiden sich ja jetzt die Pattern dann in einer Sache.

Also ja n Decorator ist auch immer noch n bisschen mehr ne, also wir hatten ja gesagt wir haben ne Funktionalität, wir Kapseln immer noch mehr drumherum und immer mehr und da hatten wir ja auch diese Analogie von von von der Kleidung ne immer noch ne Jacke drüber oder immer mehr den Tannenbaum schmücken oder wie auch immer was man dann nehmen möchte als Analogie der Unterschied ist wann wenn ich hier mit einem Proxy zusatzverhalten implementiere

versus ich mache das mit einem dekorator Pattern ist und das ist jetzt genau der Punkt, dass der Client darüber entscheidet. Der Client sagt so und so möchte ich mein Objekt dekorieren. Ich als Client schmücke den Tannenbaum, ich als Client entscheide, wieviel Jacken ich anziehe und immer noch eine drüber, welche Jacke ich anziehe, in welcher Reihenfolge ich die Jacke anziehe, in welcher Reihenfolge ich die Christbaumkugeln an dem Baum hänge.

Völlig egal. Aber das sind Client Entscheidungen. Ja, also ich biete dem Client die Möglichkeit darüber zu entscheiden.

Beim Proxy Pattern hatten wir ja gesagt, es ist exakt die gleiche Schnittstelle und der Client weiß nicht ob ein Proxy dazwischen hängt oder nicht und das ist der Unterschied, er kann nicht darüber, also der Client ist nicht in der Lage zu sagen Festivalbeispiel noch mal Security geh mal schön schritt zur Seite, ich gehe da nämlich jetzt einfach durch, ja weil ich will nicht kontrolliert werden, ich als client sage ich. Ich als klein sage, ich geh aufs Festival und will nicht

kontrolliert werden. Dann sagt der Proxy ja nicht, ach. So, ja Ach so o. K gut, dann dann geh durch. Ich kontrollier den nächsten, weil der weiß nicht, dass er das nicht machen muss. Ich dekorier dir deine Entscheidung. Ich darf mit meinem Bier da rein. Genau. Ganz genau. Das wäre nämlich das decorator Pattern zu sagen, ich darf rein, ich darf mein Getränk mitnehmen und meine Kumpels ohne Karte kommen auch noch mit rein und du gibst mir noch 50€

Getränkegutschein obendrauf. So, das wäre dann der Unterschied, warum nimmt man dann nicht einfach das decorator Pattern klingt viel besser, das klingt erstmal besser für die Software wäre es ja in dem Fall für die Software des Festivals eher nicht so gut, touché. Ja genau, also ähnliche Struktur. Beide delegieren weiter am Ende, aber es ist halt dieser Kernunterschied, dass du sagst, klein driven sage ich mal oder klein hat kein Mitspracherecht.

Finde ich gut. Jetzt haben wir natürlich auch das Adapterpad dann auch schon angemerkt. Der Vollständigkeit halber magst du vielleicht das mal voneinander separieren. Genau also Adapter, also ein Adapter ist ja im Endeffekt dafür, darum wie der Name ja

schon sagt, etwas zu adaptieren. Das heißt 2 Dinge zu verbinden, die nicht unbedingt füreinander ursprünglich geschaffen waren, das heißt, du hast irgendwie auf der einen Seite etwas, was sage ich jetzt mal, sagen wir mal, du kriegst irgendwie Daten rein, die irgendwie da. Da sind, wie sie sind und auf der anderen Seite können diese Daten aber gar nicht verarbeitet

werden. Das heißt, du hast irgendwo eine Stelle, die dann am Ende dafür sorgt, dass diese Daten, ich sag mal, übersetzt werden für die andere Partei, dass sie das auch versteht, und das heißt das, was der Client hat, also erwartet, der die Gegenseite erwartet etwas anderes als das, was der Client hat, aber es soll quasi gültig sein.

Weißt du, ich meine und das. Beim Proxy ist es ja halt eben, ich sag mal anders ne, also wie du ja auch schon gesagt hast, das Interface worüber du kommunizierst bleibt das gleiche, also der Client dem Client ist es eigentlich relativ egal. Ja also mit mit wem gesprochen wird, ob jetzt mit dem also du hast eine feste Anlaufstelle sag ich jetzt mal ne also. Mit der du kommunizierst.

Und Du hast ein Interface dafür. Du weißt aber nicht, ob du jetzt mit einem echten Objekt, mit einem Proxy oder wie auch immer sprichst. Bei einem Adapter ist dir relativ klar, mit wem du sprichst. Die Frage also ne was dahinter steht du. Du musst halt nur wissen welchen Adapter nehm ich um mit der mit dem mit dem Ich sprechen möchte quasi zu kommunizieren. Das heißt beim also beim Proxy weißt du ich hab ein festes Ziel wo ich hin möchte was ich gerne ansprechen möchte.

Aber was mit wem ich spreche, ist mir eigentlich egal. Wenn ich jetzt aber den Adapter nehme, dann weiß ich, dass ich vielleicht mit unterschiedlichen Akteuren sprechen möchte. Aber ich brauche eine andere Übersetzungssoftware, um halt eben an die entsprechenden Akteure zu kommen oder sie zu erreichen, sagen wir mal so. Und das das letzte was du jetzt gesagt hast, ist eigentlich wirklich so der Kernunterschied. Dass ich mit dem Adapter Pattern natürlich das Ziel verfolge,

Kompatibilität zu schaffen. Ja, also dass ich Sachen passend zueinander mache und Proxy Pattern ja eher den Einsatz hat, Sachen kontrolliert zu machen. Ja, also mein Ziel ist es ja, Sachen zu kontrollieren und nicht einfach nur zu sagen, ihr passt OK dann los, ja, das wäre ja.

Genau das Beispiel. So ne zum Beispiel jetzt noch mal das Festival. Ne, da ist ja der Sinn ne Kontrolle einzubauen und nicht zu sagen OK ihr lauft alle in dieser Schlange, ihr passt alle in diese Schlange rein in der in die Warteschlange, also dann gut dann geht durch solange ihr in dieser Schlange seid sozusagen ne und das das ist halt auch so n entscheidender Unterschied dabei also du verfolgst n ganz anderes Ziel. Während man wie gesagt beim

Adapter, wie wir meinten, immer an diese Kompatibilität denkt, ne, da spielt auch Legacy dann ganz viel ne Rolle. Ne Oh Mann ey, jetzt müssen wir irgendwie so n altsystem da noch anbinden, die Schnittstelle passt doch eigentlich gar nicht mehr na ja mach n Adapter damit die Schnittstelle wieder passt. Genau, ist ja ne ganz andere Zielsetzung, ne. Richtig. Ja, trotzdem hat jedes Pattern.

Ja, immer so vor und Nachteile ne also wir wir haben es ja jetzt sag ich mal als sehr mächtig betitelt, haben auch Vorteile und Anwendung genannt, aber lass mal noch mal einmal zusammenfassen, ich finde sowas ist immer wichtig, es hat ja immer ne Kehrseite der der diese einpattern Medaille wie man so schön sagt und es gibt also auch Nachteile also lass noch mal schauen was sind so die Vorteile und welche Nachteile stehen da gegenüber? Ja also. Ich mein Nachteile ist eigentlich.

Ich finde, es ist halt immer so ein Ding, wie ich schon meinte, so, du kannst alles mögliche programmieren, wie du es gerne möchtest. Du kannst es halt, brauchst kein Proxy, wenn du kein Proxy haben möchtest oder vielleicht nicht weiß, dass es einen gibt, weil du im Endeffekt ja alles einfach

in eine Klasse ballern kannst. Bedeutet aber gleichzeitig auch, dass du logischerweise der Nachteil, den du eigentlich immer in irgendeinem Pattern. Generell hast ist du hast irgendwie ein Overhead, du brauchst mehr Struktur, du brauchst mehr Klassen, du hast irgendwie eine gewisse Art von Abstraktion, weil du da logischerweise irgendwie ein Interface benötigt, was bei eigentlich gefühlt so gut wie allen oder bei sehr sehr vielen Pattern halt einfach der Fall

ist. Und es ist natürlich auch das Debugging ist auch etwas schwieriger oder kann schwieriger sein. Ich weiß nicht, ob das irgendjemand mal passiert ist, aber es ist total geil, wenn du

irgendwas. Debuggst und dann auf einmal ist zum Beispiel bei Weiß nicht, sagen wir mal bei Java ne, da haben wir im Studium auch mit angefangen und ich hab irgendwann damals das Debugging gelernt, ne und wollte irgendwas in nem Objekt debuggen und auf einmal findest du dich beim debuggen in irgendeinem Proxy wieder und du denkst dir was zur

Hölle passiert denn hier gerade? Also du kannst rein, da wollte ich doch gar nicht hin, das heißt du kannst irgendwo landen wo du eigentlich vielleicht gar nicht landen willst. Und wenn du da nicht weißt, was da eigentlich los ist, dann denkst du dir so okay warte mal. Ich check es nicht so.

Weißt du, das heißt, das ist natürlich ein bisschen komplexer, schwieriger, dann unter Umständen ne, ich sag nicht, das ist immer so, ist aber unter Umständen und du hast logischerweise eventuellen Performancearbeit. Also es ist natürlich, es kommt drauf an ne wenn du jetzt zum Beispiel sagst du hast ein Cash, ja dann ist es, dient es

natürlich logischerweise. Die Performance zu optimieren, aber rein laufzeittechnisch wenn du irgendwas tust, jetzt mal unabhängig vom Anwendungsfall hast du natürlich mehr Aufrufe mehr zu tun, mehr hier, mehr da zu gucken, mehr zu überprüfen, unter Umständen wie gesagt, es kommt immer ein bisschen auf die Implementierung. Naja du klar, du hast halt wenn wenn du keinen Nutzen dahinter ist und du sagst einfach nur ich verwende das Proxy Pattern um es einfach drin zu haben, weil ich

habe das gelernt und ich will das jetzt verwenden. Erzeugt es natürlich n Overhead, der sich erstmal rechtfertigen muss ne oder oder sich lohnen muss, wie zum Beispiel wie du meintest ja, aber ich möchte ja ein Caching implementieren damit und damit kriege ich über die Gesamtheit wieder ne bessere Performance hin, weil ich einfach Cache ja und nicht einfach nur n Proxy aufrufe, der am Ende auch nur den Service den Echten aufruft. Ja, das ist dann.

Richtig, einfach auch gut ab zu. Grenzen, weil sonst könnte man sagen, ja, ich hab doch gerade über Performance gesprochen. Wieso ist das jetzt? Ja, absolut absolut. Ich find auch die Banking ist n super, Stichwort weil.

Proxy das Pattern kann man ja auch verketten, man kann ja Proxys verketten, also findet man ganz oft unter Proxy chaining und das bietet Möglichkeiten, natürlich klar, also wenn du eine komplexere Logik hast, komplexere Checks oder so, dann kann ich so was ja auch verketten, das verbietet mir ja keiner, weil wie gesagt, der Client weiß ja nicht was

dahinter ist. Ob der jetzt mehrere Proxys durchläuft, bis er eigentlich irgendwann mal zu einem echten Service kommt, der seine Anfrage bearbeitet oder nicht, die.

Merkt er ja nicht. Fakt ist und das Stichwort, die Backen ist da super, wenn dann irgendwo n Fehler in der Mitte bei irgendeinem Proxy ist und du weißt gar nicht mehr, lande ich jetzt in dem Fall, wann lande ich da, was muss passieren, damit ich da überhaupt hinkomme und das sind die backen kann dann richtig richtig anstrengend werden, also da halt auch sag ich mal mit Vorsicht das Ganze genießen wenn man sagt Hey wäre aber geil wenn ich jetzt noch n Proxy dahinter hätte, weil man

jetzt so n bisschen die Vorteile gelernt hat dadurch. Und anfängt, die zu verketten. Wie gesagt, gibt es, macht man in gewissen Fällen auch, aber mit Vorsicht genießen auf jeden Fall, das wär auf jeden Fall mein Rat, weil sowas zu debacken kann halt richtig die Hölle werden. Und ja klar, mehr Struktur, mehr Abstraktion.

Was du meintest, ich finde, das ist halt immer witzig, weil das ist sowohl vor und Nachteil bei gefühlt allen Patterns wie du ja meintest, weil Hey mein Vorteil ist, ich habe mehr Struktur in meiner Software Software und mein Nachteil ist ich muss Struktur mehr Struktur aufbauen ja OK klar, also es muss sich natürlich lohnen wenn ich so kleine Skripte schreibe, dann brauche ich mit sowas nicht anfangen, wenn es keinen echten Anwendungsfall gibt wie du auch meintest ne aber.

Sobald ich irgendwie so Security Performance oder auch Legacy kann, da auch mit Reinspielen. Ja so Aspekte habe kann ich ja dieses Open Close principle dahinter ne dass ich halt von außen nicht weiß was da drin passiert ist ja n gutes Prinzip, das kann ich ja für mich nutzen an der Stelle ich kann bestehenden Code stabil halten, ich kann das ändern ohne dass ich viel anderen Code anrühren muss.

Ja, testbarkeit auch klar, sobald ich anfange mit Interfaces zu arbeiten, kann ich mir natürlich auch testimplementierung davon machen und dann wirklich sauber und ordentlich diese Software abtesten darf man ja auch nicht unterschätzen, was das für ein Mehrwert in einem Projekt gibt.

Ja, wir sind der absolute Verfechter davon, deswegen auch hier noch mal die Anmerkung, definitiv aber was was sind so typische Anfängerfehler die das gilt ja sag ich mal für viele Pattern so natürlich auch fürs Proxy pattern das. Was also ich hatte jetzt schon mal eine Sache genannt, ist so was wie triviale Skripte, kleine Logiken.

Ja, ich, ich sag ich mal, ich hab n getter, ja ich will jetzt irgend n wert haben, dann sag ich ja nicht get x zum Beispiel Moment Get X wird jetzt erstmal durch n Proxy laufen und ich werde gucken ob du x haben darfst. Ja klar dass du x haben an der Stelle es gibt. Kein Access Logic dahinter, das ist n Getta als Beispiel.

Ja, es ist halt n Getta, der ist Public Mann, weißt du also das aber ich kenn das deswegen, das ist überhaupt keine Verteufelung oder sich drüber lustig machen, sondern bei mir war es wirklich so, ich hab n Pattern gelernt und ich hab es verwendet. Und es ist meiner Meinung nach auch der richtige Weg.

Aber man sollte sich dann halt fragen, wenn man mehrere kennt, wann macht es Sinn halt so ne. Der typische Anwendungsfall, wenn du dich irgendwo hinstellst auf irgend ne Brücke und sagst, entschuldigen Sie sie dürfen hier vorbei. Ja ich weiß jeder da vorbei, aber sie dürfen auch vorbei. Ja, Sir, warten Sie bitte kurz. Das ist ne öffentliche Strafe, wird weitergehen. Ich muss das nur kurz kontrollieren. Oh Gott, ey. Aber es ist auf jeden Fall genau bei einfachen Gattern definitiv

triviale Logik oder? Weiß nicht wirklich kleine Services, die sag ich jetzt mal sehr kleinen Umfang. Sorry, die ich mir vorstelle, ich find's immer auch Scheiße. Witzig, steht dir vor, steht einer echt auf der Brücke, so entschuldigen. Sie. Ich dürfte bitte nicht Ihren Ausweis sehen. Gehen sie weiter, Oh Gott, ey. Ja, aber so, da macht's keinen Sinn. Stell ihn nicht auf die Brücke, sonst Security, wenn der da nicht zu Gott. Lass die Leute einfach drüber laufen.

Also wenn man das jetzt so kurz, ich sag mal kurz und knackig zusammenfassen will, wenn du kein Problem hast, ja nutz kein Pattern. Ja wenn du kein Security oder Performance Thema hast, nutz kein Proxy. Es macht kein lazy loading, wenn es nichts zu laden gibt. Okay. Gut, dann hauen wir doch mal so ein paar Take aways. Wir haben es jetzt gut zusammengefasst. Die vor und Nachteile genannt. Genau gibt man noch mal so abschließend paar Take.

Aways also was wir sage ich jetzt mal gelernt haben, ja aus dieser Folge ein Proxy ist ein Stellvertreter. Ey, ganz ehrlich, ich habe das ja, es ist die Übersetzung okay. Aber ich habe es noch nie als Stellvertreter in meinem Kopf also genannt. So weißt du, es ist. Es wie sagt man, ich komm nicht aufs Wort, also es macht mich

fertig. Ich rede also mit dir selbst, aber nicht so, nein, ich habe keinen Stellvertreter, der mit mir selbst redet, nein, mir fehlt das Wort, ich habe es noch nie so klassifiziert okay verstehe, ja verstehe habe ich auch lange nicht, aber irgendwann als ich es verstanden habe es gibt kein Zurück mehr jetzt. Genau also wie gesagt Proxy Stellvertreter. Er kontrolliert ja. Oder delegiert.

Oder was wir genannt hatten. Aber er arbeitet nicht, also genau, ganz wichtig, also ich nenne es jetzt mal, arbeitet nicht in der Business Logik, also diese Business Logik die stattfinden soll, das ist auch finde ich noch mal ein wichtiger Punkt, du duplizierst nicht irgendeine Logik, sondern der Proxy sagt am Ende auch wenn alles erlaubt ist.

Zum Beispiel bitte echtes Objekt, mach jetzt deine Arbeit, also diese Business Logik. Das Interface bleibt gleich, was der Proxy und das echte Objekt, beide haben ne, also beide Objekte können genau das ist immer das gleiche, ja nur dass dann im Endeffekt der Proxy wiederum aufruft, was der echt, dass das echte Objekt machen soll genau ist super, für was hatten wir gesagt, Security und Performance zum Beispiel, auch wenn es n Performance over wie sagt man Overhead bringen kann

ja aber auch da aufpassen, nein. Ihr wisst, was ich meine und gefährlich ist. Aber, und das muss man natürlich auch immer sagen, ist over Engineering, wie du auch meintest, nicht so viel Proxys ineinander hintereinander schalten, wo du dann irgendwann überhaupt nicht mehr weißt, an welchem Proxy du rechts abgebogen bist, sondern halt eben bewusst einsetzen. Also Patterns sind halt eben Werkzeuge, aber keine Pflicht, also du musst es nicht nutzen, kannst es nutzen, wenn es Sinn macht.

Genau. Genau also die bewusste Entscheidung für ein Pattern treffen mit den Argumenten

dafür. Gerade wenn man so diese vor und Nachteile, die wir ja besprochen haben, mal abwägt, kann man ja für sich entscheiden, ist das gerade ein Anwendungsfall dafür oder nicht oder gibt es vielleicht ein anderes Pattern, was eher meiner Vorstellung entspricht, wenn ich beispielsweise sage, ich möchte es kompatibel gestalten, dann ist es halt eher das Adapter Pattern, ja als wenn ich gar nicht zum Beispiel so eine Access Control machen möchte,

aber. Und das sind genau die Entscheidungen, die Fragen, die man sich stellen muss. Und deswegen, liebe Zuhörer und liebe Zuhörer, auch mal die Abschlussfrage an dich. Zu dieser Folge hast du in einem Projekt vielleicht schon mal mit einem Proxy gearbeitet, in einer Software, ohne dass du es vielleicht weißt oder bewusst

eingesetzt hast. Lass es uns gerne wissen, schreib uns auf allen Plattformen also auf, die nicht auf allen Plattformen, sondern auf der Plattform deiner Wahl so rum, du kannst es aber auch auf einen schreiben, wir freuen uns über jede Nachricht, auch wenn sie doppelt ist. Und ja, deswegen bleibt mir auch gar nicht mehr so viel zu sagen, falls der Podcast dir gefallen hat.

Liebe zuhören, lieber Zuhörer, lass gerne Bewertung da empfehlen, gerne weiter kommen, unsere Community auf unseren Discord Channel, Schau dir gerne auch unsere anderen Plattformen an, Schau auf Twitch mal vorbei in den Livestreams immer Dienstag 20:00 Uhr kommen wir zusammen, da werden auch mal Pattern auftreten wenn sie denn gebraucht werden und. Und ansonsten findest du auch in den Shownotes und Spenden Link. Wenn du sagst, der Podcast ist richtig, richtig cool.

Ich würde euch gerne beide unterstützen, dann vielen vielen Dank dafür und ansonsten würde ich sagen, hören uns alle nächste Woche wieder zu einer brandneuen Folge, habt eine schöne Zeit bis dahin, eine gute Woche und bis dahin deine Coding war. Dies gemeinsam besser die alle liefen nicht mehr egal ist wirklich gut die Mail. Was ist schon wieder, heißt es schon wieder mit Essen nicht. Wir holen uns einen Burger ab und fahren es noch von OK.

Transcript source: Provided by creator in RSS feed: download file
For the best experience, listen in Metacast app for iOS or Android