aspect-oriented programming and depedency injection

Post on 19-May-2015

1.512 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

From the Dynamic Languages World 2008 in Karlsruhe. This session introduces two powerful techniques which support a clean design of enterprise applications and the implementation of a domain-driven design. In addition to the theoretical background you will learn how to take advantage of AOP and DI in your own projects. The examples given are based on the FLOW3 framework.

TRANSCRIPT

Inspiring people toshareAOP and Dependency Injection

Robert Lemke | TYPO3 Association

AOP and Dependency Injection

Overview

About me, the flow and buzz ...

Unit Testing

Dependency Injection

Aspect-Oriented Programming

AOP and Dependency Injection

About me

Robert Lemke, born 27/05/1976

beautiful code evangelist

"chief architect" of TYPO3 5.0 and FLOW3

coffee junkie

married, no children, 1 espresso machine

AOP and Dependency Injection

Robert Lemke, born 27/05/1976

beautiful code evangelist

"chief architect" of TYPO3 5.0 and FLOW3

coffee junkie

married, no children, 1 espresso machine

HINTAbout me

AOP and Dependency Injection

About FLOW3

Offspring from the development of TYPO3 5.0

PHP-based enterprise application framework

Enterprise: Information intensive applications with focus on domain logic

FLOW3 is ready to go, with a default layer architecture, object management, security etc.

Special support for Domain-Driven Design

AOP and Dependency Injection

About the buzz

AOP, DI, DDD, TDD, XP, ... ?

YAGNI ?

IMYLME !

AOP and Dependency Injection

The Demo Package

Demo

AOP and Dependency Injection

Unit Testing

Testing is important (as if you didn't know that)

But not every code can be tested

Dependencies make your developer's life hard

AOP and Dependency Injection

Unit Testing

Dependencies

Problem: Classes explicitly refer to other classes:

AOP and Dependency Injection

Unit Testing

Dependencies

Try to test this class:

AOP and Dependency Injection

Unit Testing

Dependencies

Unit Testing: You want to test a small unit

You don't want to test

The Simple File Logger

The Card Repository

AOP and Dependency Injection

Unit Testing

Dependencies

Unit Testing: You want to test a small unit

You want to test

if the action returns a string representation of the random card it gets from the repository

AOP and Dependency Injection

Dependency Injection

A class doesn't ask for the instance of another class but gets it injected

This methodology is referred to as the "Hollywood Principle":"Don't call us, we'll call you"

Enforces loose coupling and high cohesion

Allows you to mock collaborators

Makes you a better programmer

AOP and Dependency Injection

Dependency Injection

Constructor without Dependency Injection

AOP and Dependency Injection

Dependency Injection

Component with Constructor Injection

AOP and Dependency Injection

Dependency Injection

Component with Setter Injection

AOP and Dependency Injection

Dependency Injection

Component Manager

Manages the whole object lifecycle

Provides so-called "IoC Container"

Components: objects

Components can be configured

AOP and Dependency Injection

Dependency Injection

Autowiring

FLOW3 tries to autowire constructor arguments and arguments of inject* methods

The type of the component to be injected is determined by the argument type (type hinting)

Autowiring does not work with Setter Injection through regular setters (set* methods)

Dependencies are only autowired if no argument is passed explicitly

AOP and Dependency Injection

Dependency Injection

Component scope

Component objects always live in a certain scope

Currently supported scopes are:

Singleton - Only one instance exists during one script run

Prototype - Multiple instances are possible

AOP and Dependency Injection

Dependency Injection

Component scope

The scope can be defined through

an annotation in the component class (recommended)

through the component configuration in a Components.php file

The default scope is "Singleton"

AOP and Dependency Injection

Components

Component scope

AOP and Dependency Injection

Components

Creating Prototypes

Dependency Injection can be used in almost any case, there's no need to call getComponent()

But what if you need to instantiate a component within a method?

AOP and Dependency Injection

Components

Creating Prototypes

Solution A: Call getComponent()

AOP and Dependency Injection

Components

Creating Prototypes

Solution B: Call a factory method

AOP and Dependency Injection

Aspect Oriented Programming

AOP is a programming paradigm

complements OOP by separating concerns to improve modularization

OOP modularizes concerns: methods, classes, packages

AOP addresses cross-cutting concerns

AOP and Dependency Injection

Aspect Oriented Programming

Cross-cutting concerns

Presentation

Domain

Data source

AOP and Dependency Injection

Aspect Oriented Programming

Cross-cutting concerns

Presentation

Domain

Data source

The concerns

live here

AOP and Dependency Injection

Aspect Oriented Programming

Cross-cutting concerns

Some Domain Model

Security

Logging

CONCERNSX-ING

AOP and Dependency Injection

PHP's missing features

With AOP you can

centralize and cleanly separate your concerns

intercept any method call

add new behavior to legacy code without touching it

do a lot of dirty tricks

Aspect Oriented Programming

AOP and Dependency Injection

Aspect Oriented Programming

Some Vocabulary

Advice

encapsulated code, to be re-used

Joinpoint

places in the code where advice can be applied

Pointcut

identifies set of joinpoints where advice should be applied

Aspect

groups advices and pointcuts

AOP and Dependency Injection

The AOP Hello World Classic Demo

Demo

AOP and Dependency Injection

Aspect Oriented Programming

Applications for AOP

Logging

Security

Transactions

Persistence

Statistics

In the Domain Layer

AOP and Dependency Injection

Aspect Oriented Programming

Behind the Scenes

Dynamic Proxy Classes

Component Manager delivers the right implementation

Only works if "new" is not used

AOP and Dependency Injection

More ...

AOP and Dependency Injection

More

Where can I get FLOW3?

From our Subversion repository:

https://svn.typo3.org/FLOW3/Distribution/trunk/

AOP and Dependency Injection

More ...

DEV3

AOP and Dependency Injection

More ...

AOP Browser

AOP and Dependency Injection

More ...

Known Issues

FLOW3 (or rather PHP) currently causesApache crashes - why ever ...

Tests consume a lot of memory(> 400 MB)

Access is comparably slow even inProduction context (~ 3 req/s) andneeds much memory (~ 20 MB)

Many aspects are work in progress andneither optimized nor finished

AOP and Dependency Injection

Links

FLOW3 Websitehttp://flow3.typo3.org

TYPO3 Forgehttp://forge.typo3.org

T3CASThttp://typo3.org/podcasts/robert

AOP and Dependency Injection

So long and thanks for the fish

Questions

top related