Inveja de recurso é um termo usado para descrever uma situação na qual um objeto recebe nos campos de outro objeto para realizar algum tipo de cálculo ou tomar uma decisão, ao invés de pedir ao objeto para fazer a computação em si.
Como um exemplo trivial, considere uma classe representando um retângulo. O usuário do retângulo pode precisar conhecer sua área. O programador pode expor os campos width
e height
e, em seguida, fazer o cálculo fora da classe Rectangle
. Como alternativa, Rectangle
poderia manter os campos width
e height
como privados e fornecer um método getArea
. Esta é sem dúvida uma abordagem melhor.
O problema com a primeira situação, e a razão pela qual é considerado um cheiro de código, é porque quebra o encapsulamento.
Como regra geral, sempre que você estiver fazendo uso extensivo de campos de outra classe para realizar qualquer tipo de lógica ou computação, considere mover essa lógica para um método na própria classe.