Frage

AOP ist meiner Meinung nach ein interessantes Programmierparadigma.Allerdings gab es hier auf Stackoverflow noch keine Diskussionen darüber (zumindest konnte ich sie nicht finden).Was denkst Du generell darüber?Verwenden Sie AOP in Ihren Projekten?Oder glauben Sie, dass es sich eher um eine Nischentechnologie handelt, die es noch lange nicht geben wird oder die es nicht in den Mainstream schaffen wird (wie OOP es zumindest in der Theorie getan hat ;))?

Wenn Sie AOP verwenden, teilen Sie uns bitte mit, welche Tools Sie ebenfalls verwenden.Danke!

War es hilfreich?

Lösung

Ja.

Orthogonale Anliegen wie Sicherheit lassen sich am besten mit Abfangen im AOP-Stil lösen.Ob dies automatisch (durch etwas wie einen Dependency-Injection-Container) oder manuell erfolgt, ist für das Endziel unerheblich.

Ein Beispiel:die „Vorher/Nachher“-Attribute in xUnit.net (ein Open-Source-Projekt, das ich betreibe) sind eine Form des Abfangens von Methoden im AOP-Stil.Sie dekorieren Ihre Testmethoden mit diesen Attributen, und unmittelbar vor und nach der Ausführung dieser Testmethode wird Ihr Code aufgerufen.Es kann für Dinge wie das Einrichten einer Datenbank und das Zurücksetzen der Ergebnisse, das Ändern des Sicherheitskontexts, in dem der Test ausgeführt wird, usw. verwendet werden.

Ein anderes Beispiel:die Filterattribute in ASP.NET MVC fungieren auch wie spezialisierte Methodenabfangjäger im AOP-Stil.Mit einer können Sie beispielsweise sagen, wie unbehandelte Fehler behandelt werden sollen, wenn sie in Ihrer Aktionsmethode auftreten.

Viele Abhängigkeitsinjektionscontainer, darunter Castle Windsor und Unity, unterstützen dieses Verhalten entweder „in der Box“ oder durch die Verwendung von Erweiterungen.

Andere Tipps

Python unterstützt AOP, indem es Ihnen ermöglicht, seine Klassen zur Laufzeit dynamisch zu ändern (was in Python normalerweise als Monkeypatching und nicht als AOP bezeichnet wird).Hier sind einige meiner AOP-Anwendungsfälle:

  1. Ich habe eine Website, auf der jede Seite durch eine Python-Funktion generiert wird.Ich möchte an einem Kurs teilnehmen und alle von diesem Kurs generierten Webseiten passwortgeschützt machen.AOP kommt zur Rettung;Bevor jede Funktion aufgerufen wird, führe ich die entsprechende Sitzungsprüfung durch und leite sie bei Bedarf um.

  2. Ich möchte eine Reihe von Funktionen in meinem Programm während der tatsächlichen Nutzung protokollieren und profilieren.Mit AOP kann ich das Timing berechnen und Daten in Protokolldateien drucken, ohne eine dieser Funktionen tatsächlich zu ändern.

  3. Ich habe ein Modul oder eine Klasse voller nicht-threadsicherer Funktionen und verwende sie in einem Multithread-Code.Einige AOPs fügen Sperren für diese Funktionsaufrufe hinzu, ohne dass man in die Bibliothek gehen und etwas ändern muss.

