SlideShare a Scribd company logo
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
About me                                        HINT
     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
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
Aspect-Oriented Programming and Depedency 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   The concerns
                                               live here

                                Domain

                              Data source




AOP and Dependency Injection
Aspect Oriented Programming


Cross-cutting concerns


                              Some Domain Model


                                  Security        CONCERNS
                                  Logging           X-ING



AOP and Dependency Injection
Aspect Oriented Programming


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




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 and Depedency 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 causes
           Apache crashes - why ever ...

           Tests consume a lot of memory
           (> 400 MB)

           Access is comparably slow even in
           Production context (~ 3 req/s) and
           needs much memory (~ 20 MB)

           Many aspects are work in progress and
           neither optimized nor finished




AOP and Dependency Injection
Links
     FLOW3 Website
     http://flow3.typo3.org

     TYPO3 Forge
     http://forge.typo3.org

     T3CAST
     http://typo3.org/podcasts/robert




AOP and Dependency Injection
So long and thanks for the fish


Questions




AOP and Dependency Injection
Aspect-Oriented Programming and Depedency Injection

More Related Content

PDF
Aspect Oriented Programming Through C#.NET
PPT
ASPECT ORIENTED PROGRAMING(aop)
PPT
Scala - By Luu Thanh Thuy CWI team from eXo Platform SEA
PPT
Android coding guide lines
PPT
AOP-IOC made by Vi Quoc Hanh and Vu Cong Thanh in SC Team
PDF
Java chapter 1
PPT
C#3.0 & Vb 9.0 New Features
DOCX
Training 8051Report
Aspect Oriented Programming Through C#.NET
ASPECT ORIENTED PROGRAMING(aop)
Scala - By Luu Thanh Thuy CWI team from eXo Platform SEA
Android coding guide lines
AOP-IOC made by Vi Quoc Hanh and Vu Cong Thanh in SC Team
Java chapter 1
C#3.0 & Vb 9.0 New Features
Training 8051Report

What's hot (20)

PDF
[2016/2017] Architectural languages
PDF
OOP Comparative Study
PDF
PRIME OOPSLA12 paper
DOCX
Chapter 5: Names, Bindings and Scopes (review Questions and Problem Set)
PDF
Java chapter 3 - OOPs concepts
DOCX
Chapter 9 & chapter 10 solutions
PDF
Java quick reference
PPT
Introduction to programming languages part 2
PPTX
Python Programming language
PDF
Ijetcas14 385
PDF
The road ahead for architectural languages [ACVI 2016]
PDF
PDF
Handout#05
PPT
C Course Material0209
PDF
[2015/2016] Architectural languages
PDF
Finding latent code errors via machine learning over program ...
PPTX
Unit1 principle of programming language
PPTX
SAP ABAP using OOPS - JH Softech
PDF
WhitePaperTemplate
PPT
Introduction to c_sharp
[2016/2017] Architectural languages
OOP Comparative Study
PRIME OOPSLA12 paper
Chapter 5: Names, Bindings and Scopes (review Questions and Problem Set)
Java chapter 3 - OOPs concepts
Chapter 9 & chapter 10 solutions
Java quick reference
Introduction to programming languages part 2
Python Programming language
Ijetcas14 385
The road ahead for architectural languages [ACVI 2016]
Handout#05
C Course Material0209
[2015/2016] Architectural languages
Finding latent code errors via machine learning over program ...
Unit1 principle of programming language
SAP ABAP using OOPS - JH Softech
WhitePaperTemplate
Introduction to c_sharp
Ad

Viewers also liked (7)

PDF
Current State of TYPO3 Phoenix (T3CON10)
PDF
Fluent Development with FLOW3 1.0
PDF
TYPO3 5.0 - Der aktuelle Stand der Zukunft
PDF
T3DD06 TYPO3 5.0 Brainstorming Results
PDF
The Secret Recipe of a Juicy M
PPTX
Facilitating the Elephant carpaccio exercise
PDF
IPC16: A Practical Introduction to Kubernetes
Current State of TYPO3 Phoenix (T3CON10)
Fluent Development with FLOW3 1.0
TYPO3 5.0 - Der aktuelle Stand der Zukunft
T3DD06 TYPO3 5.0 Brainstorming Results
The Secret Recipe of a Juicy M
Facilitating the Elephant carpaccio exercise
IPC16: A Practical Introduction to Kubernetes
Ad

Similar to Aspect-Oriented Programming and Depedency Injection (20)

PPTX
Performance analysis of synchronisation problem
PDF
WoMakersCode 2016 - Shit Happens
PDF
springtraning-7024840-phpapp01.pdf
PPTX
Spring basics for freshers
PPT
Aspect oriented programming in .Net
PPTX
Aop With Post Sharp
PPTX
Spring Framework Rohit
PDF
Spring Framework
PDF
Spring Framework Tutorial | VirtualNuggets
PPTX
Intro To AOP
PPTX
Spring framework
PPT
Aspect Oriented Software Development
PPTX
Spring fundamentals
PPT
Spring ppt
PPT
Api tools overview
PPTX
Introduction to Aspect Oriented Programming by Donald Belcham
PPTX
Introduction To AOP
PDF
IPC07 Talk - Beautiful Code with AOP and DI
PDF
API Docs Made Right / RAML - Swagger rant
PPTX
Using Spring Boot Effectively in Cloud Foundry
Performance analysis of synchronisation problem
WoMakersCode 2016 - Shit Happens
springtraning-7024840-phpapp01.pdf
Spring basics for freshers
Aspect oriented programming in .Net
Aop With Post Sharp
Spring Framework Rohit
Spring Framework
Spring Framework Tutorial | VirtualNuggets
Intro To AOP
Spring framework
Aspect Oriented Software Development
Spring fundamentals
Spring ppt
Api tools overview
Introduction to Aspect Oriented Programming by Donald Belcham
Introduction To AOP
IPC07 Talk - Beautiful Code with AOP and DI
API Docs Made Right / RAML - Swagger rant
Using Spring Boot Effectively in Cloud Foundry

