Dependency injection WTF? - PHPSC Conference 2012

421 views

Published on

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.

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
421
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
5
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Dependency injection WTF? - PHPSC Conference 2012

  1. 1. Dependency Injection, WTF? Luís Otávio Cobucci Oblonczyk27 de Outubro de 2012
  2. 2. Luí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
  3. 3. Mandamento principal da OOP “Alta coesão e baixo acoplamento”
  4. 4. Problemas do alto acoplamento● Dificuldade de testabilidade● Demora para entender o código● Manutenção do código● Baixa extensibilidade● Impossibilidade de reutilização
  5. 5. Dependency Injection não é nada novo!
  6. 6. O que é DI?“Dependency injection is a software designpattern that allows a choice of component to bemade at run-time rather than compile time.”http://en.wikipedia.org/wiki/Dependency_injection
  7. 7. Indo devagar...
  8. 8. <?phpnamespace LcobucciSamples;use PDO;class UserManager{ private $conn; public function __construct() { $this->conn = new PDO( mysql:dbname=test;host=localhost, root, root ); }}
  9. 9. <?phpnamespace LcobucciSamples;use PDO;class UserManager{ private $conn; public function __construct($dsn, $user, $pass) { $this->conn = new PDO( $dsn, $user, $pass ); }}
  10. 10. <?phpnamespace LcobucciSamples;use PDO;class UserManager{ private $conn; public function __construct(PDO $conn) { $this->conn = $conn; }}
  11. 11. Tá, e se não quiser persistir em banco de dados?
  12. 12. <?phpnamespace LcobucciSamples;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; }}
  13. 13. Formas de injeção deDependência● Construtor● Setter● Atributo
  14. 14. <?phpnamespace LcobucciSamples;$storage = new DbStorage();// Constutor$manager = new UserManager($storage);// Setter$manager = new UserManager();$manager->setStorage($storage);// Atributo$manager = new UserManager();$manager->storage = $storage;
  15. 15. Containers!
  16. 16. Containers● 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
  17. 17. FrameworksDevido facilitar a separação de responsabilidadese manter o código mais limpo e organizado, osframeworks modernos estão trazendo containersde injeção de dependências através de seuscomponentes. Pimple RespectConfig
  18. 18. Lembrem-se
  19. 19. 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
  20. 20. Obrigado!Eu por aí: http://about.me/lcobucciSlides: http://slideshare.net/lcobucci

×