Aspect-Oriented Programming with Dependency Injection Mark Seemann - - PowerPoint PPT Presentation
Aspect-Oriented Programming with Dependency Injection Mark Seemann - - PowerPoint PPT Presentation
Aspect-Oriented Programming with Dependency Injection Mark Seemann @ploeh Cross-Cutting Concerns Security Security Auditing Auditing Logging Logging Caching Caching Metering Metering Stability patterns Stability patterns Transactions
Cross-Cutting Concerns
Security Auditing Logging Caching Metering Stability patterns Transactions Security Auditing Logging Caching Metering Stability patterns Transactions
Objective
- Single Responsibility Principle
- Open/Closed Principle
- Liskov Substitution Principle
- Interface Segregation
Principle
- Dependency Inversion
Principle
SOLID
- Don’t Repeat Yourself
DRY
Staying SOLID
- Single Responsibility Principle
- Open/Closed Principle
- Liskov Substitution Principle
- Interface Segregation
Principle
- Dependency Inversion
Principle
SOLID
- Don’t Repeat Yourself
DRY
Prerequisite
Program to an interface, not an implementation
- Design
Patterns, 1995
Conjecture
- It’s always possible to apply a Decorator to an
interface
Using Decorators to add aspects
IFoo ConcreteFoo Client
Using Decorators to add aspects
IFoo AuditingFoo IFoo ConcreteFoo Client
Using Decorators to add aspects
IFoo SecureFoo IFoo AuditingFoo IFoo ConcreteFoo Client
DEMO
Staying SOLID with Decorators
Staying SOLID
- Single Responsibility Principle
- Open/Closed Principle
- Liskov Substitution Principle
- Interface Segregation
Principle
- Dependency Inversion
Principle
SOLID
- Don’t Repeat Yourself
DRY
Staying DRY
- Single Responsibility Principle
- Open/Closed Principle
- Liskov Substitution Principle
- Interface Segregation
Principle
- Dependency Inversion
Principle
SOLID
- Don’t Repeat Yourself
DRY
Dynamic interception
From here
- n, dynamic
interception is required Commonly supplied by a DI Container
DI Containers with Interception
Castle Windsor Unity Spring.NET LinFu
DEMO
Using a DI Container
Interception
Xyz
Interception
Xyz IFoo XyzFoo Xyz
Interception
Xyz IFoo XyzFoo Xyz IBar XyzBar Xyz
Interception
Xyz IFoo XyzFoo Xyz IBar XyzBar Xyz IBaz XyzBaz Xyz
DEMO
Adding interceptors
Pointcut
Xyz Abc Æøå IFoo ConcreteFoo IBar ConcreteBar IBaz ConcreteBaz
Pointcut
Xyz Abc Æøå IFoo ConcreteFoo IBar ConcreteBar IBaz ConcreteBaz Match
DEMO
Adding a pointcut
Objective
- Single Responsibility Principle
- Open/Closed Principle
- Liskov Substitution Principle
- Interface Segregation
Principle
- Dependency Inversion
Principle
SOLID
- Don’t Repeat Yourself
DRY
Staying SOLID only requires loose coupling Staying DRY requires dynamic interception
MARK SEEMANN
http://blog.ploeh.dk/ @ploeh