SlideShare uma empresa Scribd logo
1 de 40
Dependency Injection and
       Symfony
Introduction
Cameron Manderson
Developer, Director of Flint, Melbourne Symfony2 Organiser




cameronmanderson@gmail.com
Follow: @cammanderson
www.linkedin.com/in/cameronmanderson
Topic Highlight
• More in-depth look at the background of
  “Dependency Injection”
• Aiming to uncover in Symfony
  – Modularity in our implementation
  – Loose decoupling of dependencies
  – Managing scope and access to dependencies
Background
Some terminology
• Dependency
  – Something that is required by another object to
    fulfill its function
• Dependent
  – A client object that needs a dependency in order
    to perform its function
Shown easiest like this..

Dependent           Dependency


            Like…

 Emailer            Spell Checker
Example in code
This seems fine.. Right?
What about English or French?
Can we test it was called? – no…
We need an approach to handling these
           dependencies.
      We need looser coupling.
Dependency Injection



So what is Dependency Injection?
Dependency Injection
Dependency Injection
“A design pattern whose purpose is to improve the
testability of, and simplify deployment of components”

Essentially something that takes care of creating and
linking our objects

Involves 3 parts
• Our 2 objects; dependency and dependent
• And.. An Injector to instantiate objects at runtime
Example
Injector configures our objects at runtime,
figuring out the order of creation
                                 Injector reads the
                                 dependencies, and
                   Injector      creates and stiches
                                 them together




      Dependent               Dependency
So.. Why dependency injection?
• Why do we need better management?
  – Applications are full of objects and dependencies
     • We want automation of construction
     • We want easy management of objects
     • We don’t want hundreds of Factories
  – Hard to manage those dependencies
     • Applications become tightly coupled to one-another
     • Difficult to swap out implementations
     • Manage configuration of those dependencies
Pre-dependency injection
• How do we currently do it?
  – Hand-written construction
  – Using Factory patterns
Hand-construction
Factory
Enter Dependency Injection
• Offset the instantiation of those objects to
  something else, as well as the dependencies
  – Some behind the scenes magic
  – Read a definition of how these dependencies
    should be handled
  – Create the objects and associate their
    dependencies
• Scope (talk about later)
Injector/idioms
• Simple logic:
  – Can it create the object yet? If there is a
    dependency, go create it.. Loop etc.
• Essentially… a role to..
  – Creating the “new” object when needed
  – Managing the dependencies
     • Constructor Injection
     • Setter Injection
Injector Configuration
Plain PHP files..
Constructor Injection
• Constructor injection has dependencies in the
  constructor
  – Need to create the dependencies for the
    dependent first
  – Inject them through the constructor
Setter Injection
• Create the object first and inject the
  dependents through methods (setters)
Some stuff to be careful of…
• Circular dependencies
  – Oops. Be careful. (There are ways to handle.. Not
    yet in Symfony)

                        A


           C                         B
So how does this help?
• We are all about building modular
  applications
  – Decoupling dependencies
  – Making clear what the intent of the module is
  – Separation of concerns
  – Improve testability
Decoupling
• Reduce the specific hard-value reliance
  – Facilitate swapping out new implementations
  – Reduce that complexity
  – Hopefully reduce the risk..
Make clear what it is
• We want clear intent to our application
  – Make it easy to use and modify
  – “Program to contract”
     • Implement interfaces that clearly defines the intent of
       our code
Separation of concerns
• We want to better encourage design to
  separate the concerns in our application
  – Discreet features
• Application Logic vs Infrastructure Logic

                   Application


                  Infrastructure
Testability
• Keep it clean
  – Avoiding static calls or singletons
  – Out of container testing easy
  – Easy to test concerns individually and manually
    define dependencies and mocks
We are lazy
• It is much easier utilising a dependency
  injector to handle creating objects and handle
  those dependencies than to worry about
  implementing patterns and configuration
  yourself.
Basics… check!
• That’s the theory
  – Dependencies exist in our application
  – Dependency injection assists creating and
    managing those objects
  – Makes our life easier
• Let’s talk about Symfony and Services..
Symfony Service Architecture
• Symfony is an Event Driven application
• Also provides a dependency injector and
  service locator
The Service
Service
  – An object that performs a well defined function
    when called upon
  – Separated from other parts of the application
  – Implements an action
     • e.g. Template Renderer, Mail, etc
Configuring the Injector
Service Locator (Service Container)
• Assists by providing a way to access services
  by “key”
