View
627
Download
1
Embed Size (px)
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.
Citation preview
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