• Like

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Dependency injection

  • 3,378 views
Uploaded on

Apresentação feita no Latinoware 2010 apresentando o conceito de Dependency Injection no PHP 5.3. …

Apresentação feita no Latinoware 2010 apresentando o conceito de Dependency Injection no PHP 5.3.

Esta palestra é uma tradução e simplificação da palestra Dependency Injection in PHP 5.3 de Fabien Potencier.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,378
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
85
Comments
0
Likes
6

Embeds 0

No embeds

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. Dependency Injection no PHP 5.3 Guilherme Blanco – Yahoo!
  • 2. Guilherme Blanco
    • 10+ anos como desenvolvedor
    • 3. Evangelista Open Source
    • 4. Trabalha para Yahoo!
    • 5. Contribui para Doctrine, Zend Framework, Symfony e PHP
    • 6. No Twitter: @guilhermeblanco
    • 7. No GitHub: http://github.com/guilhermeblanco
  • 8. Dependency Injection no PHP 5.3 Um exemplo real na web Esta palestra é uma tradução de: Dependency Injection in PHP 5.3 Concedida pelo autor Fabien Potencier
  • 9. Dependency Injection no PHP 5.3
    • Na maioria das aplicações web, você precisa gerenciar as preferências do usuário:
      • A linguagem do usuário
      • 10. Se o usuário está autenticado ou não
      • 11. As credenciais do usuário
      • 12. ...
  • 13. Dependency Injection no PHP 5.3
    • Isto pode ser feito no objeto User (Usuário):
      • setLanguage(), getLanguage()
      • 14. setAuthenticated(), getAuthenticated()
      • 15. addCredential(), hasCredential()
      • 16. ...
  • 17. Dependency Injection no PHP 5.3
    • As informações do Usuário precisam ser persistidas entre requisições HTTP
    • 18. Nós usamos sessões em PHP para Storage (Armazenagem)
  • 19. Dependency Injection no PHP 5.3
  • 20. Dependency Injection no PHP 5.3 Muito difícil de customizar Muito fácil de usar
  • 21. Dependency Injection no PHP 5.3 Muito fácil de customizar Um pouco mais difícil de usar
  • 22. Dependency Injection no PHP 5.3
    • Isto é Dependency Injection (Injeção de Dependência)
    • 23. Nada além disso...
  • 24. Dependency Injection no PHP 5.3
    • Vamos entender porque o primeiro exemplo não é uma boa idéia...
    • 25. Quero mudar o nome do cookie da sessão do usuário
  • 26. Dependency Injection no PHP 5.3 Hardcode na classe do Usuário
  • 27. Dependency Injection no PHP 5.3 Adicionar uma variável global?
  • 28. Dependency Injection no PHP 5.3 Configurar via Usuário?
  • 29. Dependency Injection no PHP 5.3 Configurar com um Array?
  • 30. Dependency Injection no PHP 5.3
    • Eu quero mudar a implementação de armazenamento da sessão
  • 34. Dependency Injection no PHP 5.3 Usar uma instância no Registro global?
  • 35. Agora, o Usuário (User) depende do Registro Dependency Injection no PHP 5.3
  • 36. Dependency Injection no PHP 5.3
    • Ao invés da dependência do Storage estar “hardcoded” no construtor da classe Usuário
    • 37. Injete a dependência de Storage no objeto Usuário
  • 38. Dependency Injection no PHP 5.3
  • 39. Dependency Injection no PHP 5.3 Quais as vantagens?
  • 40. Dependency Injection no PHP 5.3 Usar uma estratégia de Storage diferente
  • 41. Dependency Injection no PHP 5.3 Uso de uma estratégia diferente de Storage
  • 42. Dependency Injection no PHP 5.3 A configuração fica natural
  • 43. Dependency Injection no PHP 5.3 A configuração fica natural
  • 44. Dependency Injection no PHP 5.3 Engloba classes de terceiros (Adapter/Interface)
  • 45. Dependency Injection no PHP 5.3 Adiciona uma interface
  • 46. Dependency Injection no PHP 5.3 Mock do objeto Storage (para testes)
  • 47. Dependency Injection no PHP 5.3 Mock de uma Session
  • 48. Dependency Injection no PHP 5.3
    • Uso de diferentes estratégias de Storage
    • 49. Configuração fica natural
    • 50. Engloba classes de terceiros (Adapter/Interface)
    • 51. Mock do objeto Storage (para testes)
    • 52. Fácil sem alterar a classe Usuário (User)
  • 53. Dependency Injection no PHP 5.3 “Dependency Injection é onde os objetos obtém suas dependências através do construtor, métodos ou diretamente nas propriedades” http://www.picocontainer.org/injection.html
  • 54. Dependency Injection no PHP 5.3
  • 55. Dependency Injection no PHP 5.3 Um exemplo web um pouco mais complexo
  • 56. Dependency Injection no PHP 5.3
  • 57. Dependency Injection no PHP 5.3
  • 58. Dependency Injection no PHP 5.3 De volta à estaca zero
  • 59. Dependency Injection no PHP 5.3
  • 60. Dependency Injection no PHP 5.3
    • Nós precisamos de um Container
    • 61. Descreve objetos e suas dependências
    • 62. Instancia e configura objetos sob demanda
  • 63. Dependency Injection no PHP 5.3
    • Um Container DEVE ser capaz de gerenciar QUALQUER objeto PHP (POPO)
    • 64. Os objetos NÃO DEVEM saber que são gerenciados por um Container
  • 65. Dependency Injection no PHP 5.3
    • Parâmetros
      • A implementação de SessionStorageInterface que queremos usar (o nome da classe)
      • 66. O nome da sessão
    • Objetos
    • Dependências
      • Usuário depende de uma implementação de SessionStorageInterface
  • 68. Dependency Injection no PHP 5.3 Vamos criar um simples Container com o PHP 5.3
  • 69. Dependency Injection no PHP 5.3
      DIC (Dependency Injection Container) Gerenciando parâmetros
  • 70. Dependency Injection no PHP 5.3
  • 71. Dependency Injection no PHP 5.3 Criação de Objeto Customização Desacoplamento
  • 72. Dependency Injection no PHP 5.3
  • 73. Dependency Injection no PHP 5.3 Interface é mais limpa
  • 74. Dependency Injection no PHP 5.3
      DIC (Dependency Injection Container) Gerenciando objetos
  • 75. Dependency Injection no PHP 5.3
    • Precisamos de uma forma para descrever como criar objetos, sem na realidade instanciar qualquer coisa!
    • 76. Funções anônimas existem para nos salvar!
  • 77. Funções anônimas / Lambdas
    • Função anônima é uma função definida diretamente e sem um nome
  • 78. Funções anônimas / Lambdas
    • Uma lambda pode ser armazenado em uma variável
  • 79. Funções anônimas / Lambdas
    • E depois podem ser usadas como qualquer executável PHP
  • 80. Funções anônimas / Lambdas
    • Você também pode passar uma lambda como um argumento de uma função ou método
  • 81. Funções anônimas / Lambdas
  • 82. Dependency Injection no PHP 5.3
      DIC (Dependency Injection Container) Gerenciando objetos
  • 83. Dependency Injection no PHP 5.3 Armazene um lambda capaz de criar objetos sob demanda Notifique a closure para criar um objeto passando um Container
  • 84. Dependency Injection no PHP 5.3
  • 85. Dependency Injection no PHP 5.3 Simplificando o código
  • 86. Dependency Injection no PHP 5.3
  • 87. Dependency Injection no PHP 5.3 Interface unificada
  • 88. Dependency Injection no PHP 5.3 DIC (Dependency Injection Container) Escopo
  • 89. Dependency Injection no PHP 5.3
    • Para alguns tipos de objetos, como o Usuário, o Container sempre deve retornar a mesma instância
  • 90. Dependency Injection no PHP 5.3
  • 91. Dependency Injection no PHP 5.3
  • 92. Dependency Injection no PHP 5.3
  • 93. Dependency Injection no PHP 5.3 Uma Closure é uma lambda que lembra seu estado durante sua criação
  • 94. Dependency Injection no PHP 5.3
  • 95. Dependency Injection no PHP 5.3
  • 96. Dependency Injection no PHP 5.3
  • 97. Dependency Injection no PHP 5.3
  • 98. Dependency Injection no PHP 5.3
  • 99. Dependency Injection no PHP 5.3
  • 100. Dependency Injection no PHP 5.3
  • 101. Dependency Injection no PHP 5.3 Gerenciamento de erros
  • 102. Dependency Injection no PHP 5.3 NÃO estou afirmando para usarem lambdas em todos os lugares Esta apresentação tem o intuito de mostrar como elas funcionam em exemplos práticos
  • 103. Dependency Injection no PHP 5.3 Um DI Container NÃO gerencia TODOS seus objetos
  • 104. Dependency Injection no PHP 5.3 Boa regra para lembrar: Ele gerencia objetos “globais” Objetos com somente uma instância (!= singleton)
  • 105. Dependency Injection no PHP 5.3 COMO Um Usuário, uma Requisição (Request), um Logger, uma conexão com a Base de Dados, ...
  • 106. Dependency Injection no PHP 5.3 E NÃO COMO Objetos de Modelo (um Blog, um Produto, ...)
  • 107. Dependency Injection no PHP 5.3 Lembre-se: Na maioria das vezes, você não precisa de um Container para usar Dependency Injection
  • 108. Dependency Injection no PHP 5.3 Você pode começar a usar e se beneficiar de Dependency Injection hoje
  • 109. Dependency Injection no PHP 5.3 Implementando uma no seu projeto Usando bibliotecas externas que já utilizam DI sem precisa de um Container
  • 110. Dependency Injection no PHP 5.3 Symfony Zend Framework Doctrine ezComponents Swift Mailer ...
  • 111. Dependency Injection no PHP 5.3
    • Symfony Components DependencyInjection
    • 112. Usado no core do Symfony 2 (uma das mais rápidas frameworks)
    • 113. Flexível (YAML, XML, INI and PHP)
  • 114. Perguntas?