SlideShare a Scribd company logo
1 of 30
Como desacoplar
Componentes
Aplicando DI e IoC
com Spring e Kotlin
Fabiano
Góes
Engenheiro de Software backend na Cora
fabiano@cora.com.br
/fabianogoes
/fabianogoes
➢ Human
➢ Não sou dono da verdade
➢ Feedback
Qual a
motivação para
essa talk?
A boa notícia é que, em muitos casos,
os conceitos já estão sendo usados, mas
nem sabemos.
Acoplamento
Um software com Forte Acoplamento torna-se um problema na hora de mantê-lo
devido ao alto grau de interdependência entre seus componentes
Um exemplo de como violar vários
princípios ❌ Alta coesão.
❌ Baixo acoplamento.
❌ Responsabilidade única.
❌ Princípio da Inversão de Dependência.
❌ Abertos para extensão, mas fechados
para modificação.
Como podemos melhorar isso?
✓ Controller deveria apenas controlar a
entrada e saída de dados.
✓ Controller não deveria saber sobre
Repositório.
✓ Controller não deveria saber de como
construir um Pedido.
✓ Precisamos conseguir testar nossa
regra de pedido isoladamente.
✓ Precisamos conseguir configurar um
banco de dados para cada ambiente.
Porque desacoplar componentes?
● Funcionou. Por que mexer?
● Porque Refatorar?
● Teste é para os fracos.
Don't want
O conceito base para essa melhoria é:
Classes devem ter
alta coesão e baixo acoplamento!
Não é fácil testar
código acoplado e
sem coesão!
Se o seu código está difícil de ser testado
isoladamente, pode ser um cheiro de que ele
está com alto acoplamento e baixa coesão.
E isso vai ter um custo alto e o seu castelo de
cartas pode cair a qualquer momento.
Princípios que podemos utilizar:
Princípio da Responsabilidade única
S do S.O.L.D
Uma classe deve ter um,
e somente um, motivo para mudar.
Inversão de Controle
Um padrão muito utilizado em POO
para delegar a responsabilidade do
ciclo de vida de componentes.
Princípio da Inversão de Dependência
D do S.O.L.I.D
Dependa de abstrações e não de
implementações
Que tal
começar
resolver esse
desafio?
Começando aplicando o princípio (DIP)
Princípio da Inversão de Dependência D do S.O.L.I.D - Dependa de abstrações e não de implementações
As implementações de Repositório (SRP)
Princípio da Responsabilidade única S do S.O.L.D
Use Case
Controller
E o IoC cadê? onde ele entrou nessa história toda?
Inversão de Controle
Um padrão muito utilizado em POO
para delegar a responsabilidade do
ciclo de vida de componentes.
Foi aí que o Spring brilhou
e talvez você nem percebeu?
Ciclo de vida do Container Spring
Automagicamente!!!!
Estrutura
Domínio isolado e protegido das bordas de entrada e saída
que envolvem tecnologia e não negócio.
Portas são as Interfaces onde o UseCase conhece e
executa alguma coisa fora do negócio.
Infra é a parte de tecnologia e acesso externos ao domínio,
como: Banco de Dados, Comunicação Assíncrona e etc.
Web é a camada de input da aplicação
</ E é isso aí >
Let's code
Obrigada!
{ println("Seja Cora!") }
Somos remotos!
Liberdade para a sua carreira
te empoderar!

More Related Content

Similar to TDC2022 - Como desacoplar Componentes aplicando DI e IoC com Kotlin e Spring.pptx

Boas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareBoas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareCarlos Santana
 
Objects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoObjects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoBonoBee
 
