Benutzt du AOP? und wofür? [Duplikat]

8

Ich bin sehr an der Aspekt-orientierten Programmierung interessiert (Spring, PostSharp usw.). Ich kann mir eine Reihe von Möglichkeiten vorstellen, wie ich diese Technik einsetzen könnte, wobei mir hauptsächlich Logging oder Lazy Load in den Sinn kommen. Ich hatte gehofft zu sehen, wofür jeder andere es benutzt hat?

Bitte listen Sie die Seniors auf, die Sie mit AOP lösen. (hopfully kann es jemand anderes anregen, es auch aufzuheben)

Prost

Knochen

    
dbones 20.12.2008, 02:26
quelle

4 Antworten

3

Ich stimme dem Beitrag von brd6644 zu (und hätte ihn abgelehnt, wenn ich könnte). Besonders sein Kommentar zum Logging. Die Verwendung von Aspekten für die Protokollierung ähnelt eher der Ablaufverfolgung.

Es gibt zwei Podcasts auf se-radio.net auf AOP. Die erste , ein Interview mit Gregor Kiczales, der es getan hat viel Forschung über AOP; das zweite , ein jüngeres Interview mit Christa Schwanninger und Iris Groher konzentriert sich auf AOP wird in der Praxis verwendet. Beides ist es wert zuzuhören.

Seien Sie vorsichtig, wie Sie AOP anwenden. Sie konzentrieren sich zu sehr auf AOP und konzentrieren sich eher auf die Plattform als auf den geschäftlichen Nutzen. Ich wurde nie angewiesen, AOP in einem Testfall zu verwenden. Aspekte sind etwas, was ich beim Refactoring einer App einführen würde, um Duplikate zu entfernen.

    
ewalshe 20.12.2008 12:07
quelle
2

Ich habe AOP 2007/2008 für ein Großprojekt verwendet. Die Firma, für die ich arbeitete, ließ mich ein benutzerdefiniertes CMS entwickeln, um ihre Kunden zu verwalten. Es wurde in das von uns entwickelte benutzerdefinierte Framework integriert und konnte Inhalte basierend auf den Metadaten des Benutzers über unsere Rules Engine konditionieren.

Unsere Umgebungen wurden in die traditionelle Dev / QA / Inszenierung / Produktion aufgeteilt. Wir brauchten einen Weg, um Entitäten, seien es Inhalte oder andere Daten, zwischen den Umgebungen zu migrieren. Ich habe AOP verwendet, um Änderungen an Eigenschaftswerten zu verfolgen, im Wesentlichen alle Änderungen an Entitäten aufzuzeichnen und versionieren, die in den Downlevel-Umgebungen erstellt wurden. Mithilfe von Reflektion wurden Entitäten kopiert, indem die in einer Quellumgebung vorgenommenen Änderungen in einer Zielumgebung "wiederholt" wurden. Ich habe das System ChangeFlow aufgerufen, weil es in ein Workflow-System integriert wurde. Inhaltsgenehmiger könnten eine aktuelle Version genehmigen, die die Migration initiieren würde. Jedes Objekt könnte "ChangeFlow-fähig" sein, indem es von einer gemeinsamen Basisklasse abgeleitet wird und den Methoden und Eigenschaften, die verfolgt werden müssen, ein paar Attribute hinzufügt.

    
Dave Swersky 20.12.2008 02:57
quelle
1

Attribute in C # können Beispiele für AOP sein. Beispielsweise wendet das AuthorizeAttribute in ASP.NET MVC Autorisierungsanforderungen auf Methoden oder Klassen an, die mit dem Attribut versehen sind.

    
tvanfosson 20.12.2008 02:33
quelle
1
  • Sicherheit - Erklären Sie die erforderlichen Berechtigungen / Rollen und wenden Sie einen Ratschlag an, der Kenntnisse über den aktuellen Principal hat, um Autorisierungsentscheidungen zu treffen
  • Objektbereinigung - schneiden Sie verschiedene Teile eines Objektgraphen mit Hilfe eines Hinweises
  • ab
  • Transaktionen - wenden Transaktionsverhalten auf Methoden an, die keine Transaktionalität kennen
  • Timing-Code

Logging wird oft als Beispiel genannt, aber in der Praxis finde ich es nicht sehr nützlich. Protokollierungsanweisungen innerhalb von Methoden sind in der Regel wertvoller.

Wie oben vorgeschlagen, ist das Hinzufügen von Attributen zu Klassen oder Methoden und das anschließende Verwenden von AOP zur Überprüfung der Metadaten und zum Ausführen von Logik eine gute Möglichkeit, diese Logik vom Code zu entkoppeln. Sie können die Deklarationen auch in einem separaten Artefakt (XML) vornehmen, aber ich finde, dass das Attribut sehr leistungsfähig ist.

    
cliff.meyers 20.12.2008 03:41
quelle

Tags und Links