160 likes | 283 Vues
This presentation explores the fundamentals of Aspect-Oriented Programming (AOP), detailing its purpose, implementation using PostSharp, and examining alternatives. It addresses the challenges of handling cross-cutting concerns in software development and promotes effective practices for managing "boring" repetitive code. The session discusses the evolution of AOP, highlights various implementation techniques, and delves into future possibilities, including advancements with Roslyn. Join us for an enlightening discussion on enhancing code quality and maintainability.
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!