Dependency Injection, Service Locators, Testing and Life
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Dependency Injection, Service Locators, Testing and Life

  • 298 views
Uploaded on

This talk, given at OpenWest Utah 2014, covers a comparison between PHP design patterns and how they affect testing practices.

This talk, given at OpenWest Utah 2014, covers a comparison between PHP design patterns and how they affect testing practices.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
298
On Slideshare
227
From Embeds
71
Number of Embeds
7

Actions

Shares
Downloads
1
Comments
0
Likes
0

Embeds 71

http://dbhurley.com 61
http://www.dth-india.com 3
http://dth-india.com 2
http://107.170.151.240 2
http://bestaroundtheweb.com 1
http://dbhurley.tumblr.com 1
http://www.slideee.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. @dbhurley OpenWest 2014 DI, SL, Testing, Life A Pragmatic Approach
  • 2. @dbhurley OpenWest 2014 WELCOME! This session is not intimidating. This session is not intimidating. This session is not intimidating. This session is not intimidating. This session is not intimidating. This session is not intimidating. This session is not intimidating. This session is not intimidating. This session is not intimidating. This session is not intimidating. This session is not intimidating. This session is not intimidating. This session is not intimidating. This session is not intimidating. This session is not intimidating. This session is not intimidating. This session is not inti
  • 3. @dbhurley OpenWest 2014 WHO? David Hurley Open Source Evangelist Entrepreneur / Co-Founder Joomla! Community Manager Production Leadership Team
  • 4. @dbhurley OpenWest 2014 TERMS Dependency Injection An injection is the passing of a dependency (a service) to a dependent object (a client). Service Locator A design pattern which uses a central registry and on request returns the information necessary to a client. Inversion of Control A design in which portions of a computer program receive flow of control from a generic, reusable library
  • 5. @dbhurley OpenWest 2014 3 TYPES OF DEPENDENCY INJECTION Constructor Setter Interface class carPicker { function carPicker ( Finder $finder ) { $this->finder = $finder;
  • 6. @dbhurley OpenWest 2014 SERVICE LOCATORS Most often seen used as a singleton registry* class serviceLocator { public static function carFinder () { return static::finder; } class carPicker { function carPicker() { $finder = serviceLocator::carFinder();
  • 7. @dbhurley OpenWest 2014 WHAT WE’RE NOT DISCUSSING
  • 8. @dbhurley OpenWest 2014 WHAT WE ARE DISCUSSING
  • 9. @dbhurley OpenWest 2014 THE LAW OF DEMETER Each unit should have only limited knowledge about other units: only units "closely" related to the current unit. Each unit should only talk to its friends; don't talk to strangers. Only talk to your immediate friends.
  • 10. @dbhurley OpenWest 2014 WHAT’S THAT MEAN? Question How do you pay your tab at a restaurant?
  • 11. @dbhurley OpenWest 2014 APPLY SL class Car { protected $seats protected $seatbelt function buildCar (Locator $locator) { $this->seats = $locator->getSeats(); $this->seatbelt = $locator->getSeatbelt(); ... } }
  • 12. @dbhurley OpenWest 2014 APPLY DI class carFactory { function buildCar() { $seatbelt = new SeatBelt(); $seats = new Seats($seatbelt); return new Car($seats); } }
  • 13. @dbhurley OpenWest 2014 LOOKING DEEPER class Car { function _constructor(Seats $seats) { ... } } class Seats { function _constructor(Seatbelt $seatbelt, Fabric $fabric) { … }
  • 14. @dbhurley OpenWest 2014 RETURN TO FACTORY class carFactory { function buildCar() { $seatbelt = new SeatBelt(); $fabric = new Fabric(); $seats = new Seats($seatbelt, $fabric); return new Car($seats); } }
  • 15. @dbhurley OpenWest 2014 KEY CONCEPT? A Factory is used for all the objects of the same lifetime. Constructor Injection: Only inject items whose lifetime is equal or greater than the injectee (i.e. The seat is alive at least as long as the car) Method Parameter: At execution for shorter lifetimes.
  • 16. @dbhurley OpenWest 2014 TESTING Service Locators are often difficult to test. Mixed responsibilities / Law of Demeter partially broken Dependency Injection allows for easy testing. Clear to follow / Law of Demeter obeyed Side note: Null checking Pre-condition checking is hard to test. Rather check that things work as expected rather than checking against nulls.
  • 17. @dbhurley OpenWest 2014 THE GOAL The goal is to write clean, concise, easily- testable code which accomplishes a purpose and allows others to improve it.
  • 18. @dbhurley OpenWest 2014 THE OUTCOME A strong codebase which can be easily read and understood by others. “Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.”
  • 19. @dbhurley OpenWest 2014 QUESTIONS? David Hurley @dbhurley (twitter, facebook, linkedin) me@dbhurley.com