DEV Community

Cover image for Reduzindo acoplamento no desenvolvimento de software
Mattheus Cassundé
Mattheus Cassundé

Posted on • Edited on

2 1

Reduzindo acoplamento no desenvolvimento de software

Existem vários princípios que ajudam na implementação de códigos mais desacoplados e tudo mais, aqui a ideia e exemplificar como podemos fazer isso.

Exemplo

Imagine que estamos implementando um código que vende jornal, teremos uma entidade que representa a Banca e outra que representa a Carteira de um cliente.

Implementação acoplada

public void pagaJornal(BigDecimal valorJornal, Carteira carteira){

  if(carteira.getSaldo().compareTo(valorJornal) > 0){
    cateira.debitaSaldo(valorJornal);
  }else{
    // exception SaldoInsuficiente
  }

}
Enter fullscreen mode Exit fullscreen mode

Nessa primeira abordagem a Banca pega a carteira do cliente verifica se tem o valor necessário e caso sim tira o valor do jornal de dentro da certeira do cliente, talvez isso não seja tão legal pois a Banca sabe muito sobre a carteira do cliente.

Implementação desacoplada

Agora vamos implementar uma solução de uma forma mais desacoplada.

class Carteira{

  private BigDecimal saldo;

  public void paga(BigDecimal valorADebitar) throws SemSaldoException  {
    if(this.saldo.compareTo(valorADebitar) > 0){
      this.saldo = this.saldo.substract(valorADebitar);
    }else{
      throw new SemSaldoException();
    }
  }
}

class Banca{
  public void pagaJornal(BigDecimal valorJornal, Carteira   carteira){
    try{
      carteira.paga(valorJornal);
    }catch(Exception e){
      // exception SaldoInsuficiente
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Nessa segunda abordagem a regra de saldo fica dentro da própria carteira, dessa forma a entidade Carteira está mais livre para cuidar da sua responsabilidade, caso seja necessário incluir essa mesma funcionalidade em outra parte do projeto agora será mais simples.

Referência

Principio de Demeter
https://pt.wikipedia.org/wiki/Lei_de_Demeter

Engenharia Moderna
https://www.amazon.com.br/Engenharia-Software-Moderna-Marco-Valente/dp/6500019504

Conheça outros papos

Billboard image

Deploy and scale your apps on AWS and GCP with a world class developer experience

Coherence makes it easy to set up and maintain cloud infrastructure. Harness the extensibility, compliance and cost efficiency of the cloud.

Learn more

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay