Dado que as alterações na assinatura da API / método público devem ser mínimas para evitar a quebra dos códigos dos clientes que usam esses métodos, fiquei pensando se a Lei de Demeter é menos aplicável a eles.
Um exemplo simples:
class Account() {
double balance;
public void debit(Transaction t) {
balance -= t.getAmount();
}
}
Observe que o método de débito passa o objeto Transaction em vez de apenas o dobro da quantia (a 'Lei de Demeter', como eu o entendo, diria apenas passar as informações necessárias, neste caso, apenas a quantia, não o objeto Transaction ... ) A razão por trás disso é que o método no futuro pode exigir outras propriedades de Transação além do valor. Pelo que entendi, isso impedirá a quebra da assinatura do método adicionando um novo parâmetro no futuro.
Isso faz com que seja uma escolha sensata, então? Ou eu estou esquecendo de alguma coisa?
fonte
Se você planeja expandir a
Account
classe no futuro, eu diria que essa é uma situação em que tornar oTransaction
objeto um propósito mais geral seria uma boa distorção das regras da Lei.Por exemplo:
Eu acho que estou me afastando da questão original, mas o que quero dizer é que, embora você possa estar preocupado com o fato de estar se afastando da Lei de Demeter, as vantagens de fazê-lo superam os negativos.
fonte