se è stato progettato correttamente è utile AOP? [duplicare]

3

Non ne so molto sulla programmazione orientata agli aspetti (AOP), ma ho esaminato alcuni esempi e mi sembra più uno strumento di debug o di patching. Ho esaminato gli esempi e non riesco a pensare a dove li userò in -my-code.

Supponendo che il codice sia stato progettato correttamente e che il linguaggio lo supporti (come AspectJ) quali sono gli usi del mondo reale in cui l'utilizzo di AOP è di buon design e non può essere fatto facilmente con classi / codice / software tradizionali ben progettati?

    
posta Community 02.03.2012 - 14:36
fonte

3 risposte

4

AOP risolve alcuni problemi, ma non è utile in tutti i casi.

Tipicamente, AOP fornisce strumenti per gestire la separazione delle preoccupazioni. In molti progetti, ti troverai a scrivere lo stesso codice ripetutamente. Un tipico esempio è il controllo dell'accesso:

if(!user.hasAccess(functionality)) throw new SecurityException();
// Functionality implementation.

Questo non è un codice pulito, perché il problema di controllare l'accesso è distribuito su tutto il codice base. È soggetto a errori, che non è quello che vuoi in generale, ma anche peggio qui, perché un errore è un difetto di sicurezza.

AOP è definitivamente utile qui, perché ti permetterà di definire la sicurezza in un punto e la funzionalità in un altro.

Troverai altri schemi, come la connessione a un database, l'esecuzione di alcune operazioni e la disconnessione. Dovrai gestire tutti i casi speciali (errore SQL, errore di rete, ecc.) E assicurarti di eseguire il rollback in modo pulito se succede qualcosa e disconnetti correttamente. AOP potrebbe anche aiutarti in questo modo, evitando la necessità di disporre di tutte le regole di gestione degli errori distribuite su più funzionalità.

Un altro problema è la sincronizzazione. Poiché il sistema diventa sempre più distribuito (multicore, rete, cloud, GPGPU, ecc.) È sempre più importante.

In definitiva, AOP è utile in alcuni casi.

    
risposta data 02.03.2012 - 15:26
fonte
1

Un sacco di quadri e prodotti usano AOP "sotto il cofano". Ad esempio, è molto usato in primavera per cose come la gestione delle transazioni e il caching dei metodi. Hibernate sfrutta il proxy dinamico in stile AOP per abilitare le collezioni persistenti.

    
risposta data 02.03.2012 - 16:14
fonte
0

Scommetto che stai usando AOP nel tuo codice (o che hai nel passato) e non lo sapevi nemmeno. I framework MVC hanno spesso filtri utilizzati in modo molto simile ad AOP e persino qualcosa come un HttpModule in ASP.NET che chiamerei AOP (non sono sicuro di quale sia l'analogico nel mondo Java).

Il debugging, la registrazione e la tracciabilità sono certamente le "killer app" di AOP, ma ogni volta che si dispone di codice standard o ripetitivo che non è possibile eseguire il refactoring con le normali tecniche OO è un ottimo posto per considerare AOP.

Non è un proiettile d'argento, ma è un ottimo strumento da avere nella tua casella degli strumenti SOLID.

    
risposta data 02.03.2012 - 19:18
fonte

Leggi altre domande sui tag