So etwas kommt nicht oft vor, aber wann immer es passiert, ist Monkeypatching SEHR nützlich.Python verfügt auch über Dekoratoren, die das Decorator-Entwurfsmuster implementieren (http://en.wikipedia.org/wiki/Decorator_pattern), um ähnliche Dinge zu erreichen.

Beachten Sie, dass Sie durch das dynamische Ändern von Klassen auch Fehler umgehen oder Funktionen zu einer Bibliothek eines Drittanbieters hinzufügen können, ohne diese Bibliothek tatsächlich ändern zu müssen.Ich muss das fast nie tun, aber die wenigen Male, in denen es auftauchte, war es unglaublich nützlich.

Ich verstehe nicht, wie man übergreifende Probleme wie Protokollierung, Sicherheit, Transaktionsverwaltung und Ausnahmebehandlung sauber bewältigen kann, ohne AOP zu verwenden.

Jeder, der das Spring-Framework verwendet (wahrscheinlich etwa 50 % der Java-Unternehmensentwickler), verwendet AOP, ob er es weiß oder nicht.

Bei Terrakotta Wir verwenden AOP und Bytecode-Instrumentierung ziemlich häufig, um Software von Drittanbietern zu integrieren und zu instrumentieren.Zum Beispiel unsere Frühlingsintegration wird zum großen Teil durch die Verwendung erreicht Aspektwerkz.Kurz gesagt, wir müssen an verschiedenen Stellen Anrufe bei Spring Beans und Bohnenfabriken abfangen, um sie zu gruppieren.

Daher kann AOP für die Integration mit Code von Drittanbietern nützlich sein, der sonst nicht geändert werden kann.Wir haben jedoch festgestellt, dass es eine große Gefahr gibt: Verwenden Sie nach Möglichkeit nur die öffentliche API eines Drittanbieters in Ihren Verbindungspunkten, da sonst das Risiko besteht, dass Ihr Code durch eine Änderung an einer privaten Methode in der nächsten Nebenversion beschädigt wird ein Wartungs-Albtraum.

AOP und Transaktionsabgrenzung sind eine himmlische Kombination.Wir verwenden Spring AOP @Transaction-Annotationen. Dies ermöglicht eine einfachere und intuitivere TX-Abgrenzung, als ich es jemals anderswo gesehen habe.

Wir haben AspectJ längere Zeit in einem meiner großen Projekte verwendet.Das Projekt bestand aus mehreren Webdiensten mit jeweils mehreren Funktionen, die das Frontend für ein kompliziertes Dokumentenverarbeitungs-/Abfragesystem bildeten.Etwa 75.000 Codezeilen.Wir haben Aspekte für zwei relativ kleine Funktionalitäten verwendet.

Zuerst wurde der Anwendungsfluss verfolgt.Wir haben einen Aspekt erstellt, der vor und nach jedem Funktionsaufruf ausgeführt wird, um „eingegebene ‚Funktion‘“ und „exited ‚Funktion‘“ auszugeben.Mit der Funktionsauswahl-Sache (Pointcut vielleicht?Ich erinnere mich nicht an den richtigen Namen.) Wir konnten dies als Debugging-Tool verwenden und nur Funktionen auswählen, die wir zu einem bestimmten Zeitpunkt verfolgen wollten.Das war eine wirklich schöne Verwendung für Aspekte in unserem Projekt.

Das zweite, was wir gemacht haben, waren anwendungsspezifische Metriken.Wir legen Aspekte rund um unsere Webservice-Methoden fest, um Timing, Objektinformationen usw. zu erfassen.und die Ergebnisse in einer Datenbank speichern.Das war schön, weil wir diese Informationen erfassen konnten, aber dennoch den gesamten Erfassungscode vom „echten“ Code, der die Arbeit erledigte, getrennt halten konnten.

Ich habe von einigen netten Lösungen gelesen, die Aspekte auf den Tisch bringen können, aber ich bin immer noch nicht davon überzeugt, dass sie wirklich etwas können, was man mit „normaler“ Technologie nicht (vielleicht besser) machen könnte.Zum Beispiel fielen mir keine wichtigen Features oder Funktionen ein, die eines unserer Projekte benötigte und die nicht genauso einfach ohne Aspekte umgesetzt werden könnten – wo ich Aspekte als nützlich empfunden habe, sind die kleineren Dinge, die ich erwähnt habe .

Ich verwende AOP häufig in meinen C#-Anwendungen.Ich bin kein großer Fan davon, Attribute verwenden zu müssen, deshalb habe ich Castle DynamicProxy und Boo verwendet, um Aspekte zur Laufzeit anzuwenden, ohne meinen Code zu verschmutzen

Wir verwenden AOP in unserer Sitzungsfassade, um unseren Kunden ein konsistentes Framework für die individuelle Anpassung unserer Anwendung bereitzustellen.Dadurch können wir einen einzelnen Anpassungspunkt verfügbar machen, ohne für jede Methode manuelle Hook-Unterstützung hinzufügen zu müssen.

Darüber hinaus bietet AOP einen einzigen Konfigurationspunkt für die Einrichtung und Deaktivierung zusätzlicher Transaktionen sowie für die üblichen Protokollierungsaufgaben.Alles in allem ist es viel wartbarer, als dies alles von Hand zu erledigen.

Die Hauptanwendung, an der ich arbeite, umfasst einen Skript-Host.Mit AOP kann der Host die Eigenschaften eines Skripts prüfen, bevor er entscheidet, ob das Skript in die Anwendungsdomäne geladen wird oder nicht.Da einige der Skripte recht umständlich sind, sorgt dies für ein deutlich schnelleres Laden zur Laufzeit.

Wir verwenden und planen auch, eine beträchtliche Anzahl von Attributen für Dinge wie Compilersteuerung, Flusskontrolle und In-IDE-Debugging zu verwenden, die nicht Teil der endgültigen verteilten Anwendung sein müssen.

Wir verwenden PostSharp für unsere AOP-Lösung.Wir verwenden derzeit Caching-, Fehlerbehandlungs- und Datenbankwiederholungsaspekte und sind dabei, unsere Sicherheitsüberprüfungen zu einem Aspekt zu machen.

Funktioniert bei uns super.Den Entwicklern gefällt die Trennung der Belange sehr.Den Architekten gefällt es sehr, dass die Logik auf Plattformebene an einem Ort konsolidiert wird.

Die PostSharp-Bibliothek ist ein Post-Compiler, der den Code einfügt.Es verfügt über eine Bibliothek vordefinierter Intercepts, die hirntot und einfach zu implementieren sind.Es fühlt sich an wie eine Verkabelung in Event-Handlern.

Ja, wir verwenden AOP in der Anwendungsprogrammierung.Ich verwende vorzugsweise AspectJ, um AOP in meine Spring-Anwendungen zu integrieren.Schauen Sie sich diesen Artikel an, um eine breitere Perspektive dafür zu erhalten.

http://codemodeweb.blogspot.in/2018/03/spring-aop-and-aspectj-framework.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top