2009-05-11 5 views
8

Sono perplesso sul motivo per cui l'adozione di AO è stata così lenta. Esistono molte e abbondanti implementazioni là fuori per le lingue predominanti. La mia ipotesi è che, come OO nel suo giorno, è sufficiente un cambio di paradigma che le persone non riconoscano i luoghi in cui potrebbe essere di aiuto.Quali sono i tuoi usi reali per la programmazione orientata agli aspetti?

Quindi, oltre la registrazione non invasiva, quali sono alcuni dei modi in cui è stato utilizzato o si prevede di utilizzare AO, che riduce la complessità, migliora la manutenzione, migliora il sistema "ilities"?

risposta

2

Gestione transazioni. So che si tratta di un uso canonico di AOP, ma in realtà lo fa brillare se usato per quello.

E mentre non ho avuto l'opportunità di usarlo in una situazione del mondo reale, vedo "intorno-consiglio" come INCREDIBILMENTE potente, in particolare per il valore aggiunto che semplifica la complessità del codice rimuovendo la necessità di molti controlli per condizioni rare.

0

Nella mia esperienza, con Spring AOP sembra essere abbastanza comune.

Penso che la difficoltà sia che le persone non sono abituate a pensare in termini di aspetti, e la tessitura del codice, anche in fase di compilazione, può essere alquanto spaventosa, poiché è più difficile vedere che cosa effettivamente influisce su ciascun metodo, ad esempio, esp se si utilizza un misto di tessitura in fase di compilazione e in fase di esecuzione.

L'ho usato in situazioni in cui ho un controller, e aggiungo se è un servlet o un webservice, per esempio. L'ho anche usato per astrarre il database, quindi le connessioni al database e le query ottimizzate per il database potrebbero essere inserite nell'applicazione.

1

Sono d'accordo per Spring AOP.

AOSD (non parliamo più di AOP non so esattamente perché) è davvero utile per l'architettura middleware/service oriented in cui si dispone già, per progettazione, di una modularità.

L'ho usato in questo contesto per i servizi di telefonia con alcuni servizi di fatturazione davvero limitati.

L'ho anche usato per costruire una sorta di interprete/compilatore modulare per eseguire alcune analisi su alcuni codici.

A mio parere, un problema sono i linguaggi di riferimento che a volte potrebbero essere difficili da descrivere esattamente dove si desidera applicare il proprio consiglio. Un altro problema è la composizione, non so se è stato risolto ma potrebbe essere difficile da capire quando ordini i tuoi consigli ....

1

AOP è comune, tranne che raramente le persone lo chiamano AOP. Guarda tutti i posti nella programmazione .NET dove vengono usati gli attributi. Gli attributi sono essenzialmente comportamenti trasversali che possono essere applicati a molte classi/metodi/parametri.

Più recentemente, la piattaforma ASP.NET MVC ha adottato un uso intensivo di attributi, per una vasta gamma di componenti trasversali quali sicurezza, associazione dati e gestione delle eccezioni.

+0

Quindi quale sarebbe un esempio di attributi di mondo reale che lo illustrano? –

+0

Es. in ASP.NET MVC, è possibile taggare una classe o un metodo Controller con l'attributo [Authorize] e il framework assicurerà che il richiamo del controller attivi l'autorizzazione a verificarsi (ad esempio reindirizzamento alla pagina di accesso). Ce ne sono molti altri ... – DSO

3

Attualmente sto usando AOP tramite EntLib/Unità nella produzione:

  • registrazione
  • caching
  • sicurezza
  • eccezione segnalazione
  • contatori delle prestazioni

Date guardare http://www.agileatwork.com/unit-of-work-with-unity-and-aspnet-mvc/ per un imp lementation dell'unità di modello di lavoro con AOP

[UnitOfWork] 
public void Process(Job job) 
{ 
    ... 
} 
+0

Per aiutare nella conversione di un oggetto in un soggetto da utilizzare nel modello di osservatore. Aggiungendo una chiamata per notificare alla fine di tutti i metodi di mutatore. –