Frage

Ich verstehe, objektorientierte Programmierung und habe OO-Programme für eine lange Zeit zu schreiben. Die Leute scheinen zu aspektorientierte Programmierung, aber ich habe nie wirklich gelernt, was es ist oder wie man es verwenden, zu sprechen. Was ist das grundlegende Paradigma?

Diese Frage ist verwandt, ist aber nicht ganz fragt sie:

Aspect-Oriented Programming vs. Objektorientierte Programmierung

War es hilfreich?

Lösung

AOP behandelt das Problem der Querschnittsthemen , die jede Art von Code sein würde, die in verschiedenen Verfahren wiederholt wird, und kann in der Regel nicht vollständig in sein eigenes Modul umgestaltet werden, wie mit der Protokollierung oder Nachprüfung. Also, mit AOP können Sie das Zeug aus dem Hauptcode verlassen und definieren es vertikal in etwa so:

function mainProgram()
{ 
   var x =  foo();
   doSomethingWith(x);
   return x;
}

aspect logging
{ 
    before (mainProgram is called):
    { 
       log.Write("entering mainProgram");
    }

    after (mainProgram is called):
    { 
       log.Write(  "exiting mainProgram with return value of "
                  + mainProgram.returnValue);
    }
 } 

aspect verification
{ 
    before (doSomethingWith is called):
    { 
       if (doSomethingWith.arguments[0] == null) 
       { 
          throw NullArgumentException();
       }

       if (!doSomethingWith.caller.isAuthenticated)
       { 
          throw Securityexception();
       }
    }
 }

Und dann ein Aspekt-Weber verwendet wird, um den Code in diesen zu kompilieren:

function mainProgram()
{ 
   log.Write("entering mainProgram");

   var x = foo();   

   if (x == null) throw NullArgumentException();
   if (!mainProgramIsAuthenticated()) throw Securityexception();
   doSomethingWith(x);   

   log.Write("exiting mainProgram with return value of "+ x);
   return x;
} 

Andere Tipps

Leider scheint es überraschend schwierig zu sein, wirklich zu machen AOP nützlich in einer normalen mittleren Größe Organisation. (Editor Unterstützung, Gefühl der Kontrolle, die Tatsache, dass Sie mit den nicht-so-wichtigen Dingen, die zu Code-rot, die Menschen nach Hause zu gehen, um ihre Familien zu starten, etc.)

habe ich meine Hoffnungen auf Verbundorientierte Programmierung , die etwas mehr und mehr realistisch ist. Es verbindet sich mit vielen populären Ideen und gibt Ihnen etwas wirklich cool.

Sehen Sie sich eine aufstrebende Umsetzung hier: qi4j.org/

PS. Eigentlich glaube ich, dass eine der Schönheiten mit AOP ist auch seine Achillesferse: Die nicht-intrusive, lassen die Menschen es ignorieren, wenn sie können, so wird es in den meisten Organisationen als zweitrangig behandelt werden

.

von einem doppelten Kopierte auf Vollständigkeit (Einstein):

Die klassischen Beispiele sind Sicherheit und Protokollierung. Statt Code in Ihrer Anwendung zu schreiben Auftreten von x zu protokollieren oder Objekt z überprüft Sicherheit Zugangskontrolle gibt es eine Sprache contraption „out-of-Band“ normalen Code, der systematisch die Sicherheit oder die Anmeldung in Routinen injizieren kann, die nativ haben sie nicht in so, dass selbst wenn Ihr Code es nicht liefern -. sein gesorgt

Ein konkretes Beispiel ist das Betriebssystem des Zugang Kontrollen in eine Datei. Ein Software-Programm muss nicht für Zugangsbeschränkungen überprüfen, weil das zugrundeliegende System funktioniert das für sie.

