devterview_$ iniciar simulação

Efeito colateral escondido: a função que mente sobre o que faz

MédioPlenoDesign

Pergunta

Por que uma função chamada `getUsuario()` que também grava um log de auditoria e atualiza um cache no banco é um problema, mesmo que 'funcione'?

Resposta esperada

O nome promete uma consulta pura (`get`), mas ela também escreve — quem chama não tem como saber sem ler o corpo. Consequências: chamar `getUsuario()` num teste, num loop, ou num caminho onde você só queria ler agora dispara escritas inesperadas (log crescendo, contenção no banco, comportamento não-determinístico); reordenar ou remover a chamada muda o estado de formas surpreendentes; e fica difícil raciocinar sobre o código porque você não pode confiar nos nomes. Princípio: comando x consulta (CQS) — uma função ou RESPONDE algo sem mudar estado observável, ou MUDA estado e idealmente não retorna dado de negócio. Se a auditoria é necessária, ela é uma responsabilidade explícita (um decorator, um evento, uma chamada separada no caso de uso), não um efeito escondido dentro de um getter.

Por que perguntam isso

Pergunta pleno. Termo-chave: 'command-query separation'. Bom candidato dá a consequência concreta (teste/loop dispara escrita).

#efeitos-colaterais#cqs#pureza
publicidade

Relacionadas