|
Dieses Pattern beschreibt die Realisierung eines Proxy-Objekts für beliebige Objekte des EER-Modells. Das Proxy-Objekt ermöglicht einen transparenten Zugriff (schreibend und lesend) auf die Attribute des Originals. Berechnungen auf diesen Attributen sind ebenfalls möglich.
Sollen Instanzen eines zusammenhängenden EER-Modells partitioniert auf verschiedene Prozesse oder Rechner verteilt werden, so ist es an den Partitionsgrenzen oft notwendig, daß die nun getrennten Nachbarobjekte weiterhin Zugriff auf die Attribute des anderen Objekts erhalten. Einige Objekte des Modells müssen für Beobachtungs- und Steuerungszwecke ebenfalls global verfügbar sein.
Von jedem Objekt des EER-Modells sind Proxy-Instanzen zu bilden. Das Objekt muß bei der Modellierung lediglich mit dem AttributeProxy -Pattern versehen werden.
Dieses Pattern fällt im Vergleich zu den anderen Patterns ein wenig aus dem Rahmen. Es stellt sich sogar die Frage, ob man es im Rahmen der Entwurfsmethode als Pattern des Kataloges betrachten soll. Es wird lediglich an ein Objekt, dem target gebunden und erzeugt keinerlei Methoden, die für Bindungen mit anderen Patterns zur Verfügung stehen. Alle Attribute (deren Zugriffsmethoden) des targets bekommen aber eine andere Bedeutung.
Die Bindung dieses Patterns erzeugt in PSiGene für Smalltalk eine Unterklasse, welche die Attributzugriffe bei Bedarf (falls die aktuellen Werte nicht vorliegen) über den Broker umlenkt. Instanzen von target registrieren sich zu Beginn (PSiGene generiert init -Methode) beim Broker und propagieren Änderungen der Attribute über diesen. Weiterhin wird für target eine Methode asProxy erzeugt. Diese ermöglicht die Konvertierung einer Instanz zu einer Proxy-Instanz. Sie kann für die Erstellung und Partitionierung der Gebäudestruktur genutzt werden.

Dieses Pattern wurde für eine Aggregation durch das Pipe -Pattern entwickelt. Es kann aber auch einfach an einen (fast) beliebigen Objekttyp gebunden werden.
Die Methode wird für target erzeugt und kann von einem Partitionierungswerkzeug zur Konvertierung von Original- in Proxy-Instanzen genutzt werden.
"Erzeugt auf der Basis des receivers eine eine Proxy-Instanz von {proxyTargte}." | p | p := {proxyTarget} new. p bid: bid. p {attr} := {attr}. ... ^ p
Die folgende Methode stellt einen Ausschnitt aus der Pattern-Initiaisierung von PSiGene dar.
"Ergaenzt die initialisierung des receivers um eine Registrierung beim Broker." ... self isProxy ifTrue: [Broker registerProxyInstance: self] ifFalse: [Broker registerInstance: self]. ... ^ super init
Die folgenden beiden Methoden werden für jedes Attribut von target bei proxyTarget erzeugt.
"Liefert den Wert von {attr}. Falls dieser nicht gueltig ist, wird er ueber den Broker angefordert." {attr}A isNil ifTrue:[{attr}A := Broker getAttribute: #{attr} forInstance: bid]. ^ {attr}A
"Setzt den Wert von {attr}. Zuvor wird dies aber bei der Original-Instanz durchgefuehrt und nur wenn das erfolgreich war, wird der Wert auch lokal gesetzt." (Broker setAttribute: #{attr} forInstance: bid to: aValue) ifTrue:[{attr}A := aValue]. ^ {attr}A
Die Methoden für die schreibenden Attributzugriffe bei den Original-Instanzen werden von MPOK, dem Smalltalk-80 ADT-Generator erzeugt, wenn man die Code-Variante Custom wählt.
"Setzt einen neuen Wert fuer {attr} und propagiert diesen zu allen Proxies." ... {attr} := aValue. self changed: #attribute with: {attr}.. ... ^ aValue
Broker und Proxy aus [BMR96] ( http://wwwagz.informatik.uni-kl.de/projects/SFB501/D1/PSiGene/publications.shtml#BMR96 ).