Domanda

Qualcuno sa quali funzionalità AOP sono diverse tra AspectJ e PostSharp (sì, lo so che sono per lingue e piattaforme diverse)?

Sto cercando di capire che tipo di cose AspectJ consentirebbe a PostSharp di non fare, e viceversa.

È stato utile?

Soluzione

PostSharp 2.0 è molto più vicino ad AspectJ di PostSharp 1.5. Il confronto tra PostSharp 1.5 e Spring AOP era giustificato, ma non lo è più con PostSharp 2.0.

Tuttavia, ci sono ancora alcune forti differenze nell'approccio.

  1. L'approccio ai tagli di punti è radicalmente diverso. AspectJ fornisce un linguaggio pointcut complesso. PostSharp fornisce un sistema di punti di dichiarazione dichiarativo di base ma consente di sviluppare tagli di punti imperativi, in modo da poter scrivere codice (in genere usando System.Reflection) che valuta il punto di taglio al momento della compilazione. Quindi, invece di avere un linguaggio pointcut, PostSharp supporta semplicemente C # o Linq.

  2. In realtà non esiste un punto di taglio condizionale (cflow).

  3. PostSharp supporta la semantica di ordine superiore, come eventi e proprietà. AspectJ, per quanto ne so, non lo è (poiché non vi sono eventi o proprietà in Java afaik).

  4. Gli aspetti di PostSharp sono in genere istanziati e inizializzati al momento della creazione, quindi serializzati nell'assemblaggio e deserializzati in fase di esecuzione per essere eseguiti. Ciò consente all'aspetto di "inizializzare" al momento della creazione, quindi le prestazioni di runtime sono migliori. Permette anche di eseguire logiche arbitrariamente complesse al momento della compilazione (in genere inizializzazione, valutazione pointpoint, validazione joinpoint).

  5. PostSharp offre un vero supporto per la composizione degli aspetti, ovvero è possibile applicare più aspetti o consigli allo stesso joinpoint in modo predittivo. PostSharp è progettato per uno scenario multi-vendor, in cui più fornitori di aspetti non si conoscono. Ha un sistema complesso di dipendenze, in cui gli sviluppatori / venditori di aspetti possono specificare vincoli, requisiti e conflitti in modo dichiarativo

Dalla versione 2.0, PostSharp viene fornito con strumenti IDE che coprono in parte la funzionalità di "AJDT" per Eclipse.

Altri suggerimenti

Dalla loro documentazione di PostSharp: http://doc.postsharp.org/ 1.5 / ## PostSharp.HxS / UserGuide / Laos / AspectKinds / overview.html

Tipi supportati di punti di unione: http://doc.postsharp.org/ 1.5 / ## PostSharp.HxS / UserGuide / CoreLibrary / Codeweaver / overview.html

AspectJ offre molta più flessibilità poiché i punti di unione possono essere decisamente più complessi, al fine di fare quello che vuoi.

Sembra che cflow, ad esempio, non possa essere eseguito con PostSharp.

È come Spring in quanto è una versione ridotta di AOP per facilitarne l'utilizzo.

Aggiornamento: anche se non credo che sia completamente aggiornato, questa è una buona idea su ciò che AspectJ supporta: http://www.eclipse.org/aspectj/doc/released/ progguide / index.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top