A Lei de Demeter afirma o seguinte:
- Cada unidade deve ter apenas conhecimento limitado sobre outras unidades: somente unidades "estreitamente" relacionadas à unidade atual.
- Cada unidade deve conversar apenas com seus amigos; não fale com estranhos.
- Fale apenas com seus amigos imediatos.
O C # 6.0 introduziu um novo operador chamado operador nulo-condicional . IMHO, facilita a codificação e melhora a legibilidade. Mas também facilita escrever mais códigos acoplados, pois é mais fácil navegar pelos campos de classe, já verificando a nulidade (algo como var x = A?.B?.C?.D?.E?.F?
).
É correto afirmar que esse novo operador contraria a Lei de Demeter?
X.Y.Z.W.U
é uma violação da "lei". Mas, na minha experiência em lidar com código, 90% das vezes é apenas um código acoplado feio.
.?
não mais viola LoD do que +
ou -
faz.
A?.B?.C?.D?.E?.F?
iria violá-lo - LoD não é sobre quantos pontos e se o método de chamada tiver essas informações sobre a estrutura que não está violando seus pontos, essa chamada seria perfeitamente aceitável. Que tal código poderia violar LoD não é suficiente para dizer que todos os usos do que fazer violar LoD.