26
Aspect-Oriented Programming with Dependency Injection Mark Seemann @ploeh

Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

  • Upload
    buidung

  • View
    219

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

Aspect-Oriented Programming with Dependency Injection

Mark Seemann

@ploeh

Page 2: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

Cross-Cutting Concerns

Secu

rity

Au

dit

ing

Logg

ing

Cac

hin

g

Met

erin

g

Stab

ility

pat

tern

s

Tran

sact

ion

s

Secu

rity

Au

dit

ing

Logg

ing

Cac

hin

g

Met

erin

g

Stab

ility

pat

tern

s

Tran

sact

ion

s

Page 3: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

Objective

•Single Responsibility Principle

•Open/Closed Principle

•Liskov Substitution Principle

•Interface Segregation Principle

•Dependency Inversion Principle

SOLID

•Don’t Repeat Yourself DRY

Page 4: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

Staying SOLID

•Single Responsibility Principle

•Open/Closed Principle

•Liskov Substitution Principle

•Interface Segregation Principle

•Dependency Inversion Principle

SOLID

•Don’t Repeat Yourself DRY

Page 5: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

Prerequisite

Program to an interface, not an implementation

- Design Patterns,

1995

Page 6: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

Conjecture

• It’s always possible to apply a Decorator to an interface

Page 7: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

Using Decorators to add aspects

IFoo

ConcreteFoo

Client

Page 8: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

Using Decorators to add aspects

IFoo

AuditingFoo

IFoo

ConcreteFoo

Client

Page 9: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

Using Decorators to add aspects

IFoo

SecureFoo

IFoo

AuditingFoo

IFoo

ConcreteFoo

Client

Page 10: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

DEMO

Staying SOLID with Decorators

Page 11: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

Staying SOLID

•Single Responsibility Principle

•Open/Closed Principle

•Liskov Substitution Principle

•Interface Segregation Principle

•Dependency Inversion Principle

SOLID

•Don’t Repeat Yourself DRY

Page 12: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

Staying DRY

•Single Responsibility Principle

•Open/Closed Principle

•Liskov Substitution Principle

•Interface Segregation Principle

•Dependency Inversion Principle

SOLID

•Don’t Repeat Yourself DRY

Page 13: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

Dynamic interception

From here on, dynamic interception is required

Commonly supplied by

a DI Container

Page 14: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

DI Containers with Interception

Castle Windsor

Unity

Spring.NET LinFu

Page 15: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

DEMO

Using a DI Container

Page 16: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

Interception

Xyz

Page 17: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

Interception

Xyz

IFoo

XyzFoo

Xyz

Page 18: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

Interception

Xyz

IFoo

XyzFoo

Xyz

IBar

XyzBar

Xyz

Page 19: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

Interception

Xyz

IFoo

XyzFoo

Xyz

IBar

XyzBar

Xyz

IBaz

XyzBaz

Xyz

Page 20: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

DEMO

Adding interceptors

Page 21: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

Pointcut

Xyz

Abc

Æøå

IFoo

ConcreteFoo

IBar

ConcreteBar

IBaz

ConcreteBaz

Page 22: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

Pointcut

Xyz

Abc

Æøå

IFoo

ConcreteFoo

IBar

ConcreteBar

IBaz

ConcreteBaz

Match

Page 23: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

DEMO

Adding a pointcut

Page 24: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

Objective

•Single Responsibility Principle

•Open/Closed Principle

•Liskov Substitution Principle

•Interface Segregation Principle

•Dependency Inversion Principle

SOLID

•Don’t Repeat Yourself DRY

Page 25: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

Staying SOLID only

requires loose

coupling

Staying DRY requires dynamic

interception

Page 26: Aspect-Oriented Programming with Dependency Injectiongotocon.com/dl/...AspectOrientedProgrammingWithDependencyInje… · Objective •Single Responsibility Principle •Open/Closed

MARK SEEMANN

http://blog.ploeh.dk/

@ploeh