Injeção de Dependência com Koin no Android

แชร์
ฝัง
  • เผยแพร่เมื่อ 4 เม.ย. 2020
  • CAMP - Curso Android Moderno e Profissional: bit.ly/3uPoORp
    Koin é um Framework de Injeção de Dependência leve e pragmático, desenvolvido utilizando puramente a linguagem Kotlin para desenvolvedores Kotlin.
    Koin facilita o trabalho no Android com um projeto com Arquitetura MVVM dos Componentes de Arquitetura, é fácil de utilizar e tem uma API muito simples baseada em DSL.
    Neste vídemos vamos aprender a implementar o Koin, de forma correta, em um projeto Android.
    ====== Quer dar o próximo passo na sua carreira como dev Android comigo? =========
    📲 𝗖𝗔𝗠𝗣 - 𝗖𝗨𝗥𝗦𝗢 𝗔𝗡𝗗𝗥𝗢𝗜𝗗 𝗠𝗢𝗗𝗘𝗥𝗡𝗢 𝗘 𝗣𝗥𝗢𝗙𝗜𝗦𝗦𝗜𝗢𝗡𝗔𝗟:
    ▪️ bit.ly/3uPoORp
    =================================================================
    📗 𝗖𝗢𝗡𝗛𝗘𝗖̧𝗔 𝗠𝗘𝗨 𝗘-𝗕𝗢𝗢𝗞 𝗦𝗢𝗕𝗥𝗘 𝗖𝗔𝗥𝗥𝗘𝗜𝗥𝗔 𝗗𝗘 𝗣𝗥𝗢𝗚𝗥𝗔𝗠𝗔𝗗𝗢𝗥:
    ▪️bit.ly/douglas-motta-ebook-ca...
    📹 𝗩𝗜́𝗗𝗘𝗢𝗦 / 𝗦𝗘́𝗥𝗜𝗘𝗦 𝗠𝗔𝗜𝗦 𝗔𝗦𝗦𝗜𝗦𝗧𝗜𝗗𝗢𝗦 𝗗𝗢 𝗖𝗔𝗡𝗔𝗟:
    ▪️ Curso de Android com Kotlin & MVVM
    douglasmotta.com.br/curso-and...
    ▪️ Curso de Kotlin 2020 | Básico
    • Playlist
    ▪️ Kotlin Coroutines: Criando um Projeto Android do Zero Com a Arquitetura MVVM e LiveData
    • Kotlin Coroutines: Cri...
    ====== Quer dar o próximo passo na sua carreira como dev Android comigo? =========
    📲 𝗖𝗔𝗠𝗣 - 𝗖𝗨𝗥𝗦𝗢 𝗔𝗡𝗗𝗥𝗢𝗜𝗗 𝗠𝗢𝗗𝗘𝗥𝗡𝗢 𝗘 𝗣𝗥𝗢𝗙𝗜𝗦𝗦𝗜𝗢𝗡𝗔𝗟:
    ▪️ bit.ly/3uPoORp
    =================================================================
    🔗 𝗦𝗜𝗚𝗔-𝗠𝗘 𝗘𝗠 𝗢𝗨𝗧𝗥𝗔𝗦 𝗥𝗘𝗗𝗘𝗦:
    ▪️Instagram: / dmotta91
    ▪️Blog: douglasmotta.com.br
    ▪️Twitter: / douglasrmotta
    📖 𝗟𝗜𝗩𝗥𝗢𝗦 𝗤𝗨𝗘 𝗘𝗨 𝗜𝗡𝗗𝗜𝗖𝗢:
    ▪️ Kotlin em Ação: amzn.to/2Mpk5S8
    ▪️ Dominando o Android Com Kotlin: amzn.to/39hhjrj
    ▪️ Clean Code: amzn.to/39h5r8P
    ▪️ 14 Hábitos de Desenvolvedores Altamente Produtivos: amzn.to/3olSfDI
    #injecaodedependencia #dependecyinjection #koin