Como fazer um bom desgn de c[odigo em java
Como fazer um bom desgn de c[odigo em javaComo fazer um bom desgn de c[odigo em java
Como fazer um bom desgn de c[odigo em javaPaula Santana
 
Fatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um SoftwareFatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um SoftwarePablo Dall'Oglio
 
Programação Orientada a Objetos - Pós Graduação - Aula 6 - Princípios OO
Programação Orientada a Objetos - Pós Graduação - Aula 6 - Princípios OOProgramação Orientada a Objetos - Pós Graduação - Aula 6 - Princípios OO
Programação Orientada a Objetos - Pós Graduação - Aula 6 - Princípios OOCarlos Eduardo
 
Coding Dojo - Funcionamento
Coding Dojo - FuncionamentoCoding Dojo - Funcionamento
Coding Dojo - Funcionamentothiagodp
 
Programação Orientada a Objetos - Pós Graduação - Aula 7 - Inversão de Controle
Programação Orientada a Objetos - Pós Graduação - Aula 7 - Inversão de ControleProgramação Orientada a Objetos - Pós Graduação - Aula 7 - Inversão de Controle
Programação Orientada a Objetos - Pós Graduação - Aula 7 - Inversão de ControleCarlos Eduardo
 
TDC 2019 Clean Architeture com .net core
TDC 2019  Clean Architeture com .net coreTDC 2019  Clean Architeture com .net core
TDC 2019 Clean Architeture com .net coreRodolfo Fadino Junior
 
Apresentação WTM
Apresentação WTMApresentação WTM
Apresentação WTMAnna Cruz
 
Organizando a casa. o front end do jeitinho que a mamãe gosta
Organizando a casa. o front end do jeitinho que a mamãe gostaOrganizando a casa. o front end do jeitinho que a mamãe gosta
Organizando a casa. o front end do jeitinho que a mamãe gostaJohnathan Cardoso
 
Princípios de Programação Orientada a Objetos Solid, dry e kiss
Princípios de Programação Orientada a Objetos Solid, dry  e kiss Princípios de Programação Orientada a Objetos Solid, dry  e kiss
Princípios de Programação Orientada a Objetos Solid, dry e kiss DanielChristofolli
 
Programação Orientada a Objetos - Pós Graduação - aula 1
Programação Orientada a Objetos - Pós Graduação - aula 1Programação Orientada a Objetos - Pós Graduação - aula 1
Programação Orientada a Objetos - Pós Graduação - aula 1Carlos Eduardo
 
De Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindo
De Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindoDe Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindo
De Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindoAnna Cruz
 

Similar to TDC2022 - Como desacoplar Componentes aplicando DI e IoC com Kotlin e Spring.pptx (20)

SOLID na Vida Real
SOLID na Vida RealSOLID na Vida Real
SOLID na Vida Real
 
Strategy pattern
Strategy patternStrategy pattern
Strategy pattern
 
Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
 
Dojo solid
Dojo solidDojo solid
Dojo solid
 
Boas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareBoas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de software
 
Objects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoObjects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do código
 
Java - Boas práticas
Java - Boas práticasJava - Boas práticas
Java - Boas práticas
 
Como fazer um bom desgn de c[odigo em java
Como fazer um bom desgn de c[odigo em javaComo fazer um bom desgn de c[odigo em java
Como fazer um bom desgn de c[odigo em java
 
Vamos falar de DevOps?
Vamos falar de DevOps?Vamos falar de DevOps?
Vamos falar de DevOps?
 
Fatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um SoftwareFatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um Software
 
Programação Orientada a Objetos - Pós Graduação - Aula 6 - Princípios OO
Programação Orientada a Objetos - Pós Graduação - Aula 6 - Princípios OOProgramação Orientada a Objetos - Pós Graduação - Aula 6 - Princípios OO
Programação Orientada a Objetos - Pós Graduação - Aula 6 - Princípios OO
 
Coding Dojo - Funcionamento
Coding Dojo - FuncionamentoCoding Dojo - Funcionamento
Coding Dojo - Funcionamento
 
Java com Excelência
Java com ExcelênciaJava com Excelência
Java com Excelência
 
Programação Orientada a Objetos - Pós Graduação - Aula 7 - Inversão de Controle
Programação Orientada a Objetos - Pós Graduação - Aula 7 - Inversão de ControleProgramação Orientada a Objetos - Pós Graduação - Aula 7 - Inversão de Controle
Programação Orientada a Objetos - Pós Graduação - Aula 7 - Inversão de Controle
 
TDC 2019 Clean Architeture com .net core
TDC 2019  Clean Architeture com .net coreTDC 2019  Clean Architeture com .net core
TDC 2019 Clean Architeture com .net core
 
Apresentação WTM
Apresentação WTMApresentação WTM
Apresentação WTM
 
Organizando a casa. o front end do jeitinho que a mamãe gosta
Organizando a casa. o front end do jeitinho que a mamãe gostaOrganizando a casa. o front end do jeitinho que a mamãe gosta
Organizando a casa. o front end do jeitinho que a mamãe gosta
 
Princípios de Programação Orientada a Objetos Solid, dry e kiss
Princípios de Programação Orientada a Objetos Solid, dry  e kiss Princípios de Programação Orientada a Objetos Solid, dry  e kiss
Princípios de Programação Orientada a Objetos Solid, dry e kiss
 
Programação Orientada a Objetos - Pós Graduação - aula 1
Programação Orientada a Objetos - Pós Graduação - aula 1Programação Orientada a Objetos - Pós Graduação - aula 1
Programação Orientada a Objetos - Pós Graduação - aula 1
 
De Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindo
De Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindoDe Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindo
De Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindo
 

TDC2022 - Como desacoplar Componentes aplicando DI e IoC com Kotlin e Spring.pptx

  • 1.
  • 2. Como desacoplar Componentes Aplicando DI e IoC com Spring e Kotlin
  • 3. Fabiano Góes Engenheiro de Software backend na Cora fabiano@cora.com.br /fabianogoes /fabianogoes
  • 4. ➢ Human ➢ Não sou dono da verdade ➢ Feedback
  • 6.
  • 7. A boa notícia é que, em muitos casos, os conceitos já estão sendo usados, mas nem sabemos.
  • 8. Acoplamento Um software com Forte Acoplamento torna-se um problema na hora de mantê-lo devido ao alto grau de interdependência entre seus componentes
  • 9. Um exemplo de como violar vários princípios ❌ Alta coesão. ❌ Baixo acoplamento. ❌ Responsabilidade única. ❌ Princípio da Inversão de Dependência. ❌ Abertos para extensão, mas fechados para modificação.
  • 10. Como podemos melhorar isso? ✓ Controller deveria apenas controlar a entrada e saída de dados. ✓ Controller não deveria saber sobre Repositório. ✓ Controller não deveria saber de como construir um Pedido. ✓ Precisamos conseguir testar nossa regra de pedido isoladamente. ✓ Precisamos conseguir configurar um banco de dados para cada ambiente.
  • 11. Porque desacoplar componentes? ● Funcionou. Por que mexer? ● Porque Refatorar? ● Teste é para os fracos. Don't want
  • 12. O conceito base para essa melhoria é: Classes devem ter alta coesão e baixo acoplamento!
  • 13. Não é fácil testar código acoplado e sem coesão! Se o seu código está difícil de ser testado isoladamente, pode ser um cheiro de que ele está com alto acoplamento e baixa coesão. E isso vai ter um custo alto e o seu castelo de cartas pode cair a qualquer momento.
  • 14. Princípios que podemos utilizar: Princípio da Responsabilidade única S do S.O.L.D Uma classe deve ter um, e somente um, motivo para mudar. Inversão de Controle Um padrão muito utilizado em POO para delegar a responsabilidade do ciclo de vida de componentes. Princípio da Inversão de Dependência D do S.O.L.I.D Dependa de abstrações e não de implementações
  • 16. Começando aplicando o princípio (DIP) Princípio da Inversão de Dependência D do S.O.L.I.D - Dependa de abstrações e não de implementações
  • 17. As implementações de Repositório (SRP) Princípio da Responsabilidade única S do S.O.L.D
  • 20. E o IoC cadê? onde ele entrou nessa história toda? Inversão de Controle Um padrão muito utilizado em POO para delegar a responsabilidade do ciclo de vida de componentes.
  • 21. Foi aí que o Spring brilhou e talvez você nem percebeu?
  • 22.
  • 23. Ciclo de vida do Container Spring
  • 25. Estrutura Domínio isolado e protegido das bordas de entrada e saída que envolvem tecnologia e não negócio. Portas são as Interfaces onde o UseCase conhece e executa alguma coisa fora do negócio. Infra é a parte de tecnologia e acesso externos ao domínio, como: Banco de Dados, Comunicação Assíncrona e etc. Web é a camada de input da aplicação
  • 26.
  • 27.
  • 28. </ E é isso aí > Let's code
  • 30. Somos remotos! Liberdade para a sua carreira te empoderar!