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
No post de hoje, quero falar com você sobre encapsulamento. Mas, na verdade, quero levantar uma pergunta: será que esconder todos os detalhes de implementação realmente é uma boa decisão?
Encapsulamento e Suas Implicações
Vamos analisar um exemplo prático. Em um projeto no qual estou trabalhando, tenho uma variável que referencia um objeto de uma determinada classe. Esse objeto possui métodos que simplificam e extraem estruturas de páginas HTML. A ideia de encapsulamento aqui parece funcionar bem: você pede para simplificar o HTML e recebe o HTML simplificado, sem precisar saber como isso é feito.
No entanto, ao olhar mais de perto, percebemos que essa interface está anotada com um metadado que indica que as chamadas são remotas. Isso significa que, embora a chamada pareça local, ela é, na verdade, uma chamada remota. E isso levanta uma questão importante: será que é correto esconder esse detalhe?
A Importância de Expor Certos Detalhes
Eu, Rafael e Maurício discutimos bastante sobre isso no Dev Eficiente. Não se trata de certo ou errado, mas de trade-offs no design. Se você esconde que uma chamada é remota, pode causar problemas, especialmente se alguém assumir que a chamada é local e a utilizar de maneira inadequada, como em um loop. Isso pode levar a tempos de execução inesperados e outros problemas.
Por outro lado, expor que a chamada é remota pode ajudar a evitar esses problemas. Por exemplo, se você nomear o método de forma que indique que a chamada é remota, quem for utilizar esse código terá mais informações para tomar decisões adequadas. Pode também colocar uma documentação adicional.
Encapsulamento e Execução Assíncrona
Outro ponto importante é a execução assíncrona. Imagine que você chama um método que retorna void, mas a execução é assíncrona. Isso pode influenciar a próxima linha de código. Se você souber que a execução é assíncrona, pode lidar com isso de maneira adequada. As linguagens já tem as abstrações necessárias para indicar que a o resultado vai ser calculado de maneira assíncrona. No Javascript você pode utilizar uma Promise, no Java pode utilizar uma CompletableFuture(conceito de Promise por lá) e por aí vai.
Conclusão
Encapsular detalhes de implementação pode ser uma boa prática, mas é importante saber quais detalhes esconder e quais expor. Detalhes que afetam a infraestrutura ou o tempo de execução devem/podem ser explícitos no contrato do seu código. Isso ajuda a evitar problemas e a garantir que o código seja utilizado de maneira adequada.
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)