Finding Keys
• Might be a problem?
• Symfony makes it easy, use the CLI
Further stuff to read…
• Topics
  – Aliasing
  – Public and Private
  – Specifying parameters in your config.yml


• http://symfony.com/doc/current/book/service
  _container.html
Wrapping it up
• My experience with it has been that:
  – You are encouraged to write services that others
    can use and extend
  – Your applications are much easier to test
  – Scope is much easier to manage
  – It encourages others to implement their own
    domain logic when needed, thanking you how
    easy it is to implement their own part. ;-)
Conclusion
• Covered the concepts of dependency injection
  – The problem
  – Using dependency injection to remove (code)
• Showed how it applies in Symfony
  – Better decoupling, modularity and reuse

Mais conteúdo relacionado

Mais procurados

Java Design Pattern Interview Questions
Java Design Pattern Interview QuestionsJava Design Pattern Interview Questions
Java Design Pattern Interview Questions
jbashask
 

Mais procurados (20)

04 managing the database
04   managing the database04   managing the database
04 managing the database
 
Beam me up, scotty (PUG Roma)
Beam me up, scotty (PUG Roma)Beam me up, scotty (PUG Roma)
Beam me up, scotty (PUG Roma)
 
DDD loves Actor Model and Actor Model loves Elixir
DDD loves Actor Model and Actor Model loves ElixirDDD loves Actor Model and Actor Model loves Elixir
DDD loves Actor Model and Actor Model loves Elixir
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Dependency Inversion Principle
Dependency Inversion PrincipleDependency Inversion Principle
Dependency Inversion Principle
 
Design patterns difference between interview questions
Design patterns   difference between interview questionsDesign patterns   difference between interview questions
Design patterns difference between interview questions
 
How I Learned To Apply Design Patterns
How I Learned To Apply Design PatternsHow I Learned To Apply Design Patterns
How I Learned To Apply Design Patterns
 
Zero redeployment with JRebel
Zero redeployment with JRebelZero redeployment with JRebel
Zero redeployment with JRebel
 
IoC and Mapper in C#
IoC and Mapper in C#IoC and Mapper in C#
IoC and Mapper in C#
 
Refactoring to SOLID Code
Refactoring to SOLID CodeRefactoring to SOLID Code
Refactoring to SOLID Code
 
Structural patterns
Structural patternsStructural patterns
Structural patterns
 
Java Design Pattern Interview Questions
Java Design Pattern Interview QuestionsJava Design Pattern Interview Questions
Java Design Pattern Interview Questions
 
iOS development best practices
iOS development best practicesiOS development best practices
iOS development best practices
 
GoF Design patterns I: Introduction + Structural Patterns
GoF Design patterns I:   Introduction + Structural PatternsGoF Design patterns I:   Introduction + Structural Patterns
GoF Design patterns I: Introduction + Structural Patterns
 
What is design pattern
What is design patternWhat is design pattern
What is design pattern
 
Refactoring Applications using SOLID Principles
Refactoring Applications using SOLID PrinciplesRefactoring Applications using SOLID Principles
Refactoring Applications using SOLID Principles
 
Do we need SOLID principles during software development?
Do we need SOLID principles during software development?Do we need SOLID principles during software development?
Do we need SOLID principles during software development?
 
Js tips & tricks
Js tips & tricksJs tips & tricks
Js tips & tricks
 
Lecture 5 Software Engineering and Design Design Patterns
Lecture 5 Software Engineering and Design Design PatternsLecture 5 Software Engineering and Design Design Patterns
Lecture 5 Software Engineering and Design Design Patterns
 
Alex Theedom Java ee revisits design patterns
Alex Theedom	Java ee revisits design patternsAlex Theedom	Java ee revisits design patterns
Alex Theedom Java ee revisits design patterns
 

Destaque

AngularJS Security: defend your Single Page Application
AngularJS Security: defend your Single Page Application AngularJS Security: defend your Single Page Application
AngularJS Security: defend your Single Page Application
Carlo Bonamico
 

Destaque (6)

A Glymse of Symfony 2
A Glymse of Symfony 2A Glymse of Symfony 2
A Glymse of Symfony 2
 
Introduction to Spring's Dependency Injection
Introduction to Spring's Dependency InjectionIntroduction to Spring's Dependency Injection
Introduction to Spring's Dependency Injection
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency Injection
 
Symfony under control. Continuous Integration and Automated Deployments in Sy...
Symfony under control. Continuous Integration and Automated Deployments in Sy...Symfony under control. Continuous Integration and Automated Deployments in Sy...
Symfony under control. Continuous Integration and Automated Deployments in Sy...
 
