dependency injection wtf? - phpsc conference 2012

20
Dependency Injection, WTF? Dependency Injection, WTF? Luís Otávio Cobucci Oblonczyk 27 de Outubro de 2012

Upload: luis-otavio-cobucci-oblonczyk

Post on 18-Nov-2014

627 views

Category:

Documents


1 download

DESCRIPTION

O objetivo desta apresentação é passar informações básicas sobre injeção de dependência, bem como alguns frameworks PHP existentes que nos trazem containers de injeção de depência.

TRANSCRIPT

Page 1: Dependency injection WTF? - PHPSC Conference 2012

Dependency Injection, WTF?

Dependency Injection, WTF?

Luís Otávio Cobucci Oblonczyk

27 de Outubro de 2012

Page 2: Dependency injection WTF? - PHPSC Conference 2012

Luís Otávio Cobucci OblonczykLuís Otávio Cobucci Oblonczyk

● Evangelista (doido por) PHP● Desenvolvedor na Softnex Tecnologia (SC)● Membro do PHPSC● ZCE PHP 5.3● Perfeccionista ao extremo =P

@lcobucci

http://about.me/lcobucci

Page 3: Dependency injection WTF? - PHPSC Conference 2012

Mandamento principal da OOPMandamento principal da OOP

“Alta coesão e baixo acoplamento”

Page 4: Dependency injection WTF? - PHPSC Conference 2012

Problemas do alto acoplamentoProblemas do alto acoplamento

● Dificuldade de testabilidade● Demora para entender o código● Manutenção do código● Baixa extensibilidade● Impossibilidade de reutilização

Page 5: Dependency injection WTF? - PHPSC Conference 2012

Dependency Injection não é nada novo!

Page 6: Dependency injection WTF? - PHPSC Conference 2012

O que é DI?O que é DI?

“Dependency injection is a software design pattern that allows a choice of component to be made at run-time rather than compile time.”

http://en.wikipedia.org/wiki/Dependency_injection

Page 7: Dependency injection WTF? - PHPSC Conference 2012

Indo devagar...

Page 8: Dependency injection WTF? - PHPSC Conference 2012

<?phpnamespace Lcobucci\Samples;

use \PDO;

class UserManager{ private $conn;

public function __construct() { $this->conn = new PDO( 'mysql:dbname=test;host=localhost', 'root', 'root' ); }}

Page 9: Dependency injection WTF? - PHPSC Conference 2012

<?phpnamespace Lcobucci\Samples;

use \PDO;

class UserManager{ private $conn;

public function __construct($dsn, $user, $pass) { $this->conn = new PDO( $dsn, $user, $pass ); }}

Page 10: Dependency injection WTF? - PHPSC Conference 2012

<?phpnamespace Lcobucci\Samples;

use \PDO;

class UserManager{ private $conn;

public function __construct(PDO $conn) { $this->conn = $conn; }}

Page 11: Dependency injection WTF? - PHPSC Conference 2012

Tá, e se não quiser persistir em banco de dados?

Page 12: Dependency injection WTF? - PHPSC Conference 2012

<?phpnamespace Lcobucci\Samples;

interface DataStorage{}

class DbStorage implements DataStorage{}

class FileStorage implements DataStorage{}

class FakeStorage implements DataStorage{}

class UserManager{ private $storage;

public function __construct(DataStorage $storage) { $this->storage = $storage; }}

Page 13: Dependency injection WTF? - PHPSC Conference 2012

Formas de injeção de DependênciaFormas de injeção de Dependência● Construtor● Setter● Atributo

Page 14: Dependency injection WTF? - PHPSC Conference 2012

<?phpnamespace Lcobucci\Samples;

$storage = new DbStorage();

// Constutor$manager = new UserManager($storage);

// Setter$manager = new UserManager();

$manager->setStorage($storage);

// Atributo$manager = new UserManager();

$manager->storage = $storage;

Page 15: Dependency injection WTF? - PHPSC Conference 2012

Containers!

Page 16: Dependency injection WTF? - PHPSC Conference 2012

ContainersContainers

● Criam e armazenam os objetos de acordo com as regras nele definidas

● Possibilitam a separação entre a configuração da criação dos objetos e o uso deles

● Os objetos são denominados “serviços” e cada um possui um identificador único.

● É possível armazenar parâmetros para serem utilizados na construção dos serviços

Page 17: Dependency injection WTF? - PHPSC Conference 2012

FrameworksFrameworks

Devido facilitar a separação de responsabilidades e manter o código mais limpo e organizado, os frameworks modernos estão trazendo containers de injeção de dependências através de seus componentes.

Pimple Respect\Config

Page 18: Dependency injection WTF? - PHPSC Conference 2012

Lembrem-se

Page 19: Dependency injection WTF? - PHPSC Conference 2012

Conclusão...Conclusão...

● Dependency Injection facilita a separação das responsabilidades das suas classes, mantendo baixo o acoplamento entre os componentes

● Podemos utilizar Injeção de dependência independentemente de frameworks e containers

Page 20: Dependency injection WTF? - PHPSC Conference 2012

Obrigado!Obrigado!

Eu por aí: http://about.me/lcobucci

Slides: http://slideshare.net/lcobucci