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/
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
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()
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!
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. 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. 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. 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'
24. Kodein
Escrito em Kotlin
Container para fornecer as dependências
inline functions e lambda
extension functions
DSL
Menos verboso que Dagger
Falha no runtime
33. 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