Skip to content

Commit 51efb9e

Browse files
author
janschloesser
committed
📝 💬 Add multiple examples of different proxy usages for motivation
1 parent 0595741 commit 51efb9e

File tree

1 file changed

+43
-8
lines changed

1 file changed

+43
-8
lines changed
Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,44 @@
11
## \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-
![Beispiel des Lazy-Loading anhang einer vertikalen Scrollbar](../assets/images/lazyloading.jpg)
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+
![Beispiel des Lazy-Loading anhang einer vertikalen Scrollbar](../assets/images/lazyloading.jpg)
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

Comments
 (0)