13 Stimmen

Anwendung der aspektorientierten Programmierung

Ich habe einige grundlegende Lösungen im AOP-Stil für übergreifende Belange wie Sicherheit, Protokollierung, Validierung usw. verwendet. Meine Lösung dreht sich um Schloss Windsor und DynamicProxy, weil ich alles mit einer Boo-basierten DSL anwenden und meinen Code von Attributen sauber halten kann. Mir wurde am Wochenende gesagt, ich solle einen Blick auf PostSharp da es angeblich eine "bessere" Lösung sein soll. Ich habe einen kurzen Blick auf PostSharp gehabt, aber ich habe durch die Attribut-Verwendung abgeschreckt worden.

Hat jemand beide Lösungen ausprobiert und möchte seine Erfahrungen mitteilen?

14voto

Stacy A Punkte 271

Ein paar kleinere Probleme mit PostSharp...

Ein Problem, das ich mit PostSharp hatte, ist, dass bei der Verwendung von asp.net, Zeilennummern für Ausnahmemeldungen sind "out" durch die Anzahl der IL-Anweisungen in Baugruppen von PostSharp injiziert, wie die PDBs sind nicht injiziert als gut :-).

Ohne die zur Laufzeit verfügbaren PostSharp-Assemblies treten außerdem Laufzeitfehler auf. Mit Windsor können die Cross-Cuts zu einem späteren Zeitpunkt ausgeschaltet werden, ohne dass der Code neu kompiliert werden muss.

(Ich hoffe, das macht Sinn)

5 Stimmen

Dies ist eine ziemlich alte Antwort, die ich stolperte über, aber ich wollte nur darauf hinweisen, dass PostSharp jetzt tatsächlich die PDB-Dateien umwandeln, so dass das Debugging-Problem nicht mehr ist (siehe: stackoverflow.com/questions/2006508/ )

10voto

Mendelt Punkte 35649

Ich habe mir Castle-Windsor (bisher) nur kurz angesehen, kann also nichts dazu sagen, aber ich habe Postsharp verwendet.

Postsharp funktioniert durch Weben zur Kompilierzeit. Es fügt einen Post-Compile-Schritt zu Ihrem Build hinzu, in dem es Ihren Code modifiziert. Der Code wird so kompiliert, als ob Sie gerade die Querschnittsthemen in Ihren Code programmiert hätten. Dies ist etwas leistungsfähiger als das Weaving zur Laufzeit und aufgrund der Verwendung von Attributen ist Postsharp sehr einfach zu verwenden. Ich denke, dass die Verwendung von Attributen für AOP nicht so problematisch ist wie die Verwendung für DI. Aber das ist nur mein persönlicher Geschmack.

Aber...

Wenn Sie bereits Castle für Dependency Injection verwenden, sehe ich keinen guten Grund, warum Sie es nicht auch für AOP-Zeug verwenden sollten. Ich denke, obwohl die AOP zur Laufzeit etwas langsamer ist als zur Kompilierzeit, ist sie auch leistungsfähiger. AOP und DI sind meiner Meinung nach verwandte Konzepte, daher halte ich es für eine gute Idee, ein Framework für beides zu verwenden. Daher werde ich mir das nächste Projekt, bei dem ich AOP benötige, wahrscheinlich wieder mit Castle ansehen.

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