Lei de Demeter e o `a.getB().getC().fazer()`
Pergunta
O que a Lei de Demeter ('não fale com estranhos') recomenda, e qual o problema de uma cadeia como `pedido.getCliente().getEndereco().getCidade()`?
Resposta esperada
A Lei de Demeter diz que um método só deveria chamar métodos de: o próprio objeto, seus parâmetros, objetos que ele cria, e seus campos diretos — não de objetos obtidos a partir de outros. `pedido.getCliente().getEndereco().getCidade()` viola: o código que faz isso agora depende da estrutura interna de Pedido, de Cliente E de Endereço — qualquer um dos três mudar quebra aqui, e você acoplou a três classes pra um dado. Melhor: `pedido.getCidadeDeEntrega()` — Pedido expõe o que você precisa e a navegação fica encapsulada nele. O cuidado: a lei é sobre cadeias de navegação de objetos, não sobre APIs fluentes/builders (`query.where().orderBy().limit()`), onde cada chamada devolve o mesmo tipo de propósito.
Por que perguntam isso
Pergunta pleno. Sinal de nuance: reconhecer que APIs fluentes/builders não violam a lei (não são navegação de objeto).