Il registro attivo di Ruby on Rails è un esempio di programmazione orientata agli aspetti?

3

Da Pulisci codice , sulle preoccupazioni trasversali:

Note that concerns like persistence tend to cut across the natural object boundaries of a domain. You want to persist all your objects using generally the same strategy, for example, using a particular DBMS...

Active Record è un esempio di programmazione orientata all'aspetto?

In AOP, modular constructs called aspects specify which points in the system should have their behavior modified in some consistent way to support a particular concern. This specification is done using a succinct declarative or programmatic mechanism.

Se Active Record è un esempio di AOP, qual è l'aspetto? È la dichiarazione di classe che eredita da Active Record?

class Foo < ActiveRecord::Base
    
posta B Seven 26.03.2012 - 14:52
fonte

1 risposta

3

No, l'ereditarietà non può davvero gestire i problemi trasversali: quando parlano di taglio incrociato, in sostanza, le gerarchie di oggetti multiple sono le cose che vengono tagliate trasversalmente.

La programmazione orientata agli aspetti è usata principalmente per parlare di una sorta di estensione di un singolo linguaggio di ereditarietà per gestire i problemi trasversali. È un po 'meno utile aggiungere AOP a un linguaggio di ereditarietà multipla, poiché l'ereditarietà multipla può gestire alcuni dei problemi risolti dall'AOP (sebbene, a seconda dell'implementazione AOP, potrebbe consentire cose come l'aggiunta dell'implementazione al codice da un modulo di terze parti). / p>

Ruby non ha ereditarietà multipla, ma ha mixin e può anche risolvere alcuni dei problemi di AOP.

Tuttavia, AOP può comunque fare anche altre cose. Pensa alla registrazione come una preoccupazione trasversale. Con AOP è possibile aggiungere la registrazione alle classi senza toccare la fonte della classe originale. Questo viene eseguito dall'implementazione AOP che trova tutte le posizioni nel codice che corrispondono ai criteri in base ai quali deve avvenire la registrazione e alle chiamate ("tessere") per eseguire la registrazione.

Questo è possibile anche in Ruby senza estensioni AOP speciali, perché è molto dinamico. È possibile modificare una classe (che in precedenza non aveva alcuna nozione di registrazione) in fase di esecuzione per chiamare il codice di registrazione nel momento in cui vengono eseguiti tutti i metodi. Il codice che hai scritto per fare questo sarebbe gestire una preoccupazione trasversale. L'"aspetto" sarebbe la registrazione. In Ruby le classi di cui hai bisogno non sono nemmeno le classi che hai scritto. Quindi questo è più di quanto possa essere fatto tramite ereditarietà singola o multipla o mixin (anche se, per essere un po 'pedante, puoi fare cose orientate all'aspetto e propagare il codice che lo implementa tramite ereditarietà o mixin, quelle non sono funzionalità del linguaggio sufficientemente potenti in loro stessi per consentire AOP).

    
risposta data 26.03.2012 - 19:18
fonte

Leggi altre domande sui tag