ความคิดเห็น • 51

  • @DouglasMotta
    @DouglasMotta  2 ปีที่แล้ว +2

    CAMP - Curso Android Moderno e Profissional: bit.ly/3uPoORp

  • @arozendojr
    @arozendojr 11 หลายเดือนก่อน

    Seria legal fazer esse vídeo aplicando no compose-ios

  • @RenatoSousaRS
    @RenatoSousaRS 4 ปีที่แล้ว

    Muito bom...

  • @icaronunes
    @icaronunes 4 ปีที่แล้ว

    Muito esclarecedor. Parabéns

  • @marcioborges2567
    @marcioborges2567 3 ปีที่แล้ว

    Show!

  • @tassiolucas
    @tassiolucas 4 ปีที่แล้ว

    Show de bola! Gostei de mais da sua explicação!

  • @aramispaesdeveloper8386
    @aramispaesdeveloper8386 2 ปีที่แล้ว

    que massa 👏🏻 obrigado

  • @joanascheerloayza7993
    @joanascheerloayza7993 ปีที่แล้ว

    Excelente conteúdo! Ótima didática, parabéns!

  • @humbertotolintino1659
    @humbertotolintino1659 4 ปีที่แล้ว

    Muito esclarecedor, boa!!

    • @cassioferrazzo
      @cassioferrazzo 3 ปีที่แล้ว

      Douglas, eu fiquei com uma dúvida.
      Como eu injetar um repository em uma classe de negócio?
      Eu tenho uma classe que faz um processo e preciso persistir os resultados. Gostaria de injetar a dependência desse repositório nesta classe. Como faço?
      Ótimos conteúdos sempre, esta série de vídeos sobre que engloba o jetpack tá sendo sensacional.

  • @maurozem
    @maurozem 4 ปีที่แล้ว +2

    Parabéns novamente Douglas.
    Já repassando seu video pra geral.
    Sucesso meu caro!

    • @DouglasMotta
      @DouglasMotta  4 ปีที่แล้ว

      Opa, fala Mauro, tudo bem?
      Muito obrigado por compartilhar.
      Um abraço.

  • @JotaSilvaNS
    @JotaSilvaNS 4 ปีที่แล้ว

    Muito bom conteúdo Douglas.

  • @futsurf
    @futsurf 4 ปีที่แล้ว

    Parabéns brother sabe muito!

  • @mulherprogramadora
    @mulherprogramadora 3 ปีที่แล้ว

    Bem bacana! Precisei hoje

  • @icaroplant1388
    @icaroplant1388 3 ปีที่แล้ว

    Ótimo conteúdo! Simples, enxuto e objetivo! Já vou repassando pro pessoal da área. Obrigado!

    • @DouglasMotta
      @DouglasMotta  3 ปีที่แล้ว +1

      Obrigado Icaro!
      Um abraço.

  • @eduvgama
    @eduvgama 4 ปีที่แล้ว

    Excelente aula Douglas. Acho seu método de ensino muito bom e fácil de entender. O seu exemplo aplicando o MVVM com o repository não o último mas o penúltimo é excelente e já o estou aplicando no meu projeto. Eu sei que no vídeo você disse que está usando o koin e realmente é muito mais fácil de entender e implementar mas se puder fazer um vídeo usando esse exemplo mas implementando o dagger seria show porque assim conseguiríamos aprender melhor e mais rápido a utilizar o dagger. Obrigado.

    • @DouglasMotta
      @DouglasMotta  4 ปีที่แล้ว +2

      Olá, José Eduardo.
      Obrigado pelo comentário e pela sugestão, vou preparar um conteúdo sobre o Dagger 2.
      Um abraço.

  •  ปีที่แล้ว

    Uma dúvida: Como poderíamos fazer esse mesmo conceito do navController utilizando o Hilt?

  • @souseco
    @souseco 4 ปีที่แล้ว +2

    Uma duvida.. lembro que em um dos teus videos tu falou que não era interessante passar componentes do framework android para o viewmodel, o navController nao faz parte de um contexto do android?

    • @DouglasMotta
      @DouglasMotta  4 ปีที่แล้ว +1

      Olá Otavio, boa observação.
      O NavController é diferente, pois não é uma biblioteca que está dentro do framework do Android, está dentro do pacote androix, portanto é uma dependência mais leve e desacoplada do framework.
      Uma das principais preocupações de não se utilizar componentes do framework do Android no ViewModel é por causa da dificuldade em criar mocks desses componentes para fins de teste unitário do ViewModel.
      É possível utilizar o mockito para fazer o mock do navController e isso ocorre sem problema, portanto seu ViewModel continua testável.
      Fora isso é sim importante ficar atento e não passar o contexto da Activity ou qualquer outro componente do framework do Android (ex: pacote do android.view.*) para dentro do ViewModel.
      Espero ter esclarecido.
      Um abraço.

  • @alexvazdemoraes9539
    @alexvazdemoraes9539 4 ปีที่แล้ว

    Oi @Douglas Motta, vc usa koin no seu dia a dia?

  • @printchipe
    @printchipe 4 ปีที่แล้ว

    Douglas vc não da aulas de lógica de Programação Particular?

    • @DouglasMotta
      @DouglasMotta  4 ปีที่แล้ว +1

      Olá Bruno,
      Atualmente não trabalho com aulas particulares de lógica, desculpa.
      Um abraço.

  • @hianuyesperidiao5499
    @hianuyesperidiao5499 2 ปีที่แล้ว

    Muito bom, parabéns pelo trabalho vem ajudando bastante gente. Saberia como injetar uma interface de repository ao invés de uma classe(Repository) comum? Estou procurando alguns conteudos sobre isso mas não achei nada muito entedivel ainda kk.

    • @DouglasMotta
      @DouglasMotta  2 ปีที่แล้ว +1

      Olá!
      Na série de vídeos que produzi recentemente para o canal eu mostro isso, mas utlizando o Dagger hilt. Mas o conceito é o mesmo. Se quiser dar uma olhada.

    • @DouglasMotta
      @DouglasMotta  2 ปีที่แล้ว +1

      Mas basicamente você informa qual é a interface com essa sintaxe:
      factory {
      MainRepository() // Injta essa implementação para a interface. Essa implementação deve implementar a interface MainRepositoryInterface
      }
      E no construtor da classe onde você vai utilizar a dependência, receba um repositório do tipo da interface (MainRepositoryInterface).

    • @hianuyesperidiao5499
      @hianuyesperidiao5499 2 ปีที่แล้ว

      @@DouglasMotta Perfeito compreendi melhor agora. Também acabando alguns artigos legais. Vlw mesmo. Hoje na sua empresa vc usa koin?

    • @hianuyesperidiao5499
      @hianuyesperidiao5499 2 ปีที่แล้ว

      @@DouglasMotta vou olhar sim!

  • @RicardoSousa25
    @RicardoSousa25 3 ปีที่แล้ว

    Mais uma excelente aula Douglas. Parabéns. Mas fiquei em dúvida em relação ao uso de uma interface no repository. No meu exemplo, eu estou usando uma interface, mas fiquei na dúvida se implemento a interface ou a implementação dela dentro do factory {} no mainModule. Quando eu testo, sublinha em vermelho dizendo q a interface não possui construtor. E mesmo seguindo assim como vc fez, me dá esse erro: "No virtual method elapsedNow()D in class Lkotlin/time/TimeMark; or its super classes (declaration of 'kotlin.time.TimeMark'".

    • @RicardoSousa25
      @RicardoSousa25 3 ปีที่แล้ว

      Bom, pesquisando nas issues do GitHub do Koin, o pessoal comenta que a versão 2.1.5 do Koin + versão 1.4 do kotlin está com problemas. Voltei a versão do kotlin para 1.3.70 como está no seu código e funcionou. Usando Kotlin 1.4.0 + Koin 2.2.0-alpha-1 também funciona.

    • @RicardoSousa25
      @RicardoSousa25 3 ปีที่แล้ว +1

      Mas ainda estou com a dúvida sobre a implementação do repository interface no mainModule. Vi na internet o pessoal usando single desta forma: single { repositoryImplementação() }. Funcionou aqui pra mim, mas não sei se é a abordagem correta.

    • @DouglasMotta
      @DouglasMotta  3 ปีที่แล้ว

      É assim mesmo Ricardo!

    • @Joao-xk1ws
      @Joao-xk1ws 2 ปีที่แล้ว +1

      Aparentemente, esse problema se deve ao uso de androidLogger()junto com Koin. Há apenas uma solução alternativa por enquanto, que é migrar de androidLogger()paraandroidLogger(Level.ERROR)

  • @eduardomaxwell9378
    @eduardomaxwell9378 2 ปีที่แล้ว

    Fala Douglas, revendo o vídeo aqui :)
    Uma dúvida, no minuto 9:40 vc fala que usaria o single caso o Repository fosse usado por outras features. Nesse caso as features seriam "inserir", "atualizar" ,"deletar" etc...?

    • @DouglasMotta
      @DouglasMotta  2 ปีที่แล้ว +1

      Olá Eduardo!
      A ideia de ter um singleton é quando precisamos de uma mesma instância em vários pontos do aplicativo, ou seja, em várias telas diferentes. Se as operações de "inserir", "update", "delete" estão em uma mesma tela e são isolados, poderia usar um factory, porém se cada operação fica em uma tela, é melhor ter o repositório em um singleton e injetar a mesma instância para cada tela (feature) quando for necessário.

    • @eduardomaxwell9378
      @eduardomaxwell9378 2 ปีที่แล้ว

      @@DouglasMotta entendi. Valeu Douglas 💪

  • @allankevyn6247
    @allankevyn6247 2 ปีที่แล้ว

    Uma dúvida, qual seria melhor: Koin ou Hilt?

    • @DouglasMotta
      @DouglasMotta  2 ปีที่แล้ว

      Não há melhor ou pior, tudo depende do contexto, equipe e projeto. Cada um implementa a DI com abordagens próprias. Hoje eu utilizo o Hilt em meus projetos.

  • @marciofranklin2951
    @marciofranklin2951 2 ปีที่แล้ว

    Como dá zoom no Android Studio Mac?

    • @DouglasMotta
      @DouglasMotta  2 ปีที่แล้ว

      Basta habilitar essa opção nas preferências do Android Studio:
      Editor->General->Mouse Control->Change font size with Command+Mouse Wheel

  • @jorgecandeias6583
    @jorgecandeias6583 2 ปีที่แล้ว

    Não tem o git do projeto ?
    eu acompanhei o vídeo postado no projeto th-cam.com/video/M9nmW9BSKUA/w-d-xo.html e a aplicação está diferente da que foi montada lá

    • @DouglasMotta
      @DouglasMotta  2 ปีที่แล้ว

      Olá Jorge! Nem todos os projetos do curso eu crio um repositório para eles, principalmente os projetos que inicio do zero.