2008-09-15 11 views
12

Ich habe einige grundlegende AOP-Stil-Lösungen für Querschnittsthemen wie Sicherheit, Protokollierung, Validierung usw. verwendet. Meine Lösung hat sich um Castle Windsor und DynamicProxy. Ich bin diesen Weg gegangen, weil ich alles mit einer Boo-basierten DSL anwenden kann und meinen Code von Attributen frei halten kann. Mir wurde am Wochenende gesagt, ich solle mir PostSharp ansehen, da es eine "bessere" Lösung sei. Ich habe mich kurz mit PostSharp beschäftigt, aber ich bin durch die Verwendung von Attributen verärgert.Anwenden AOP

Hat jemand beide Lösungen ausprobiert und würde gerne ihre Erfahrungen teilen?

Antwort

9

Ich habe Castle-Windsor nur für eine kurze Zeit angeschaut (noch), also kann ich dazu nichts sagen, aber ich habe postsharp benutzt.

Postsharp funktioniert durch Weben zur Kompilierzeit. Es zeigt einen Post-Compile-Schritt in Ihrem Build an, in dem der Code geändert wird. Der Code wird kompiliert, als ob Sie gerade die cross-cutting-Bedenken in Ihren Code programmiert hätten. Dies ist etwas performanter als Runtime Weben und wegen der Verwendung von Attributen ist Postsharp sehr einfach zu bedienen. Ich denke, die Verwendung von Attributen für AOP ist nicht so problematisch wie die Verwendung für DI. Aber das ist nur mein persönlicher Geschmack.

Aber ...

Wenn Sie bereits Burg verwenden für Dependency Injection Ich sehe keinen guten Grund, warum Sie es nicht auch für AOP Sachen verwenden sollten. Ich denke, obwohl das AOP zur Laufzeit etwas langsamer als zur Kompilierzeit ist, ist es auch leistungsfähiger. AOP und DI sind meiner Meinung nach verwandte Konzepte und ich denke, es ist eine gute Idee, einen Rahmen für beide zu verwenden. Also schaue ich mir beim nächsten Projekt wahrscheinlich nochmal das Schloss an. Ich brauche AOP.

14

paar kleinere Probleme mit Postsharp ...

Ein Problem, das ich mit Postsharp gehabt haben, ist, dass während asp.net verwenden, Zeilennummern für Ausnahmemeldungen sind ‚out‘ durch die Anzahl der IL Anweisungen injizierte Assemblies von PostSharp, da die PDBs nicht so gut injiziert werden :-).

Auch ohne die zur Laufzeit verfügbaren PostSharp-Assemblys treten Laufzeitfehler auf. Mit Windsor können die Cross-Cuts zu einem späteren Zeitpunkt ohne Neukompilierung des Codes deaktiviert werden.

(hoffen, das macht Sinn)

+5

Dies ist eine ziemlich alte Antwort, die ich über stolperte, aber ich wollte nur beachten, dass Postsharp ist nun tatsächlich die PDB-Dateien umwandeln, so dass die Debug-Ausgabe nicht mehr ist (siehe: http://stackoverflow.com/questions/2006508/postsharp-pdb-debugging-and-referenced-assemblies) –