Jest dużo implementacji AOP w C #, VB.net. oto niektóre z wdrożeń AOP:
- PostSharp
- Castle DynamicProxy
- LinFu
- LOOM.NET
- Aspect.NET
- Blok aplikacji do wstrzykiwania zasad Enterprise Library 3.0
- AspectDNG
- DotSpect (.SPECT)
- Spring.NET ramowa jako część swojej funkcjonalności
- Wicca i Phx.Morph
- Wyczerpująca analiza rozwiązań AOSD dla .NET jest dostępna na Twente University
- Seasar.NET
- Aspekt#
- Puzzle.NAspect
- Komponować*
- SetPoint
- NConcern .NET AOP Framework
- ...
Jaka jest najlepsza implementacja AOP w .Net? Czego powinienem użyć?
Odpowiedzi:
Myślę, że Castle Dynamic Proxy jest rozwiązaniem z wyboru, jeśli dynamiczne przechwytywanie może obsłużyć Twoje potrzeby. Ta struktura jest używana wewnętrznie przez wiele innych platform, które chcą oferować możliwości AOP. Zazwyczaj większość istniejących kontenerów IoC zapewnia teraz pewne dynamiczne mechanizmy przechwytywania (Spring.NET, Castle Windsor, StructureMap itp.). Jeśli już pracujesz z kontenerem IoC, może łatwiej byłoby przyjrzeć się temu, co on proponuje.
Jeśli dynamiczne przechwytywanie nie może zaspokoić twoich potrzeb (tkanie zapieczętowanej klasy, przechwytywanie połączenia niewirtualnego itp.), Z pewnością chcesz tkać statyczne. PostSharp to odniesienie w tej domenie.
Zauważ, że istnieje również Linfu , które można wykorzystać do wykorzystania obu modów AOP.
źródło
„Najlepsze” jest subiektywne.
Najpierw przygotuj listę potrzebnych funkcji, swoją architekturę itp. Następnie poszukaj opcji, które zrobią to, czego potrzebujesz, bez wprowadzania niepotrzebnej złożoności. Na przykład kilka z nich jest zorientowanych na interfejs: czy Twój kod jest obecnie zorientowany na interfejs? Jeśli nie, PostSharp może być lepszym wyborem (wpleciony w oryginalne klasy). Ale oczywiście PostSharp nie może być konfigurowany w czasie wykonywania ... konie do kursów.
źródło
Najlepszym sposobem programowania zorientowanego aspektowo w .NET jest użycie dobrze znanych technik projektowania. Na przykład, stosując zasady SOLID , możesz osiągnąć elastyczność i modułowość, których potrzebujesz, aby umożliwić dodawanie problemów związanych z przekrojami. Jeśli masz odpowiedni projekt, będziesz w stanie zastosować większość przekrojowych problemów bez żadnych ram. Myślenie, że OOP nie nadaje się do robienia AOP jest błędem.
Oto kilka wskazówek:
Gdy masz już odpowiednie abstrakcje, dodanie nowych przekrojowych problemów do systemu jest po prostu kwestią napisania nowej klasy dekoratora i owinięcia jej wokół odpowiednich implementacji. Jeśli abstrakcje są ogólne, możesz owinąć pojedynczy dekorator wokół dużej grupy klas (o to właśnie chodzi w AOP).
Chociaż techniki takie jak dynamiczne serwery proxy i tkanie kodu mogą ułatwić pracę ze źle zaprojektowaną aplikacją, tak naprawdę nie ma alternatywy dla dobrego projektu. Wcześniej czy później zostaniesz poparzony. Nie oznacza to jednak, że nie należy używać dynamicznego generowania proxy i tkania kodu. Ale bez odpowiedniego projektu aplikacji nawet te techniki będą tylko marginalnie pomocne.
źródło
Nie wiem co najlepsze, jest dużo frameworków i za mało godzin w ciągu dnia, aby je wszystkie wypróbować.
Użyłem PostSharp i byłem mile zaskoczony, jak łatwo jest zacząć z nim.
Przyjrzałem się również AOP z Castle Windsor i Spring.Net, podejście jest inne (czas wykonania vs czas kompilacji). Mieszanie AOP i IoC wydaje się mieć sens. Kiedy nie używasz żadnego z tych frameworków, to dużo więcej pracy, aby rozpocząć, ale nie pozwól, aby Cię to powstrzymało.
Do nowych projektów prawdopodobnie używałbym teraz Castle Windsor, ale to głównie dlatego, że chciałbym również używać IoC. Gdybym musiał szybko zaimplementować AOP w istniejącej bazie kodu, użyłbym PostSharp.
źródło
Istnieje również funkcja Policy Injection i Unity Interception firmy Microsoft.
źródło