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

[DevPR] Entendendo e aceitando o acoplamento

[DevPR] Entendendo e aceitando o acoplamento

Avatar for Renan Delmonico

Renan Delmonico

June 28, 2025
Tweet

More Decks by Renan Delmonico

Other Decks in Programming

Transcript

  1. Renan H. Delmonico ➔ 29 anos ➔ Graduado em Sistemas

    de Informação (Unipar) ➔ Especialista em desenvolvimento web e mobile (Alfa Umuarama) ➔ Desenvolvedor há mais de 10 anos ➔ Engenheiro de Software no PagSeguro International (antigo BoaCompra) ➔ Apaixonado por futebol 🌴👍🌍 e esporte eletrônico (CS2/EAFC) 🔫 @renandelmonico @renandelmonico /renandelmonico /renandelmonico /renandelmonico [email protected]
  2. Acoplamento ➔ Pode se tornar uma das principais dificuldades para

    evoluir um software, o que acaba se tornando a principal fonte de custo em uma futura evolução . ➔ Normalmente os juros cobrados para a resolução podem ser muito altos. ➔ Um menor acoplamento pode deixar uma alteração ou evolução mais flexível, porém pode introduzir alguns overheads ◆ Mapeamentos, serializações ◆ Desacoplamento entre microservices: comunicação assíncrona ➔ No início, um software mais acoplado pode dar a sensação de ser mais rápido de ser desenvolvido, porém gera sérios problemas ◆ Dificulta testes ◆ Refatorações são mais complicadas ◆ Evolução da arquitetura é difícil
  3. Acoplamento ➔ Em softwares menores, um acoplamento maior pode ser

    mais fácil de entender, porém quando o software vai crescendo os problemas começam a aparecer ◆ Alteração na camada X pode quebrar a camada Y ➔ Em softwares maiores, um acoplamento menor nos ajuda a separar as responsabilidades de maneira clara, porém em softwares menores pode parecer mais verboso e mais complexo do que deveria ➔ Não existe certo ou errado, tudo é tradeoff!
  4. Acoplamento aferente ➔ É a quantidade de módulos que dependem

    de um em específico ➔ Em outras palavras, quantos outros módulos usam ou importam um determinado módulo ➔ Um alto número indica que esse módulo é muito usado e importante para o software ➔ Bom para camadas mais relevantes e estáveis ◆ Camada com regras de negócio
  5. Acoplamento eferente ➔ É a quantidade de módulos que um

    em específico depende ➔ Em outras palavras, quantos módulos um determinado módulo usa ou importa ➔ Um alto número indica que este módulo depende muito de módulos externos, ou seja, ele é frágil a mudanças externas ➔ As famosas Controllers tendem a exigir alguma alteração quando módulos que elas dependem são alteradas
  6. Calculando a instabilidade I = Instabilidade Ce = acoplamento eferente

    Ca = acoplamento aferente 0 = Estável 1 = Instável
  7. Acoplamento dentro da arquitetura do software Ce = 0 /

    Ca = 1 Ce = 1 / Ca = 1..N Ce = 1..N / Ca = 1 Ce = 1 / Ca = 0 0 = Estável (core) 0.33 = Estável, mas um pouco flexível 0.66 = Menos estável. Tende a mudar mais 1 = Instável. Facilmente trocado
  8. Tipos de testes por grau de instabilidade Ce = 0

    / Ca = 1 Ce = 1 / Ca = 1..N Ce = 1..N / Ca = 1 Ce = 1 / Ca = 0 Unitário Unitário + mocks ou integração in memory Unitário ou integração + contrato E2E + testes exploratórios
  9. Acoplamento entre microservices Serviço de carrinho Ce = 2 /

    Ca = 0 Serviço de estoque Ce = 0 / Ca = 1 Serviço de frete Ce = 1 / Ca = 1 API dos Correios Ce = 0 / Ca = 1