dependency injection wtf? - phpsc conference 2012

Post on 18-Nov-2014

627 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

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

Dependency Injection, WTF?

Dependency Injection, WTF?

Luís Otávio Cobucci Oblonczyk

27 de Outubro de 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

Mandamento principal da OOPMandamento principal da OOP

“Alta coesão e baixo acoplamento”

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

Dependency Injection não é nada novo!

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

Indo devagar...

<?phpnamespace Lcobucci\Samples;

use \PDO;

class UserManager{ private $conn;

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

<?phpnamespace Lcobucci\Samples;

use \PDO;

class UserManager{ private $conn;

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

<?phpnamespace Lcobucci\Samples;

use \PDO;

class UserManager{ private $conn;

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

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

<?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; }}

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

<?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;

Containers!

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

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

Lembrem-se

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

Obrigado!Obrigado!

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

Slides: http://slideshare.net/lcobucci

top related