Oppure

Loading
16/05/13 18:36
tuttodiMC
Salve a tutti ho trovao su wikipedia la definizione della programmazione orientata agli aspetti, di AspectJ e della sua relazione con la progammazione OOP, ma non ho ben capito a cosa serve? Qualcuno saprebbe spiegarmelo?
aaa
18/05/13 10:04
netarrow
Non ho usato la AOP in java con aspectJ, ma in C# con PostSharp.

In generale serve a incapsulare tutte quelle funzionalità trasversali a tutti gli oggetti.

Ti scrivo due esempio in C#, aspectJ userà altre sintassi probabilmente ma i concetti dovrebbero restare gli stessi.

Ad esempio la gestione degli errori, invece che scrivere in ogni metodo

public void blabla() {
try {
	...
} catch(Exception ex) {
	Logger.LogError("Errore in blabla()", ex)
}
}
...


uno può crearsi un aspetto ExceptionHandlerAspect e fare

[ExceptionHandlerAspect]
public void blabla() {
	...
}


E il codice di ExceptionHandlerAspect, nel caso di esempio con PostSharp è qualcosa del genere

public class ExceptionHandlerAspect : OnExceptionAspect
{
   
  public override void OnException(MethodExecutionArgs args)
    {
       // gestisci in generale le eccezioni accedendo alle informazioni da args
}
}


Le funzionalità sintetizzabili in un aspetto sono quindi tutte quelle che aprono o chiudono la chiamata ad un oggetto quindi validazione, caching, autorizzazioni, profiling e simili.

La AOP poi può essere implementata o a compile-time come fanno appunto aspectJ e postsharp, quindi il tuo codice verrà modificato al volo in compilazione aggiungendo in base agli aspetti codice prima e dopo il codice originale del tuo metodo.

Oppure si possono implementare con la dependency injection, dove aggiungi degli interceptor nel dependency container che wrappano la chiamata ai tuoi oggetti col codice dell'aspetto.
Ultima modifica effettuata da netarrow 18/05/13 10:05
aaa
24/05/13 17:29
tuttodiMC
La sintassi con AspectJ è identica. Mi interessa molto PostSharp. Sapresti indicarmi una buona guida per impararlo?
aaa
25/05/13 21:21
netarrow
Le basi le ho imparate qui:

pluralsight.com/training/courses/…

pluralsight.com/training/courses/…

Il resto cercando in rete in volta in volta e nella documentazione sul sito di postsharp.
aaa