Wenn Sie denken, Sie brauchen AOP in meiner Erfahrung, die man eigentlich wirklich mehr Zeit und Mühe in der entsprechende Meta-Daten-Management in Ihrem System investieren werden müssen, mit einem Fokus auf gut durchdachtes strukturelles / Systemdesign.

Kopiert von Frühling in Aktion

  

AOP wird oft als eine Technik definiert, die die Trennung fördert   Bedenken in einem Softwaresystem. Systeme bestehen aus mehreren zusammengesetzt   Komponenten, die jeweils für einen bestimmten Teil der Funktionalität.   Aber oft sind diese Komponenten tragen auch zusätzliche Aufgaben   über ihre Kernfunktionalität. Systemdienste wie Logging,   Transaktionsmanagement und Sicherheit finden oft ihren Weg in   Komponenten, deren Kernaufgaben ist etwas anderes. Dieses System   Dienste werden im Allgemeinen als Querschnittsthemen bezeichnet, weil   sie neigen dazu, über mehrere Komponenten in einem System zu schneiden.

von einer doppelten Kopierte auf Vollständigkeit (Summer):

Klassen- und Methoden Attribute in .NET sind eine Form der Seitenorientierten Programmierung. Sie dekorieren Ihre Klassen / Methoden mit Attributen. Hinter den Kulissen fügt diesen Code auf Ihre Klasse / Methode, die die speziellen Funktionen des Attributs führt. Zum Beispiel ermöglicht eine Klasse serializable Markierung sie zur Speicherung oder Übertragung auf ein anderes System automatisch serialisiert werden. Andere Attribute können bestimmte Eigenschaften wie nicht-serializable markieren und diese würden automatisch aus dem serialisierten Objekts weggelassen werden. Serialisierung ist ein Aspekt, implementiert durch einen anderen Code in das System, und auf Ihre Klasse durch die Anwendung einer „Konfiguration“ -Attribut (Dekoration).

Es ein Beispiel für AOP ist, verwendet es Frühling AOP als Beispiel. Das Beispiel ist ganz einfach zu verstehen.

Frühling AOP (Aspect orientierte Programmierung) Rahmen wird verwendet, Querschnittsthemen in Aspekten modularisieren. Legen Sie es einfach, es ist nur ein Abfangjäger einige Prozesse abzufangen, zum Beispiel, wenn ein Verfahren auszuführen ist, Frühling AOP kann die Ausführung von Verfahren kapern, und fügen Sie zusätzliche Funktionalität vor oder nach der Ausführung der Methode.

Referenz: http://www.mkyong.com/spring/spring -aop-Beispiele-Beratung /

AOP kann verwendet werden, Aktionen auszuführen, die nicht auf die Geschäftslogik Ihrer Anwendung wie Protokollierung verwendet sind, Caching, etc. Diese Aktionen in einem separaten Teil Ihrer Anwendung gebracht werden können und dann in der gesamten Anwendung wiederverwendet werden. Es gibt in der Regel zwei Möglichkeiten, dies zu erreichen. Injizierenden Code automatisch durch einen Präprozessor vor / nach einer Methode oder Proxy-Klassen geknüpft ist, die einen Methodenaufruf abfangen und kann dann Dinge ausführen vor / nach einem Methodenaufruf.

Hier ist ein Beispiel in .Net. Es nutzt Proxy-Klassen Methodenaufrufe abfangen und Ausführen von Code vor dem nach saif Methode aufruft.

AOP ist ein Weg, um besser auf Ihre Anwendung für Funktionalität modularisieren, die über mehrere Grenzen erstreckt. AOP ist ein weiterer Weg, um diese Funktionen zu kapseln und Einzel Verantwortlich folgen, indem sie diese Querschnittsthemen bewegen (Logging, Fehlerbehandlung, etc.) aus den Hauptkomponenten der Anwendung. Bei sachgemäßer Verwendung in Ihrer Anwendung im Laufe der Zeit zu einem höheren Wartbarkeit und Erweiterbarkeit führen.

AOP kann
scroll top