Jaka jest najlepsza implementacja AOP in.Net? [zamknięte]

Jest dużo implementacji AOP w C#, VB.net. oto niektóre implementacje AOP:

Jaka jest najlepsza implementacja AOP w. Net? z czego powinienem korzystać?

 75
Author: Tony THONG, 2009-03-11

5 answers

Myślę, że Castle Dynamic Proxy jest rozwiązaniem z wyboru, jeśli przechwytywanie dynamiczne zaspokoi Twoje potrzeby. Framework ten jest używany wewnętrznie przez wiele innych frameworków, które chcą oferować możliwości AOP. Zazwyczaj większość istniejących kontenerów IoC zapewnia obecnie 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 proponuje.

Jeśli przechwytywanie dynamiczne nie możesz zaspokoić swoich potrzeb (tkanie zamkniętej klasy, przechwytywanie nie-Wirtualnego połączenia itp.), a następnie na pewno chcesz statycznego tkania. PostSharp jest odniesieniem w tej domenie.

Zauważ, że istnieje równieżLinfu , który może być użyty do wykorzystania obu modów AOP.

 40
Author: Romain Verdier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-24 18:37:20

"najlepsze" jest subiektywne.

Najpierw należy sporządzić listę potrzebnych funkcji, architektury itp. Następnie poszukaj opcji, które robią 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 (jest wpleciony w oryginalne klasy). Ale oczywiście PostSharp nie może być skonfigurowany w czasie wykonywania... konie na kursy.

 13
Author: Marc Gravell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-11 08:20:08

Najlepszym sposobem na programowanie aspektowe w. NET jest użycie dobrze znanych technik projektowania. Na przykład, stosując SOLID principles można osiągnąć elastyczność i modułowość, których potrzebujesz, aby umożliwić dodawanie problemów przekrojowych. Jeśli masz prawo projektowania, będziesz nawet w stanie zastosować większość problemów przekrojowych bez żadnych ram. Błędem jest myślenie, że OOP nie nadaje się do robienia AOP.

Oto kilka wskazówek:

  • nie polegaj na konkretne przypadki, ale zależą od abstrakcji.
  • nie mieszaj przekrojowych obaw i logiki biznesowej w tej samej klasie.
  • dodawanie przekrojowych obaw poprzez owijanie klas logiką biznesową w klasy, które implementują te obawy (dekoratory).
  • Znajdź typowe artefakty w swoim projekcie i modeluj je jednakowo, najlepiej używając tego samego rodzaju abstrakcji. Spójrz na to i to na przykład.

Gdy masz właściwe abstrakcje na miejscu, dodanie nowych przekrojowych problemów do systemu jest tylko kwestią napisania nowej klasy dekoratora i owinięcia go wokół właściwych implementacji. Jeśli abstrakcje są ogólne, możesz owinąć pojedynczy dekorator wokół dużej grupy klas (co jest dokładnie tym, o co chodzi w AOP).

Chociaż techniki takie jak dynamiczne proxy i tkanie kodu mogą ułatwić pracę z źle zaprojektowaną aplikacją, naprawdę nie ma alternatywy dla dobrego projektu. Wcześniej albo później się poparzysz. 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.

 12
Author: Steven,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-20 08:12:25

Nie wiem jak najlepiej, jest dużo frameworków i za mało godzin w ciągu dnia, aby wypróbować je wszystkie.

Użyłem PostSharp i byłem mile zaskoczony, jak łatwo jest zacząć z nim.

Zajrzałem też do AOP z Castle Windsor i Spring.Net, podejście jest inne (runtime vs compile time). Mieszanie AOP i MKOl wydaje się mieć sens. Kiedy nie używasz jeszcze jednego z tych frameworków, musisz zacząć dużo więcej pracy, ale nie pozwól, aby to się skończyło ty.

Dla nowych projektów teraz pewnie używam Castle Windsor, ale to głównie dlatego, że chciałbym również używać IoC. Gdybym miał szybko zaimplementować AOP do istniejącej bazy kodu, użyłbym PostSharp.

 5
Author: Mendelt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-11 08:23:33

Jest też Policy Injection i Unity Interception od Microsoftu.

 4
Author: Grigori Melnik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-09 20:08:07