martedì 12 luglio 2011

Chiara trasversali preoccupazioni con la programmazione Aspect Oriented in. NET 1° Parte

Come utilizzare il PostSharp AOP biblioteca per incapsulare trasversali preoccupazioni in moduli efficiente e riutilizzabile.


Da Eric Vogel

Ci sono una serie di librerie AOP. NET Framework, sia open source e commerciali. Sarò copertura PostSharp, che è una libreria molto flessibile AOP. NET che ha sia una versione gratuita comunità così come una versione professionale.Prima di tutto rivedere i principi fondamentali di Aspect Oriented Programming.

Concetti di base e AOP PostSharp
Un aspetto rappresenta un pezzo della croce logica di taglio, come la registrazione di entrata e uscita di una chiamata al metodo. Un aspetto è l'esecuzione della consulenza di pointcut. Consigli definisce cosa viene eseguito e quando, e dove jointpoint rappresenta un consiglio viene eseguito. Un jointpoint potrebbe essere una chiamata di metodo, una proprietà getter o setter, un costruttore di oggetti, e simili. Un pointcut è una composizione di jointpoints differenti in cui la consulenza verrà eseguito. Ora che avete capito i concetti di base di immersione l'AOP modello andiamo su come utilizzare PostSharp di utilizzare il potere della AOP nel tuo. NET.

PostSharp utilizza una tecnica nota come IL statico tessitura al fine di collegare gli aspetti a jointpoints. La tessitura attuale è fatto in un post processo di generazione. Il vantaggio principale di questa strategia è che il codice risultante viene eseguito molto rapidamente. Nel Messaggio Sharp un aspetto viene creato come un attributo che può essere collegato ad un jointpoint. Consigli sono implementate come metodi all'interno di un aspetto. Esempi di consigli in PostSharp sono i punti di entrata e di uscita di un metodo di costruzione, oggetto e tipo di inizializzazione.

Ora iniziare a implementare il nostro proprio aspetto che ci permetterà di incapsulare la logica di registrazione per la nostra applicazione.

Esempio di registrazione
La registrazione è uno dei più comuni trasversali preoccupazioni in un'applicazione. Utilizzando la programmazione orientata agli oggetti tradizionali che spesso finiscono con un codice simile al seguente:

System.Diagnostics.Trace.WriteLine ("Avvio di X metodo: con argomenti Y, Z ,..."); try {logica di business / / core} catch (Exception ex) {System.Diagnostics.Trace.WriteLine (String.Format ("Si è verificata un'eccezione nel metodo {0}: {1}", ex.StackTrace, "X"));} System.Diagnostics.Trace.WriteLine ("X metodo Rifinito con valore Y di ritorno"); 

Il codice non sembra poi così male, ma potrebbe finire per essere duplicati per tutta la maggior parte dei metodi nell'applicazione. Inoltre, la registrazione non è un problema della logica core business. Utilizzando AOP siamo in grado di ridurre la quantità di codice, migliorare la chiarezza del codice e separare ulteriormente le preoccupazioni di registrazione e logica di business. Il risultato finale è che ogni metodo possibile accedere annotando con un attributo di aspetto Registro.

[Log] public static int Aggiungi (int x, int y) {return x + y;} 

Come si può vedere il metodo Add non sa nulla di registrazione né troppo bisogno. Spostiamo la preoccupazione di registrazione per l'aspetto Log. Facciamo un passo indietro e andare oltre la piena attuazione degli aspetti Log. Prima di tutto scaricare e installare PostSharp . Avanti creare una nuova applicazione e aggiungere un riferimento a PostSharp.Ora siamo pronti per creare la nostra classe LogAttribute che rappresenterà il nostro aspetto Log.

Per prima cosa aggiungere il nostro namespace necessari.

utilizzando PostSharp.Aspects; using System.Diagnostics; 

Successivamente applicare l'attributo Serializable alla nostra classe aspetto, che è un prerequisito per qualsiasi aspetto PostSharp attuate.

[Serializable] LogAttribute public class: OnMethodBoundaryAspect { 

Poi si aggiungono consigli per l'aspetto di intercettare l'ingresso e l'uscita jointpoints del metodo di destinazione. Nel consiglio di entrata che in uscita sarà "X metodo di partire con argomenti: Y", dove X è la firma del metodo.

   pubblico OnEntry override void (args MethodExecutionArgs) {Trace.Write (string.Format ("Avvio metodo {0}", args.Method)); Trace.Write ("con argomenti:"); for (int i = 0; i 

In uscita il consiglio che in uscita: "X metodo Rifinito con valore Y di ritorno"

   public override void OnExit (MethodExecutionArgs args) {Trace.WriteLine (string.Format ("metodo finiti {0} con valore di ritorno {1}", args.Method, args.ReturnValue));} 

Infine, si aggiunge un consiglio per intercettare eventuali eccezioni che si sono verificati all'interno della chiamata di metodo e di uscita "Si è verificata un'eccezione nel metodo X: Y", dove X è il nome del metodo e Y è traccia dello stack dell'eccezione. Abbiamo anche impostare il comportamento del flusso di continuare a impedire che ri-lanciare l'eccezione. Basta rimuovere l'assegnazione args.FlowBehavior se si desidera nuovamente l'eccezione nell'applicazione.

  public override void OnException (MethodExecutionArgs args) {Trace.WriteLine (String.Format ("Si è verificata un'eccezione nel metodo {0}: {1}", args.Method.Name, args.Exception.StackTrace)); args.FlowBehavior = FlowBehavior . Continua;}} 

Applicando la registrazione Aspect
Ora che abbiamo definito un aspetto di registrazione, lo si può applicare ad una applicazione di test. La nostra semplice applicazione C # esempio console guida una classe calcolatrice che può aggiungere, sottrarre, moltiplicare e dividere.Innanzitutto creare una cartella aspetti del progetto e aggiungere la classe LogAttribute dall'alto con uno spazio dei nomi di AOPVSMSample.Aspects.

Poi abbiamo implementare la nostra semplice classe Calcolatrice e applicare l'aspetto Log per ciascun metodo.


Corso Visual Studio - Corsi Visual Studio
Corso .Net- Corso Dot.Net - Corso Vb.net
Corso C# - Corso PHP - Corso Joomla


Nessun commento:

Posta un commento