2008-09-15 13 views
12

Używam kilku podstawowych rozwiązań typu AOP dla zagadnień przekrojowych, takich jak bezpieczeństwo, rejestrowanie, sprawdzanie poprawności itp. Moje rozwiązanie skupiło się wokół Castle Windsor i DynamicProxy. Poszedłem tą drogą, ponieważ mogę zastosować wszystko przy użyciu DSL opartego na Boo i utrzymywać mój kod w czystości atrybutów. Powiedziano mi w weekend, żebym spojrzał na PostSharp, ponieważ ma to być "lepsze" rozwiązanie. Rzuciłem okiem na PostSharp, ale odrzuciło mnie użycie Atrybutu.Stosowanie AOP

Czy ktoś próbował obu rozwiązań i chciałby podzielić się swoimi doświadczeniami?

Odpowiedz

9

Spojrzałem tylko na zamek-windsor przez krótki czas (jeszcze), więc nie mogę tego komentować, ale użyłem postsharpu.

Postsharp działa poprzez tkanie w czasie kompilacji. Reklamuje krok post-kompilacji do twojej kompilacji, gdzie modyfikuje twój kod. Kod jest skompilowany tak, jakbyś właśnie zaprogramował obawy dotyczące przekroju w swoim kodzie. Jest to nieco bardziej wydajne niż tkanie w czasie wykonywania, a ze względu na użycie atrybutów Postsharp jest bardzo łatwy w użyciu. Myślę, że używanie atrybutów dla AOP nie jest tak problematyczne, jak używanie go dla DI. Ale to tylko mój osobisty gust.

Ale ...

Jeśli korzystasz już z zamku do wstrzykiwania zależności nie widzę dobry powód, dlaczego nie powinno się także używać go do AOP rzeczy. Myślę, że chociaż AOP w czasie wykonywania jest nieco wolniejszy niż w czasie kompilacji, to jest także silniejszy. AOP i DI to moim zdaniem powiązane koncepcje, więc uważam, że dobrym pomysłem jest użycie jednej struktury dla obu. Tak więc pewnie jeszcze spojrzę na rzeczy z zamku na kolejny projekt, który potrzebuję AOP.

14

kilka drobnych problemów z PostSharp ...

Jeden problem miałem z PostSharp jest to, że podczas korzystania z programu ASP.NET, numery linii do wiadomości Wyjątkiem są „na zewnątrz” przez liczbę instrukcji IL wstrzykuje się asocjaty PostSharp, ponieważ PDB nie są również wstrzykiwane :-).

Ponadto, bez zestawów PostSharp dostępnych w czasie wykonywania, występują błędy środowiska wykonawczego. Przy użyciu Windsora cięcia poprzeczne można wyłączyć w późniejszym czasie bez ponownej kompilacji kodu.

(mam nadzieję, że to ma sens)

+5

Jest to dość stary odpowiedź, że natknąłem, ale chciałem zwrócić uwagę, że PostSharp ma teraz rzeczywiście przekształcić pliki PDB, więc kwestia debugowanie ma więcej (patrz: http://stackoverflow.com/questions/2006508/postsharp-pdb-debugging-and-referenced- zgromadzenia) –