Es gibt viele AOP-Implementierungen in C #, VB.net. Dies sind einige der AOP-Implementierungen:
- PostSharp
- Schloss DynamicProxy
- LinFu
- LOOM.NET
- Aspect.NET
- Anwendungsblock für Richtlinieninjektion in Enterprise Library 3.0
- AspectDNG
- DotSpect (.SPECT)
- Das Spring.NET Framework als Teil seiner Funktionalität
- Wicca und Phx.Morph
- Eine umfassende Analyse der AOSD-Lösungen für .NET ist an der Twente University erhältlich
- Seasar.NET
- Aspekt#
- Puzzle.NAspect
- Komponieren*
- SetPoint
- NConcern .NET AOP Framework
- ...
Was ist die beste Implementierung für AOP in .Net? Was soll ich verwenden?
Antworten:
Ich denke, dass Castle Dynamic Proxy die Lösung der Wahl ist, wenn dynamisches Abfangen Ihre Anforderungen erfüllen kann. Dieses Framework wird intern von vielen anderen Frameworks verwendet, die AOP-Funktionen anbieten möchten. In der Regel bieten die meisten vorhandenen IoC-Container jetzt einige dynamische Abfangmechanismen (Spring.NET, Castle Windsor, StructureMap usw.). Wenn Sie bereits mit einem IoC-Container arbeiten, ist es möglicherweise einfacher, die darin enthaltenen Vorschläge zu überprüfen.
Wenn das dynamische Abfangen Ihre Anforderungen nicht erfüllen kann (Weben einer versiegelten Klasse, Abfangen nicht virtueller Anrufe usw.), möchten Sie auf jeden Fall statisches Weben. PostSharp ist die Referenz in dieser Domäne.
Beachten Sie, dass es auch Linfu gibt, mit dem beide AOP-Moden genutzt werden können.
quelle
"Best" ist subjektiv.
Erstellen Sie zunächst eine Liste der von Ihnen benötigten Funktionen, Ihrer Architektur usw. Suchen Sie dann nach Optionen, die das tun, was Sie benötigen, ohne unnötige Komplexität einzuführen. Einige sind beispielsweise schnittstellenorientiert: Ist Ihr Code derzeit schnittstellenorientiert? Wenn nicht, ist PostSharp möglicherweise die bessere Wahl (in die ursprünglichen Klassen eingewebt). Aber natürlich kann PostSharp nicht zur Laufzeit konfiguriert werden ... Pferde für Kurse.
quelle
Der beste Weg zur aspektorientierten Programmierung in .NET ist die Verwendung bekannter Designtechniken. Durch die Anwendung der SOLID-Prinzipien können Sie beispielsweise die Flexibilität und Modularität erreichen, die Sie benötigen, um Querschnittsthemen hinzuzufügen. Wenn Sie das richtige Design haben, können Sie sogar die meisten Querschnittsthemen ohne Rahmen anwenden. Es ist ein Trugschluss zu glauben, dass OOP nicht für AOP geeignet ist.
Hier sind einige Hinweise:
Wenn Sie die richtigen Abstraktionen eingerichtet haben, müssen Sie dem System nur neue Querschnittsthemen hinzufügen, indem Sie eine neue Dekorationsklasse schreiben und sie um die richtigen Implementierungen wickeln. Wenn Abstraktionen generisch sind, können Sie einen einzelnen Dekorateur um eine große Gruppe von Klassen wickeln (genau darum geht es bei AOP).
Obwohl Techniken wie dynamische Proxys und das Weben von Code das Arbeiten mit einer schlecht gestalteten Anwendung erleichtern könnten, gibt es für gutes Design wirklich keine Alternative. Früher oder später werden Sie sich verbrennen. Dies bedeutet jedoch nicht, dass die dynamische Proxy-Generierung und das Weben von Code nicht verwendet werden sollten. Aber ohne ein richtiges Anwendungsdesign sind selbst diese Techniken nur unwesentlich hilfreich.
quelle
Ich weiß nicht, was am besten ist, es gibt viele Frameworks und nicht genug Stunden am Tag, um sie alle auszuprobieren.
Ich habe PostSharp verwendet und war angenehm überrascht, wie einfach es ist, damit zu beginnen.
Ich habe mich auch mit Castle Windsor und Spring.Net mit AOP befasst. Der Ansatz ist unterschiedlich (Laufzeit vs. Kompilierungszeit). Das Mischen von AOP und IoC scheint sinnvoll zu sein. Wenn Sie noch keines dieser Frameworks verwenden, ist es viel mehr Arbeit, um loszulegen, aber lassen Sie sich davon nicht aufhalten.
Für neue Projekte würde ich jetzt wahrscheinlich Castle Windsor verwenden, aber das liegt hauptsächlich daran, dass ich auch IoC verwenden möchte. Wenn ich AOP schnell in eine vorhandene Codebasis implementieren müsste, würde ich PostSharp verwenden.
quelle
Es gibt auch Policy Injection und Unity Interception von Microsoft.
quelle