Étant donné que les modifications apportées à la signature API / méthode publique devraient être minimes pour éviter de casser les codes clients qui utilisent ces méthodes, je me demandais si la loi de Demeter est moins applicable à ceux-ci.
Un exemple simple:
class Account() {
double balance;
public void debit(Transaction t) {
balance -= t.getAmount();
}
}
Notez que la méthode de débit transmet l'objet Transaction plutôt que simplement le double du montant (la `` Loi de Déméter '', si je comprends bien, dirait de simplement passer les informations requises, dans ce cas, juste le montant, pas l'objet Transaction ... ). La raison derrière cela est que la méthode à l'avenir pourrait nécessiter d'autres propriétés de transaction en dehors du montant. D'après ce que je comprends, cela empêchera de casser la signature de la méthode en ajoutant un nouveau paramètre à l'avenir.
Est-ce que cela en fait un choix judicieux? Ou est-ce que je manque quelque chose?
la source
Si vous envisagez d'élargir la
Account
classe à l'avenir, je dirais que c'est une situation où rendre l'Transaction
objet plus général serait une bonne flexion des règles de la loi.Par exemple:
Je pense que je m'éloigne en quelque sorte de la question initiale, mais mon argument est que, même si vous craignez que vous vous éloigniez de la loi de Déméter, les avantages de le faire l'emportent sur les négatifs.
la source