Gestern habe ich einen interessanten Weblogkommentar zu Thema Aspektorientierter Programmierung (AOP) gelesen, in dem er einige seiner Bedenken gegen dieses Thema formuliert.
Ich beschäftige mich jetzt schon seit mehr als 5 Jahren mit diesem Thema. Schon
damals habe ich keinen Wirklich wichtigen Einsatz für die Technik gefunden und
ich sehe ihn heute immer noch nicht. Vielleicht bringt AOP in einigen sehr eng
abgesteckten Nischendomänen wirklich etwas. Das Gros der Entwicklung wird komplexer
und für die Entwickler unübersichtlicher.
Zum einen müssen die Entwickler neue Schlüsselwörter kennen lernen. Sie müssen die
neuen Sematiken begreifen und sie müssen verstehen, dass ihre Software Dinge tut,
die sie eigentlich gar nicht tuen soll. Auch finde ich, dass viele der mit AOP
addressierten Probleme mit konventionellen OO-Techniken erledigt werden können.
Manchmal frage ich mich, ob das gute alte Dectorator-Pattern in Vergessenheit
gerät ob des ganzen AOP Hypes.
Auch kann ich mich mit dem Pre- und Postcondition Tests nicht anfreunden. Hierfür eignet sich auch das assert Schlüsselwort in Java. Dieses ist zwar nicht so mächtig wie beispielsweise AspectJ, reicht allerdings für den Alltag vollkommen aus, wenn es denn überhaupt verwendet wird. Ansonsten sollten natürlich Tests prüfen, ob der Vertrag der Klasse eingehalten wird. Und dieser Vertrag muss natürlich der Methodensignatur und in den Javadoc beschrieben werden un sollte es nicht noch zusätzlich in einem Aspekt. Die Überprüfung des Vertrages sollte ebenfalls dirket in einer Methode erfolgen. Wenn der Code ausserhalb liegt, dann gibt es irgendwann wieder zu zerfasertte include Systeme wie in C. Nicht gerade ein Gewinn. Schliesslich schätze ich an Java auch, dass alles in einer Datei liegt und es eben keinen Präprozessor gibt.
Am allerschlimmsten finde ich allerdings, das AOP das Konfigurationsmanagement und die Fehlersuche schwieriger macht. Ich debugge eine Klasse und weiss merke erst sehr spät, dass der eigentlich Fehler gar nicht inder Klasse liegt, sondern vielleicht in dem eingewebten Code. Was passiert jetzt? Im Grunde müssen alle Klassen und Systeme, die den eingewebten Code verwenden neu übersetzt werden. Dies kann sich in einem realen Produktionssystem schon manchmal als sehr schwierig herausstellen.
Alles in allem Denke ich, dass AOP ein Hype ist und nicht allzuviel bringt. Es wird seine Nische finden. Vielleicht übersehe ich aber auch noch ein entscheidendes Detail. Aber ich vermute nicht. Und scheinbar geben mir die Kommentare zu Krilills Kommentar zu AOP recht.
