Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Dependency Injection com Kotlin - Thais Aquino

411 views

Published on

Thais Aquino - Desenvolvedora Android no Luiza Labs, fala sobre Dependency Injection com Kotlin no Kotlin Community Summit 2018.

Saiba mais em https://eventos.imasters.com.br/kotlinsummit/

Published in: Internet
  • Be the first to comment

Dependency Injection com Kotlin - Thais Aquino

  1. 1. Dependency Injection com Kotlin no Android https://bit.ly/2Q0DTZB
  2. 2. Thais Aquino Desenvolvedora Android no LuizaLabs desde 2014 medium.com/@thasaquino twitter.com/thaisandrade_s linkedin.com/in/thasaquino medium.com/luizalabs
  3. 3. Inversão de dependência? Injeção de dependência?... WTF?
  4. 4. O que é Inversão de Dependência Componentes devem depender de abstrações Abstrações não devem depender de implementações Implementações devem depender de abstrações
  5. 5. Responsabilidade da criação da dependência
  6. 6. Provendo a dependência pelo construtor
  7. 7. Inversão de Dependência Antes A classe RocketsInfrastructure era responsável pela criação da instância do Retrofit e do Serviço de Rest Agora A classe RocketsInfrastructure recebe uma instância através de seu construtor Podemos usar essa instância compartilhada em qualquer lugar de nossa aplicação! fetchLaunches() fetchRockets() fetchMission()
  8. 8. Beleza... e a Injeção de dependência onde entra?
  9. 9. O que é Injeção de Dependência? Classes dependem umas das outras para executar alguma lógica. Aplicando Injeção de Dependência os objetos são fornecidos por uma entidade externa que coordena cada objeto As dependências são injetadas nos objetos!
  10. 10. Quem fornece a dependência? Factory?
  11. 11. No exemplo nosso Factory fornece a dependência Mas podemos usar algum framework de DI para isso! Quem fornece a dependência?
  12. 12. Porque usar framework?
  13. 13. Porque usar framework? Para criar e prover as dependências Separar implementação e inicialização do uso de dependências Escrever menos código Reuso das dependências Uso de escopo Pode mockar as dependências injetadas Testar fica mais fácil!
  14. 14. Nosso exemplo - Listagem de foguetes Space X Networking monta nosso Service do Retrofit Source depende de Networking para fazer o get na API da SpaceX buscando os rockets Presenter depende do Source para buscar os Rockets e conversar com a View para exibir os estados corretos da tela https://api.spacexdata.com/v2/rockets/
  15. 15. Dagger 2 Código gerado a partir de Annotation Processor Falha em tempo de compilação Não usa reflection É verbosa e difícil de entender
  16. 16. Dagger 2 no Android com Kotlin plugin para usar o Annotation Processor do Kotlin apply plugin: 'kotlin-kapt' dependências implementation 'com.google.dagger:dagger:2.17' kapt 'com.google.dagger:dagger-compiler:2.17' implementation 'com.google.dagger:dagger-android:2.17' implementation 'com.google.dagger:dagger-android-support:2.17' kapt 'com.google.dagger:dagger-android-processor:2.17'
  17. 17. Dagger 2 - módulo provendo networking
  18. 18. Dagger 2 - módulos provendo source e presenter
  19. 19. Dagger 2 - módulo provendo activity
  20. 20. Dagger 2 - component
  21. 21. Dagger 2 - application
  22. 22. Dagger 2 - activity
  23. 23. Kodein Escrito em Kotlin Container para fornecer as dependências inline functions e lambda extension functions DSL Menos verboso que Dagger Falha no runtime
  24. 24. Kodein - dependências implementation 'org.kodein.di:kodein-di-generic-jvm:5.2.0' implementation 'org.kodein.di:kodein-di-framework-android-support:5.2.0'
  25. 25. Kodein - provendo networking
  26. 26. Kodein - provendo source e presenter
  27. 27. Kodein - iniciando o container na Application
  28. 28. Kodein - recuperando presenter na Activity
  29. 29. DI or … not DI?? “dependency retrieval container” https://www.reddit.com/r/androiddev/comments/75g2fm/opinions_on_kodein/
  30. 30. Exemplo como DI
  31. 31. Exemplo como Service Locator
  32. 32. DI x SL Ambos: Infrastructure não é responsável pela dependência Remoção do acoplamento da Infrastructure com Networking Service Locator: Agrega dependência do framework, que não é realmente necessária
  33. 33. implementation 'org.koin:koin-android:1.0.0-RC-3'
  34. 34. Koin Escrito em Kotlin Container Inline functions Extension functions DSL Menos verboso que Dagger Falha no runtime Architecture Components
  35. 35. Koin - provendo networking
  36. 36. Koin - provendo source e presenter
  37. 37. Koin - application
  38. 38. Koin - activity
  39. 39. Exemplos Dagger https://github.com/tasaquino/spacex_di/tree/dagger-android Kodein https://github.com/tasaquino/spacex_di/tree/kodein-implemention Koin https://github.com/tasaquino/spacex_di/tree/koin-implementions
  40. 40. Links https://speakerdeck.com/thaisaquino/di-com-kotlin-no-android https://google.github.io/dagger/ https://insert-koin.io/ http://kodein.org/Kodein-DI/
  41. 41. Obrigada! :)

×