Frage

Es gibt eine Menge von AOP Implementierung in C #, VB.net. das ist etwas von AOP Implementationen:

Was ist die beste Implementierung für AOP in .net? Was sollte ich verwenden?

War es hilfreich?

Lösung

ich denke, dass Castle Dynamische Proxy die Lösung der Wahl, wenn dynamische Abfangen kann Ihre handhaben muss. Dieser Rahmen wird intern von vielen anderen Frameworks verwendet, die AOP-Funktionen anbieten wollen. Typischerweise stellen die meisten der bestehenden IoC Container nun einige dynamische Abhörmechanismen (Spring.NET, Schloss Windsor, StructureMap, etc.) Wenn Sie bereits mit einem IoC-Container arbeiten, vielleicht könnte es einfacher sein, zu schauen, was es schlägt.

Wenn die dynamische Abfangen kann nicht Ihre Bedürfnisse eingehen (Weben Klasse versiegelt, nicht-virtuellen Aufruf abfängt, etc.), dann möchten Sie sicherlich statische Weben. Postsharp ist die Referenz in diesem Bereich.

Beachten Sie, dass es existiert auch Linfu , die verwendet werden können sowohl AOP Moden zu nutzen.

Andere Tipps

"Best" ist subjektiv.

Zuerst ziehen eine Liste der Features, die Sie benötigen, Ihre Architektur usw. Dann suchen Sie nach Möglichkeiten, die das tun, was Sie brauchen, ohne unnötige Komplexität einzuführen. Zum Beispiel, mehrere sind Schnittstelle orientiert: ist Ihre Code zur Zeit orientierte Schnittstelle? Wenn nicht, könnte Postsharp eine bessere Wahl sein (wobei in die ursprünglichen Klassen spinnt). Aber natürlich kann Postsharp nicht zur Laufzeit ... Pferde für Kurse konfiguriert werden.

Der beste Weg, aspektorientierte Programmierung in .NET zu tun ist, durch bekannte Design-Techniken. Zum Beispiel, indem die SOLID Prinzipien die Flexibilität und Modularität, damit Sie müssen erreichen Hinzufügen Querschnitt betrifft. Wenn Sie das Design Recht haben, werden Sie sogar in der Lage sein, die meisten Querschnittsthemen ohne Rahmen anzuwenden. Es ist ein Irrtum zu glauben, dass OOP zu tun AOP nicht geeignet ist.

Hier sind einige Hinweise:

  • Verlassen Sie sich nicht auf konkrete Fälle, sondern hängen von Abstraktionen.
  • Sie keine unterschiedlichen Querschnittsthemen und Geschäftslogik in der gleichen Klasse.
  • Hinzufügen von Querschnittsthemen von Klassen mit Business-Logik in Klassen Einwickeln, die diese Bedenken implementieren ( Dekorateure ).
  • Finden gemeinsame Artefakte in Ihrem Design und modellieren sie gleich, vorzugsweise die gleiche Art von Abstraktionen verwenden. Schauen Sie sich auf dieser und diese zum Beispiel.

Wenn Sie die richtigen Abstraktionen an Ort und Stelle haben, das Hinzufügen neue Querschnittsthemen in dem System ist nur eine Frage der Erstellung eine neue Dekorateur Klasse zu schreiben und es um die richtigen Implementierungen wickelt. Wenn Abstraktionen generisch sind, können Sie eine einzelne Dekorateur um eine große Gruppe von Klassen wickeln (das ist genau das, was AOP ist etwa).

Obwohl Techniken wie dynamische Proxies und Code Weben könnten es einfacher machen, mit einer schlecht gestalteten Anwendung zu arbeiten, gibt es wirklich keine Alternative für gutes Design. Früher oder später werden Sie verbrannt. Dies bedeutet nicht, dass eine dynamische Proxy-Generierung und Code Weben sollte allerdings nicht verwendet werden. Aber ohne eine ordnungsgemäße Anwendung Design auch nur diese Techniken werden marginal nützlich.

Ich weiß nicht, über die besten, es gibt eine Menge von Frameworks und nicht genug Stunden am Tag, um zu versuchen, sie alle.

habe ich Postsharp verwenden und war angenehm überrascht, wie einfach es ist, mit ihm zu beginnen.

Ich sah auch in AOP mit Schloss Windsor und Spring.Net, ist der Ansatz anders (runtime vs Kompilierung). Mischen AOP und IoC scheint Sinn zu machen. Wenn Sie nicht eine dieser Frameworks aber es ist viel mehr Arbeit zu beginnen, aber lassen Sie sich nicht, dass Sie aufhören.

Für neue Projekte jetzt würde ich wahrscheinlich Schloss Windsor verwenden, aber das ist vor allem, weil ich auch IoC verwenden wollen würde. Wenn ich schnell AOP in eine vorhandene Codebasis implementieren musste ich würde verwenden Postsharp.

Es gibt auch Politik Injection und Unity Interception von Microsoft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top