DEV Community

Alberto Luiz Souza
Alberto Luiz Souza

Posted on

Acoplamento Mental: O pior Acoplamento que existe

Disclaimer

Este texto foi inicialmente concebido pela IA Generativa em função da transcrição do episódio do nosso canal, Dev Eficiente. O episódio completo pode ser visto no canal.

Introdução

Hoje vamos sobre um tipo específico de acoplamento no código, o que eu chamo de acoplamento mental. Esse tipo de acoplamento não é tão explícito quanto outros, mas pode ser até mais prejudicial.

O Que é Acoplamento Mental?

O acoplamento mental ocorre quando a implementação de um método assume implicitamente que o ponto de chamada sabe como utilizar o retorno desse método.

class DadosBusca {

  public Optional<String> getMetaInformacoes() {
      if (this.metaInformacoes.size() > 0 ) {
        return Optional.of(String.join(" ", this.metaInformacoes));
      }
      return Optional.empty();
  }

}

class Busca {

  public SearchPage<Documento> busca(DadosBusca dadosBusca) {
    ...
        dadosBusca
        .getMetaInformacoes()
        .ifPresent(
            metaInfo ->
                qb.must(QueryBuilders.multiMatchQuery(metaInfo, "meta-informacoes.*").fuzziness(AUTO)));
  }

}
Enter fullscreen mode Exit fullscreen mode

No exemplo acima, o código do método busca usa diretamente o retorno do método getMetaInformacoes. A pergunta que fica é: Como este ponto sabe que o retorno é uma String separada por espaço ? É um detalhe de implementação.

Existe uma boa chance de alguém ter olhado o código lá dentro e implementado a chamada assumindo que o retorno vai ser sempre deste jeito. É isso que eu chamo de Acoplamento Mental.

Isso cria uma dependência não documentada e difícil de identificar, pois está baseada no entendimento tácito da pessoa desenvolvedora.

Problemas com Acoplamento Mental

Esse tipo de acoplamento é problemático porque:

  • Dificuldade de Manutenção: Se outra pessoa dev precisar modificar o método ou o ponto de chamada, ele pode não entender essa dependência implícita, causando bugs.

  • Falta de Clareza: O código não deixa claro quais são as premissas necessárias para que ele funcione corretamente.

  • Fragilidade: Pequenas mudanças podem quebrar o código de maneiras inesperadas.

Como Evitar o Acoplamento Mental

Para evitar o acoplamento mental, é importante tornar explícitas as dependências e premissas do código. Uma maneira de fazer isso é através de uma boa documentação e de APIs claras que não deixem margem para dúvidas sobre como os métodos devem ser utilizados.

Por exemplo, em vez de retornar uma string delimitada por espaços, você poderia retornar uma lista de strings e deixar claro no nome do método e na documentação como essa lista deve ser utilizada.

class DadosBusca {

  //versao 1: Deixa mais nítido a operação que está sendo facilitada
  public Optional<String> joinMetaInformacoes(String delimitador) {
      if (this.metaInformacoes.size() > 0 ) {
        return Optional.of(String.join(delimitador, this.metaInformacoes));
      }
      return Optional.empty();
  }

  //versao 2: Simplesmente retorna a lista e deixa o trabalho de formatar para o ponto chamador
  public List<String> getMetaInformacoes() {
      return this.metaInformacoes;
  }  

}

class Busca {

  public SearchPage<Documento> busca(DadosBusca dadosBusca) {
    ...
        dadosBusca
        .joinMetaInformacoes(" ")
        .ifPresent(
            metaInformacoes ->
                qb.must(QueryBuilders.multiMatchQuery(metaInformacoes, "meta-informacoes.*")));
  }

}
Enter fullscreen mode Exit fullscreen mode

Conclusão

O acoplamento mental é um problema sutil, mas que pode ter grandes impactos na manutenibilidade e clareza do código. Ao tornar explícitas as dependências e premissas, você facilita a vida de outras pessoas devs e melhora a qualidade do seu código.

Vamos falar mais ?

Se você gostou, deixa um comentário aqui. Tem um comentário construtivo? Deixa aqui também, com educação. Vamos trocar mais ideias :).

Conheça mais sobre a Jornada Dev + Eficiente

A Jornada Dev + Eficiente é um treinamento cujo objetivo é fazer com que você cresça na carreira como uma pessoa especialista em Design e Arquitetura de Software.

Para saber mais, acesse em https://deveficiente.com

Top comments (0)