Foundations for Professionals .NET Professionals im Profil guide to C# guidgen.de

Blog

Nutze den Augenblick
und teile der Welt mit, was Du zu sagen hast.

Sinn und Zweck von AOP

Sonntag, 1. März 2009, 09:37 Uhr
Permalink | Kommentare (6) | Kommentare als RSSRSS

Am 13. Oktober 2008 haben Peter Bucher und ich unter dem Titel Noch Fragen, Bucher? Ja, Roden! angekündigt, jeweils zum ersten eines jeden Monats einen Kommentar zu einem vorab gemeinsam gewählten Thema verfassen zu wollen. Bisher sind in dieser Reihe folgende Kommentare erschienen:

Heute, am 1. März 2009, ist es nun wieder so weit, und unser Thema für diesen Monat lautet:

Sinn und Zweck von AOP

So wohl Peter wie auch ich haben uns unabhängig voneinander im Vorfeld unsere Gedanken gemacht, wie wir diesem Thema gegenüberstehen. Peters Kommentar findet sich zeitgleich in seinem Blog, folgend nun mein Kommentar zu diesem Thema:

Die aspektorientierte Programmierung (AOP) ist ein verhältnismäßig junges Programmierparadigma, das in gewisser Weise als Weiterentwicklung und Ergänzung der objektorientierten Programmierung gelten kann. Die der aspektorientierten Programmierung zu Grunde liegende Erkenntnis ist, dass eine Anwendung nicht nur solchen Code enthält, der sich direkt auf funktionale Anforderungen bezieht.

Statt dessen enthält jede Anwendung auch Infrastrukturcode, der den funktionalen Code um weitere Aspekte ergänzt. Diese Aspekte ergeben sich häufig aus den nicht-funktionalen Anforderungen und betreffen in der Regel Themen wie beispielsweise Sicherheit, Validierung, Transaktionen, Logging, Caching, ...

All diesen Themen ist gemein, dass sie für eine qualitativ hochwertige Anwendung notwendig sind, dass sie ohne den funktionalen Code jedoch nicht genügen, um eine eigenständige Anwendung zu formen. Als weitere Gemeinsamkeit kann genannt werden, dass es häufig nicht möglich ist, diese Aspekte genau einer Schicht zuzuordnen.

Da diese Aspekte also die vorhandenen Schichten vertikal schneiden, werden sie auch als Crosscutting Concerns bezeichnet, während der funktionale Code die Core Concerns abbildet. Die Frage, die mit Hilfe der aspektorientierten Programmierung beantwortet wird, lautet, wie diese Crosscutting Concerns isoliert entwickelt und an entsprechender Stelle effizient in die Anwendung injiziert werden können.

Die Sicht auf die aspektorientierte Programmierung hat sich dabei in den vergangenen Jahren drastisch verändert. Galt das Thema noch vor wenigen Jahren als ausgesprochen elitär, ist es inzwischen dank entsprechender Werkzeuge auf dem besten Weg, zu einer Commodity zu werden: In meinem Eintrag Architektur lernen habe ich bereits auf PostSharp und das zugehörige LAOS-Framework verwiesen, die .NET um einen Postcompiler und ein entsprechendes Framework zur aspektorientierten Programmierung erweitern.

Warum lohnt also die Beschäftigung mit aspektorientierter Programmierung? Die Antwort liegt auf der Hand, denn die aspektorientierte Programmierung vereinfacht und verkürzt die Entwicklung von Software in verschiedenen Phasen:

  • Planung: Um aspektorientierte Programmierung effizient einsetzen zu können, müssen potenzielle Aspekte zunächst identifiziert werden. Die Beschäftigung mit dieser Frage führt damit automatisch zu Überlegungen über die Architektur der zu entwickelnden Anwendung, potenziell allerdings unter einem neuen Blickwinkel, wodurch weitere Erkenntnisse über die Tragfähigkeit einer Architektur gewonnen werden können.
  • Entwicklung: Da die einzelnen Aspekte isoliert und unabhängig von der eigentlichen Anwendung entwickelt werden, sinkt der Entwicklungs- und Integrationsaufwand. Zudem können die Aspekte in eine eigenständige Komponente verpackt und für verschiedene Anwendungen wiederverwendet werden. Last but not least muss ein Aspekt unabhängig davon, wie oft er in einer Anwendung genutzt wird, nur einmal entwickelt werden, und kommt somit der Einhaltung des DRY-Prinzips entgegen.
  • Test: Aus den gleichen Gründen sinkt auch der Testaufwand für Aspekte, denn diese können unabhängig von einer Anwendung isoliert getestet werden. Da Aspekte zudem nur einmal entwickelt, aber mehrfach in die Anwendung injiziert werden, reichen einige wenige Tests aus, die in Konsequenz aber weite Bereiche der Anwendung abdecken.
  • Wartung: Schlussendlich muss bei einer Änderung eines Aspekts nur eine Codestelle geändert werden, was wiederum den vorigen Punkten zu Gute kommt - lediglich in einer neuen Iteration.

Doch wo Licht ist, gibt es bekanntlich auch Schatten: Eines der größten Probleme der aspektorientierten Programmierung ist derzeit, dass es (noch) keinen standardisierten Weg gibt, wie sie umgesetzt werden soll. Es fehlen etablierte Prinzipien, wie sie beispielsweise für die objektorientierte Programmierung existieren, die bei der Umsetzung helfen. Hier wird die Zukunft zeigen müssen, wie Best Practices aussehen werden und welche Ideen tragfähig sind.

Diesen Nachteilen zum Trotz überwiegen dennoch die Vorteile dermaßen deutlich, dass die Beschäftigung mit der aspektorientierten Programmierung in jedem Fall bedenkenlos empfohlen werden kann.

Kommentare

Kommentar schreiben


(Zeigt dein Gravatar icon)  

  Country flag

biuquote
  • Kommentar
  • Live Vorschau
Loading