|
1 | 1 | ## \faicon{thumbs-up} Motivation |
2 | | -Ein sehr simples Beispiel, warum man den Zugriff zu einem Objekt kontrollieren möchte, ist ein virtueller Proxy zum |
3 | | -verzögerten Nachladen eines Bildes (Lazy Loading). Es ist nicht immer notwendig, dass wir das Bild bereits beim |
4 | | -Instanzzieren des Objekts in den Speicher laden. Nehmen wir an, dass das Bild auf einer Website im unteren Bereich |
5 | | -angezeigt werden soll (below the fold). Beim Laden der Website ist es nicht notwendig, bereits alle Bilder auf der |
6 | | -Website zu laden - es reicht vollkommen aus, diese Bilder zu laden, welche im sichtbaren Bereich der Website sind. |
7 | | -Die folgende Abbildung zeigt das Lazy-Loading anhand einer kürzlich verwendeten horizontalen Scrollbar. |
8 | | - |
9 | | - |
| 2 | + |
| 3 | +### Langweilig - die Erste: Sicherer Browser dank Zugriffsproxy |
| 4 | +Stell dir mal vor, dass Du einen sicheren Browser entwickeln möchtest, welcher aus Kostengründen allerdings z.B. bereits |
| 5 | +vorhandene Browser-Schnittstellen im Hintergrund verwenden soll. Damit die Nutzer deines Browsers vor Datendiebstahl |
| 6 | +geschützt sind, soll dein Browser nur sichere HTTPS-Verbindungen erlauben und alle unsicheren HTTP-Verbindungen |
| 7 | +blockieren. Da der Quelltext deiner Engine allerdings nicht verändert werden kann/darf (z.B. aus Lizenzgründen), |
| 8 | +kannst Du die Zugriffsbeschränkung auf HTTPS nicht einfach so in das Ursprungsobjekt einfügen. Jetzt kommt dein |
| 9 | +_Zugriffsproxy_ ins Spiel: Er kontrolliert den Zugriff auf den relevanten Teil der Browser-Schnittstelle (hier das Subjekt) |
| 10 | +und delegiert alle weiteren Methodenaufrufe direkt an das Subjekt weiter. Somit muss der Quelltext deiner geplanten |
| 11 | +Engine nicht verändert werden und alle sind glücklich! |
| 12 | + |
| 13 | +### Motiviert - die Zweite: Lazy Loading mit virtuellem Proxy |
| 14 | +Ein weiteres sehr simples Beispiel, warum Du den Zugriff zu einem Objekt kontrollieren möchtest, ist ein _virtueller Proxy_ zum |
| 15 | +verzögerten Laden eines Bildes (Lazy Loading). Es ist nämlich nicht immer notwendig, dass ein Bild bereits beim |
| 16 | +Instanzzieren eines Objekts in den Speicher geladen werden muss. |
| 17 | + |
| 18 | +Stell dir vor, dass Du ganz viele Bilder auf deiner Werbe-Website deines sicheren Browsers hast. Da viele dieser Bilder |
| 19 | +im unteren unsichtbaren Bereich ("below the fold") sind, ist es beim Laden der Website nicht sinnvoll, noch nicht sichtbare Bilder |
| 20 | +deiner Website zu laden - es reicht also, dass nur diese Bilder geladen werden, die aktuell tatsächlich im sichtbaren |
| 21 | +Bereich der Website sind. Die folgende Abbildung zeigt das Lazy-Loading anhand einer kürzlich benutzten |
| 22 | +horizontalen Scrollbalken: |
| 23 | + |
| 24 | + |
| 25 | + |
| 26 | +Das Laden des realen Bildes (also das Subjekt) wird also in diesem Beispiel durch einen Stellvertreter vertreten (Proxy) |
| 27 | +und der Zugriff auf das tatsächliche Objekt wird soweit verzögert, bis er wirklich erst notwendig ist. |
| 28 | + |
| 29 | +### Hochmotiviert - die Dritte: Reporting der Downloads dank Remote-Proxy |
| 30 | +Da du natürlich am Ende des Tages wissen möchtest, ob dein sicherer Browser von den Nutzer tatsächlich heruntergeladen |
| 31 | +wird, hast du dir bei der Planung der Website bereits einige Download-Statistiken überlegt: |
| 32 | + |
| 33 | +- Datum |
| 34 | +- Uhrzeit (in Stunden) |
| 35 | +- Endgerätetyp |
| 36 | + |
| 37 | +Diese Statistiken werden über die Downloads über deine Website generiert. Da du den Browser aber noch zusätzlich |
| 38 | +auf Download-Portalen anbietest, musst du diese Zahlen natürlich ebenfalls in deine Statistik miteinbeziehen. |
| 39 | +Alle Download-Portale bieten dir API-Schnittstellen an, welche ebenfalls die oben genannten Daten liefern. |
| 40 | +Mithilfe des Proxy-Objekts kannst du nun in die ursprüngliche Zugriffkontrolle des Statistik-Objekts eingreifen und z.B. |
| 41 | +die Eigenschaften des Objekts auf die von der jeweiligen API-Schnittstelle zur Verfügung gestellten Daten setzen. |
| 42 | +Weitere Methoden vom Proxies werden dann einfach an das eigentliche Reportobjekt (unserem Subjekt) delegiert. |
| 43 | + |
| 44 | + |
0 commit comments