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.