Dependency injection - the right way
Dependency injection - the right wayDependency injection - the right way
Dependency injection - the right way
 
AngularJS Security: defend your Single Page Application
AngularJS Security: defend your Single Page Application AngularJS Security: defend your Single Page Application
AngularJS Security: defend your Single Page Application
 

Semelhante a Dependency injection with Symfony 2

Mock Objects, Design and Dependency Inversion Principle
Mock Objects, Design and Dependency Inversion PrincipleMock Objects, Design and Dependency Inversion Principle
Mock Objects, Design and Dependency Inversion Principle
P Heinonen
 
Dependency injection explained (Zbigniew Lukasiak)
Dependency injection explained (Zbigniew Lukasiak) Dependency injection explained (Zbigniew Lukasiak)
Dependency injection explained (Zbigniew Lukasiak)
Ontico
 

Semelhante a Dependency injection with Symfony 2 (20)

Magento Developer Talk. Microservice Architecture and Actor Model
Magento Developer Talk. Microservice Architecture and Actor ModelMagento Developer Talk. Microservice Architecture and Actor Model
Magento Developer Talk. Microservice Architecture and Actor Model
 
[CocoaHeads Tricity] Andrzej Dąbrowski - Dependency injection and testable ar...
[CocoaHeads Tricity] Andrzej Dąbrowski - Dependency injection and testable ar...[CocoaHeads Tricity] Andrzej Dąbrowski - Dependency injection and testable ar...
[CocoaHeads Tricity] Andrzej Dąbrowski - Dependency injection and testable ar...
 
From Monoliths to Services: Grafually paying your Technical Debt
From Monoliths to Services: Grafually paying your Technical DebtFrom Monoliths to Services: Grafually paying your Technical Debt
From Monoliths to Services: Grafually paying your Technical Debt
 
Angular2 with type script
Angular2 with type scriptAngular2 with type script
Angular2 with type script
 
Building blocks of Angular
Building blocks of AngularBuilding blocks of Angular
Building blocks of Angular
 
Mock Objects, Design and Dependency Inversion Principle
Mock Objects, Design and Dependency Inversion PrincipleMock Objects, Design and Dependency Inversion Principle
Mock Objects, Design and Dependency Inversion Principle
 
Weekly Meeting: Basic Design Pattern
Weekly Meeting: Basic Design PatternWeekly Meeting: Basic Design Pattern
Weekly Meeting: Basic Design Pattern
 
SOA with Zend Framework
SOA with Zend FrameworkSOA with Zend Framework
SOA with Zend Framework
 
Dependency injection explained (Zbigniew Lukasiak)
Dependency injection explained (Zbigniew Lukasiak) Dependency injection explained (Zbigniew Lukasiak)
Dependency injection explained (Zbigniew Lukasiak)
 
How to Build Composite Applications with PRISM
How to Build Composite Applications with PRISMHow to Build Composite Applications with PRISM
How to Build Composite Applications with PRISM
 
Reactive Micro Services with Java seminar
Reactive Micro Services with Java seminarReactive Micro Services with Java seminar
Reactive Micro Services with Java seminar
 
Component based development | what, why and how
Component based development | what, why and howComponent based development | what, why and how
Component based development | what, why and how
 
Onion Architecture / Clean Architecture
Onion Architecture / Clean ArchitectureOnion Architecture / Clean Architecture
Onion Architecture / Clean Architecture
 
Microservice Architecture Patterns, by Richard Langlois P. Eng.
Microservice Architecture Patterns, by Richard Langlois P. Eng.Microservice Architecture Patterns, by Richard Langlois P. Eng.
Microservice Architecture Patterns, by Richard Langlois P. Eng.
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecture
 
The "Why", "What" and "How" of Microservices
The "Why", "What" and "How" of Microservices The "Why", "What" and "How" of Microservices
The "Why", "What" and "How" of Microservices
 
Grails Services
Grails ServicesGrails Services
Grails Services
 
Think Big - Build Small
Think Big - Build SmallThink Big - Build Small
Think Big - Build Small
 
SOLID Design Principles for Test Automaion
SOLID Design Principles for Test AutomaionSOLID Design Principles for Test Automaion
SOLID Design Principles for Test Automaion
 
Orchestration, the conductor's score
Orchestration, the conductor's scoreOrchestration, the conductor's score
Orchestration, the conductor's score
 

Último

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 

Último (20)

Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 

