Frage

Ich habe entrahmte die Online-Dokumentation, lesen Sie die Wiki-Eintrag, die Beiträge und die Blogs, aber ich bin immer noch verwirrt.

  • Was ist, kurz gesagt, Aspect Oriented Programming ?
  • Ist es einfach besser als Oriented Programming Object? Soll ich verlernen OOP?
  • Wenn nicht, wie kann ich wissen, wenn das eine oder andere benutzen? Was sind die wichtigsten Unterschiede zwischen den beiden?
  • Kann ich REFACT einen in die andere?

Ich habe immer ein OO Mann gewesen, und ich möchte wissen, ob ich Verrat müssen begehen.

Im Ernst, ich bin bald ein neues Projekt beginnen, und ich mag die richtigen Entscheidungen am Anfang machen.

War es hilfreich?

Lösung

Was ist, kurz gesagt, Aspect Oriented Programming?

Auf den Punkt gebracht, ist AOP die Fähigkeit, Aktionen in den typischen Ablauf eines anderen Programms zu injizieren, unaufdringlich. Damit können Sie Capture-Klasse instantiations, Methodenaufrufe, Zuweisungen, etc.

Ist es einfach besser als Programmierung objektorientiert? Soll ich verlernen OOP?

Nein, und nein. Es funktioniert zusammen mit jeder Programmierumgebung, die es unterstützt. (Siehe oben).

Wenn nicht, wie kann ich wissen, wenn das eine oder andere zu benutzen? Was sind die wichtigsten Unterschiede zwischen den beiden?

Sie verwenden AOP, in der Regel, wenn Sie irgendeine Art von Aktionen auf Hunderten von Klassen implementieren möchten, ohne die Klassen selbst zu manipulieren. Typische Beispiele sind Sicherheit (Genehmigung des Rechts auf die angegebene Methode / Klasse zu nennen) oder Protokollierung. Nach meiner Erfahrung, verwenden aber ich es nicht für diese. (Ich weiß nicht, dass es überhaupt verwenden, ehrlich).

Wie oben erwähnt, ist der Hauptunterschied nicht wirklich existieren, da sie nicht vergleichbar sind. Aber, sagen Sie die Protokollierung implementieren möchten „normal“, rufen Sie einfach den Logger an geeigneten Punkten:

log.write("hello");

Aber mit AOP, können Sie einen ‚Aspekt‘, dass Attachés zu jedem Methodenaufruf und lügen ‚Methode b genannte‘ erstellen. Der Punkt ist, dass in AOP Sie nähern sich mehr ‚Shotgun‘ ist: Sie heften sich an alles, oder einfach nur eine kleine Teilmenge. Manuelles Hinzufügen Protokollierung der Regel besser ist.

Kann ich REFACT einen in die andere?

Nicht wirklich relevant, Andere Antworten. Wieder mit Sicherheit, Sie auf ein AOP-Modell von einem typischen OOP-Modell this.IsAllowed (), um so etwas wie if (callingMethod.HasAttribute (foo)) {erlaubt = true tauschen könnten; }

Hope sind diese Antworten nützlich. Lassen Sie mich wissen, wenn Sie mich weiter ausbauen wollen.

Andere Tipps

Nein, AOP ergänzt OOP, anstatt sie zu verdrängen. AOP und OOP bieten verschiedene Arten von „Klebstoff“, um Hilfe Sie Verhalten kombinieren. OOP, natürlich können Sie Verhalten durch Vererbung und Komposition kombinieren usw. AOP auf der anderen Seite können Sie Verhalten Adresse Querschnittsthemen von Punkt schneidet wo Ihren neuen Code Läufe vor oder nach den gewählten Methoden der ausgewählten Klassen.

Einige typische Beispiele für Querschnittsthemen sind: Sicherheit, Protokollierung und Transaktionssteuerung. Ein Fundament Prinzip des guten Designs ist Kohärenz: Idealerweise sollte ein Stück Code nur eine Sache zu tun. So ist es das Wasser trübt Sicherheitscode Datenzugriffsklassen hinzuzufügen, zum Beispiel. AOP löst das besondere Problem, indem wir das Verhalten in einem „Aspect“ hinzufügen und dann diesen Aspekt zu allen Klassen der Anwendung, die Sicherheitskontrollen haben sollte.

AOP ist anders als OOP, völlig unterschiedliche Ansätze zur Entwicklung.

Grundsätzlich, wenn Sie die Protokollierung haben, Authentifizierung betrifft, Performance-Prüfcodes, werden diese gleich, rund, in verschiedenen Teilen des Programms in verschiedenen Klassen sein. So können Sie Ihre Anwendung schreiben, wie Sie es sich vorstellen, in Java, dann, wenn Sie in diesen anderen Arten von Code hinzufügen müssen (Ablängen betrifft), dann Sie nur spritzen sie in das Programm, so dass sie in kompiliert werden kann, aber wenn schauen Sie auf den Quellcode finden Sie nur die Geschäftslogik Sie brauchen es.

Was, wenn AOP zu verwenden oder OOP, würde ich vorschlagen, dass Sie das Programm schreiben, um es arbeitet, dann, wenn Sie es nicht mehr funktioniert, Blick auf Code entfernen, die nicht wirklich mit der Funktion zu tun haben, sondern dient einig anderer Zweck. wenn Sie überprüfen müssen zum Beispiel, dass die Eingabeparameter korrekt sind, bevor sie verwenden, dann einen Aspekt dafür. Wenn Sie ähnliche Ereignisbehandlung haben, wie alle Ausnahmen in der Datenzugriffsschicht schreibt in einer Protokolldatei geworfen, dann erstellen Sie einen Aspekt für das.

Wie Sie diese Ablängen Bedenken Sie den Code entfernen wird kleiner.

Wenn Sie mehr Erfahrung bekommen Sie mehr Anwendungen für AOP sehen, aber zunächst würde ich vorschlagen, schreiben sie, dann Refactoring AOP verwendet wird.

Verwenden von Eclipse, wenn mit Hilfe von Java, für AOP, als AJDT Plugin wird sehr nützlich sein, um zu sehen, wo Sie Aspekte hinzufügen.

Aspect-Oriented Programming ist ein eingängiger Schlagwort zum Einfügen von Aktionen (die so genannten „Beratung“) in Methoden oder Funktionen an den wichtigen Punkten wie Anrufe und kehrt, unter anderem. Ich habe ein großes Problem mit AOP, weil es alle Abstraktionsbarrieren errichtet in die Sprache verletzt. Es gibt keine Möglichkeit für ein Modul zu sagen, „das ist, was ein Aspekt kann Chaos mit und das ist, was ein Aspekt kann nicht mess with.“ Als Ergebnis riskieren Sie interne Invarianten zu verletzen, und Sie zerstören das Prinzip der modularen Argumentation (können Sie ein Modul verstehen, ohne etwas zu verstehen, die aber die Schnittstellen der anderen Module es Importe).

Vor einigen Jahren Raymie Stata hat eine brillante Doktorarbeit darüber, wie objektorientierte Sprachen steuern könnte Subklassifizieren und verhindern, dass es zu verletzen Schlüssel Invarianten. Die entsprechende Arbeit für AOP hat noch geschrieben werden.

Während wie bei jeder anderen Idee, dass Gewinne Währung hat AOP einige spektakuläre Erfolge genossen (zB Protokollierung Nachrüstung an eine Anwendung nicht mit der Protokollierung im Auge), im Großen und Ganzen würde ich fordere Sie auf confine Ihre Nutzung von AOP zu sehr einfachen Fällen . Oder noch besser, nur nein sagen zu aspektorientierte Programmierung.

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