Aspect-oriented programming robert maclean www.sadev.co.za ∞ @rmaclean ∞ robert@sadev.co.za
How is it implemented in PostSharp and how does it work? 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
Many implementations now days AKA: AOSD 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
Demo time…
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 Normal Proxied Method Call Method Call Object Proxy 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 Next version of C#/VB “compiler” Written in managed code Available as a service Post Roslyn Insert new language semantics Approach the AspectJ style
AOP Way to untangle cross cutting concerns out of business code 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!
Questions & Discussions