4 Stimmen

Was sind die funktionalen Unterschiede zwischen AspectJ und PostSharp?

Weiß jemand, welche AOP-Funktionen zwischen AspectJ und PostSharp unterschiedlich sind (ja, ich weiß, sie sind für verschiedene Sprachen und Plattformen)?

Ich versuche zu verstehen, welche Art von Dingen AspectJ erlauben würde, die PostSharp nicht erlaubt und umgekehrt.

4voto

Gael Fraiteur Punkte 6664

PostSharp 2.0 ist viel näher an AspectJ als PostSharp 1.5 es war. Der Vergleich von PostSharp 1.5 mit Spring AOP war gerechtfertigt, ist es aber nicht mehr bei PostSharp 2.0.

Dennoch gibt es einige starke Unterschiede im Ansatz.

  1. Der Ansatz für Pointcuts ist radikal anders. AspectJ bietet eine komplexe Pointcut-Sprache. PostSharp bietet ein einfaches deklaratives Pointcut-System けど ermöglicht es Ihnen, imperative Pointcuts zu entwickeln, so dass Sie Code schreiben können (typischerweise unter Verwendung von System.Reflection), der den Pointcut zur Kompilierzeit auswertet. Anstelle einer Pointcut-Sprache unterstützt PostSharp also einfaches C# oder Linq.

  2. Es gibt in der Tat keine bedingte Punktverknüpfung (cflow).

  3. PostSharp unterstützt Semantiken höherer Ordnung, wie Ereignisse und Eigenschaften. AspectJ, soweit ich weiß, nicht (da es kein Ereignis oder Eigenschaft in Java afaik).

  4. PostSharp-Aspekte werden typischerweise zur Build-Zeit instanziiert und initialisiert, dann in die Assembly serialisiert und zur Laufzeit deserialisiert, um ausgeführt zu werden. Dadurch kann der Aspekt zur Erstellungszeit "initialisiert" werden, so dass die Laufzeitleistung besser ist. Es ermöglicht auch die Ausführung beliebig komplexer Logik zur Erstellungszeit (typischerweise Initialisierung, Pointcut-Auswertung, Joinpoint-Validierung).

  5. PostSharp bietet echte Unterstützung für die Aspektkomposition, d.h. Sie können mehrere Aspekte oder Ratschläge auf denselben Verknüpfungspunkt auf prädiktive Weise anwenden. PostSharp ist für ein Multi-Vendor-Szenario konzipiert, in dem mehrere Aspekt-Anbieter nichts voneinander wissen. Es verfügt über ein komplexes System von Abhängigkeiten, in dem die Entwickler/Anbieter von Aspekten deklarativ die Reihenfolge von Einschränkungen, Anforderungen und Konflikten angeben können.

Ab Version 2.0 verfügt PostSharp über IDE-Werkzeuge, die teilweise die Funktionalität von "AJDT" für Eclipse abdecken.

2voto

James Black Punkte 41034

Aus ihrer Dokumentation von PostSharp: http://doc.postsharp.org/1.5/##PostSharp.HxS/UserGuide/Laos/AspectKinds/Overview.html

Unterstützte Arten von Verbindungspunkten: http://doc.postsharp.org/1.5/##PostSharp.HxS/UserGuide/CoreLibrary/CodeWeaver/Overview.html

AspectJ bietet sehr viel mehr Flexibilität, da die Verknüpfungspunkte deutlich komplexer sein können, um das zu erreichen, was Sie wollen.

Es scheint, dass cflow, zum Beispiel, kann nicht mit PostSharp getan werden.

Ähnlich wie Spring ist es eine abgespeckte Version von AOP, um die Verwendung zu vereinfachen.

Update: Obwohl ich nicht glaube, dass es vollständig aktualisiert ist, ist dies eine gute Vorstellung davon, was AspectJ unterstützt: http://www.eclipse.org/aspectj/doc/released/progguide/index.html

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X