Archiv des Tags ‘Aspektorientierte Programmierung’

Rapier-Loom.NET

Samstag, den 5. Juli 2008

Leider ist es schon wieder einige Zeit her, als ich mein letzter Blogeintrag geschrieben habe. Naja manchmal hat man einfach sonst viel zu viel zu tun ;)

Was ist Rapier-Loom.net

Bei RapierLoom.NET um einen dynamischen Weber für Aspektorientierte Programmierung unter .NET. Das bedeutet, dass Verwebungsentscheidungen erst zur Laufzeit (beim Instanziieren) getroffen werden können. Es ist also möglich, erst während der Programmausführung zu bestimmen, welche Aspekte eingewoben werden sollen, beziehungsweise ob überhaupt Aspekte eingewoben werden sollen. Realisiert wird dies alles durch das Factory- und das Proxy/Decorator-Konzept.

Bei der Instanziierung einer Zielklasse (Typ, in den Aspekte eingewoben werden sollen) werden die einzuwebenden Aspekte (bzw. „Aspektklassen“) also explizit angegeben. Als nächstes verwebt der Weber Ziel- und Aspektklassen an definierten Punkten und man erhält ein Objekt der Verwebungsklasse.

Funktionsweise

In den Aspektklassen befinden sich so genannte Aspektmethoden. Diese können mit bestimmten Methoden in der Zielklasse verwoben werden und definieren Verbindungspunkte, die angeben, an welchen Zielklassen, wo dort und wie sie mit der Zielklassenmethode verwoben werden. Zielklassen müssen dabei entweder virtuell sein oder in einem Interface deklariert sein. Dabei ist anzumerken, dass wegen des Proxy-Konzeptes nur Methoden verwoben werden können. Eigenschaften** werden beim Kompilieren jedoch in Methoden umgesetzt, sodass man auch auf Objektzugriffe Aspekte anwenden kann – sofern diese über Eigenschaften realisiert sind.

Ziel- und Aspektklassen müssen dabei nicht als Quelltext vorliegen. Es ist ebenso möglich, Typen aus bereits kompilierten Assemblies als Ziel- bzw. Aspektklasse zu benutzen. Somit ist man auch nicht an eine bestimmte Programmiersprache gebunden, man kann jede beliebige .NET-Sprache benutzen. Durch das Factory-Konzept und die Verwendung von Attributen zur Deklaration von Verwebungspunkten sind auch keine Spracherweiterung oder Benutzung eines speziellen Compilers nötig.

Tutorial

http://www.mycsharp.de/wbb2/thread.php?threadid=32405