More from Robert Lemke (20)

PDF
Neos Content Repository – Git for content
PDF
A General Purpose Docker Image for PHP
PDF
Scaleable PHP Applications in Kubernetes
PDF
Flownative Beach - Neos Meetup Hamburg 2022
PDF
GitOps with Flux - IPC Munich 2022
PDF
OpenID Connect with Neos and Flow
PDF
Neos Conference 2019 Keynote
PDF
A practical introduction to Kubernetes (IPC 2018)
PDF
Neos Conference 2018 Welcome Keynote
PDF
A practical introduction to Event Sourcing and CQRS
PDF
Neos Conference 2017 Welcome Keynote
PDF
IPC 2016: Content Strategy for Developers
PDF
Docker in Production - IPC 2016
PDF
Is this Open Source Thing Really Worth it? (IPC 2016 Berlin)
PDF
The Neos Brand (Inspiring Conference 2016)
PDF
Neos - past, present, future (Inspiring Conference 2016)
PDF
Meet Neos Nürnberg 2016: Ja ich will!
PDF
Meet Neos Nürnberg 2016: Hallo Neos!
PDF
Turning Neos inside out / React.js HH
PDF
Docker in Production - IPC 15 München
Neos Content Repository – Git for content
A General Purpose Docker Image for PHP
Scaleable PHP Applications in Kubernetes
Flownative Beach - Neos Meetup Hamburg 2022
GitOps with Flux - IPC Munich 2022
OpenID Connect with Neos and Flow
Neos Conference 2019 Keynote
A practical introduction to Kubernetes (IPC 2018)
Neos Conference 2018 Welcome Keynote
A practical introduction to Event Sourcing and CQRS
Neos Conference 2017 Welcome Keynote
IPC 2016: Content Strategy for Developers
Docker in Production - IPC 2016
Is this Open Source Thing Really Worth it? (IPC 2016 Berlin)
The Neos Brand (Inspiring Conference 2016)
Neos - past, present, future (Inspiring Conference 2016)
Meet Neos Nürnberg 2016: Ja ich will!
Meet Neos Nürnberg 2016: Hallo Neos!
Turning Neos inside out / React.js HH
Docker in Production - IPC 15 München

Aspect-Oriented Programming and Depedency Injection

  • 1. Robert Lemke | TYPO3 Association AOP and Dependency Injection
  • 2. Overview About me, the flow and buzz ... Unit Testing Dependency Injection Aspect-Oriented Programming AOP and Dependency Injection
  • 3. 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
  • 4. About me HINT 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
  • 5. 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
  • 6. About the buzz AOP, DI, DDD, TDD, XP, ... ? YAGNI ? IMYLME ! AOP and Dependency Injection
  • 7. The Demo Package Demo AOP and Dependency Injection
  • 9. 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
  • 10. Unit Testing Dependencies Problem: Classes explicitly refer to other classes: AOP and Dependency Injection
  • 11. Unit Testing Dependencies Try to test this class: AOP and Dependency Injection
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. Dependency Injection Constructor without Dependency Injection AOP and Dependency Injection
  • 16. Dependency Injection Component with Constructor Injection AOP and Dependency Injection
  • 17. Dependency Injection Component with Setter Injection AOP and Dependency Injection
  • 18. Dependency Injection Component Manager Manages the whole object lifecycle Provides so-called "IoC Container" Components: objects Components can be configured AOP and Dependency Injection
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. Components Component scope AOP and Dependency Injection
  • 23. 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
  • 24. Components Creating Prototypes Solution A: Call getComponent() AOP and Dependency Injection
  • 25. Components Creating Prototypes Solution B: Call a factory method AOP and Dependency Injection
  • 26. 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
  • 27. Aspect Oriented Programming Cross-cutting concerns Presentation Domain Data source AOP and Dependency Injection
  • 28. Aspect Oriented Programming Cross-cutting concerns Presentation The concerns live here Domain Data source AOP and Dependency Injection
  • 29. Aspect Oriented Programming Cross-cutting concerns Some Domain Model Security CONCERNS Logging X-ING AOP and Dependency Injection
  • 30. Aspect Oriented Programming 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 AOP and Dependency Injection
  • 31. 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
  • 32. The AOP Hello World Classic Demo Demo AOP and Dependency Injection
  • 34. Aspect Oriented Programming Applications for AOP Logging Security Transactions Persistence Statistics In the Domain Layer AOP and Dependency Injection
  • 35. 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
  • 36. More ... AOP and Dependency Injection
  • 37. More Where can I get FLOW3? From our Subversion repository: https://svn.typo3.org/FLOW3/Distribution/trunk/ AOP and Dependency Injection
  • 38. More ... DEV3 AOP and Dependency Injection
  • 39. More ... AOP Browser AOP and Dependency Injection
  • 40. More ... Known Issues FLOW3 (or rather PHP) currently causes Apache crashes - why ever ... Tests consume a lot of memory (> 400 MB) Access is comparably slow even in Production context (~ 3 req/s) and needs much memory (~ 20 MB) Many aspects are work in progress and neither optimized nor finished AOP and Dependency Injection
  • 41. Links FLOW3 Website http://flow3.typo3.org TYPO3 Forge http://forge.typo3.org T3CAST http://typo3.org/podcasts/robert AOP and Dependency Injection
  • 42. So long and thanks for the fish Questions AOP and Dependency Injection