160 likes | 269 Views
Aspect-oriented programming. robert maclean www.sadev.co.za ∞ @ rmaclean ∞ robert@sadev.co.za. Agenda. What, when, why of AOP? How is it implemented in PostSharp and how does it work? Alternatives to PostSharp Looking to the future Discussion. Every project has “boring” code.
E N D
Aspect-oriented programming robertmaclean www.sadev.co.za ∞ @rmaclean ∞ robert@sadev.co.za
Agenda • What, when, why of AOP? • How is it implemented in PostSharp and how does it work? • Alternatives to PostSharp • Looking to the future • Discussion
Every project has “boring” code source: Microsoft Application Architecture Guide, 2nd Edition
AOP Details • Goal to make cross cutting concerns easy to implement and focus on business code • Xerox PARC in 2001 • AspectJ • Many implementations now days • AKA: AOSD
Scenario code – simple prime calculator Customer says it’s wrong. We need logging to diagnose…
Let’s add logging – trace input & output Easy to miss some places Lots of repetition of code Need to teach this Not portable 5 extra lines of code
What about some procedural help? Not junior friendly Need 1 per signature 15 extra lines of code
So how does aspects solve that? Feel like you are missing something? 1 extra line of code
Under the hood IL modified Source: .NET Reflector 6.8
Many ways to implement AOP in .NET currently • Popular: • IL Weaving @ compile or JIT • PostSharp & Mono.Cecil • Less: • Hooking into .NET profiler API • Proxies
Hooking the profiler • Disadvantages • Poor performance • Exceptionally complex • Not designed for this • Advantages • Nothing is safe from it’s power • Solves some fringe cases (i.e. mocking static methods) Application COM API Profiler CLR Environmental
Proxies Proxied Normal Method Call Method Call Proxy Object • Disadvantages • Complex with ContextBoundObject • Perf is worse than IL weaving • Advantages • Using DI it can be easier • Perf is better than .NET profiler Object
Future: Post Roslyn Theory • Roslyn • Next version of C#/VB “compiler” • Written in managed code • Available as a service • Post Roslyn • Insert new language semantics • Approach the AspectJ style
Summary • AOP • Way to untangle cross cutting concerns out of business code • Great re-use • Can be easy to use (depending on implementation) • Many options to do this!