Dependency injection with Symfony 2

  • 2. Introduction Cameron Manderson Developer, Director of Flint, Melbourne Symfony2 Organiser cameronmanderson@gmail.com Follow: @cammanderson www.linkedin.com/in/cameronmanderson
  • 3. Topic Highlight • More in-depth look at the background of “Dependency Injection” • Aiming to uncover in Symfony – Modularity in our implementation – Loose decoupling of dependencies – Managing scope and access to dependencies
  • 5. Some terminology • Dependency – Something that is required by another object to fulfill its function • Dependent – A client object that needs a dependency in order to perform its function
  • 6. Shown easiest like this.. Dependent Dependency Like… Emailer Spell Checker
  • 9. What about English or French?
  • 10. Can we test it was called? – no…
  • 11. We need an approach to handling these dependencies. We need looser coupling.
  • 12. Dependency Injection So what is Dependency Injection?
  • 13. Dependency Injection Dependency Injection “A design pattern whose purpose is to improve the testability of, and simplify deployment of components” Essentially something that takes care of creating and linking our objects Involves 3 parts • Our 2 objects; dependency and dependent • And.. An Injector to instantiate objects at runtime
  • 14. Example Injector configures our objects at runtime, figuring out the order of creation Injector reads the dependencies, and Injector creates and stiches them together Dependent Dependency
  • 15. So.. Why dependency injection? • Why do we need better management? – Applications are full of objects and dependencies • We want automation of construction • We want easy management of objects • We don’t want hundreds of Factories – Hard to manage those dependencies • Applications become tightly coupled to one-another • Difficult to swap out implementations • Manage configuration of those dependencies
  • 16. Pre-dependency injection • How do we currently do it? – Hand-written construction – Using Factory patterns
  • 19. Enter Dependency Injection • Offset the instantiation of those objects to something else, as well as the dependencies – Some behind the scenes magic – Read a definition of how these dependencies should be handled – Create the objects and associate their dependencies • Scope (talk about later)
  • 20. Injector/idioms • Simple logic: – Can it create the object yet? If there is a dependency, go create it.. Loop etc. • Essentially… a role to.. – Creating the “new” object when needed – Managing the dependencies • Constructor Injection • Setter Injection
  • 23. Constructor Injection • Constructor injection has dependencies in the constructor – Need to create the dependencies for the dependent first – Inject them through the constructor
  • 24. Setter Injection • Create the object first and inject the dependents through methods (setters)
  • 25. Some stuff to be careful of… • Circular dependencies – Oops. Be careful. (There are ways to handle.. Not yet in Symfony) A C B
  • 26. So how does this help? • We are all about building modular applications – Decoupling dependencies – Making clear what the intent of the module is – Separation of concerns – Improve testability
  • 27. Decoupling • Reduce the specific hard-value reliance – Facilitate swapping out new implementations – Reduce that complexity – Hopefully reduce the risk..
  • 28. Make clear what it is • We want clear intent to our application – Make it easy to use and modify – “Program to contract” • Implement interfaces that clearly defines the intent of our code
  • 29. Separation of concerns • We want to better encourage design to separate the concerns in our application – Discreet features • Application Logic vs Infrastructure Logic Application Infrastructure
  • 30. Testability • Keep it clean – Avoiding static calls or singletons – Out of container testing easy – Easy to test concerns individually and manually define dependencies and mocks
  • 31. We are lazy • It is much easier utilising a dependency injector to handle creating objects and handle those dependencies than to worry about implementing patterns and configuration yourself.
  • 32. Basics… check! • That’s the theory – Dependencies exist in our application – Dependency injection assists creating and managing those objects – Makes our life easier • Let’s talk about Symfony and Services..
  • 33. Symfony Service Architecture • Symfony is an Event Driven application • Also provides a dependency injector and service locator
  • 34. The Service Service – An object that performs a well defined function when called upon – Separated from other parts of the application – Implements an action • e.g. Template Renderer, Mail, etc
  • 36. Service Locator (Service Container) • Assists by providing a way to access services by “key”
  • 37. Finding Keys • Might be a problem? • Symfony makes it easy, use the CLI
  • 38. Further stuff to read… • Topics – Aliasing – Public and Private – Specifying parameters in your config.yml • http://symfony.com/doc/current/book/service _container.html
  • 39. Wrapping it up • My experience with it has been that: – You are encouraged to write services that others can use and extend – Your applications are much easier to test – Scope is much easier to manage – It encourages others to implement their own domain logic when needed, thanking you how easy it is to implement their own part. ;-)
  • 40. Conclusion • Covered the concepts of dependency injection – The problem – Using dependency injection to remove (code) • Showed how it applies in Symfony – Better decoupling, modularity and reuse