Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DI com Kotlin no Android

Thais Aquino
September 15, 2018

DI com Kotlin no Android

Slides da minha apresentação no Kotlin Community Summit em 15/09/2018.

Thais Aquino

September 15, 2018
Tweet

More Decks by Thais Aquino

Other Decks in Technology

Transcript

  1. 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
  2. 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()
  3. 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!
  4. No exemplo nosso Factory fornece a dependência Mas podemos usar

    algum framework de DI para isso! Quem fornece a dependência?
  5. 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!
  6. 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/
  7. 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
  8. 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'
  9. Kodein Escrito em Kotlin Container para fornecer as dependências inline

    functions e lambda extension functions DSL Menos verboso que Dagger Falha no runtime
  10. 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
  11. Koin Escrito em Kotlin Container Inline functions Extension functions DSL

    Menos verboso que Dagger Falha no runtime Architecture Components