Angesichts der Tatsache, dass Änderungen an der API / öffentlichen Methodensignatur minimal sein sollten, um zu verhindern, dass die Clientcodes, die diese Methoden verwenden, beschädigt werden, habe ich mich gefragt, ob das Demeter-Gesetz auf diese weniger anwendbar ist.
Ein einfaches Beispiel:
class Account() {
double balance;
public void debit(Transaction t) {
balance -= t.getAmount();
}
}
Beachten Sie, dass die Abbuchungsmethode das Transaktionsobjekt und nicht nur den doppelten Betrag übergibt (das 'Gesetz von Demeter' würde, so wie ich es verstehe, nur die erforderlichen Informationen übergeben, in diesem Fall nur den Betrag, nicht das Transaktionsobjekt ... ). Der Grund dafür ist, dass die Methode in Zukunft möglicherweise neben dem Betrag noch einige andere Transaktionseigenschaften erfordert. Soweit ich weiß, wird dies verhindern, dass die Methodensignatur durch Hinzufügen eines neuen Parameters in Zukunft beschädigt wird.
Ist dies dann eine vernünftige Wahl? Oder fehlt mir etwas?
quelle
Wenn Sie vorhaben, die
Account
Klasse in Zukunft zu erweitern, würde ich sagen, dass dies eine Situation ist, in derTransaction
es allgemeiner wäre , das Objekt allgemeiner zu machen, um die Regeln des Gesetzes zu biegen.Zum Beispiel:
Ich glaube, ich bin ein bisschen von der ursprünglichen Frage abgewichen, aber mein Punkt ist, dass, obwohl Sie vielleicht befürchten, dass Sie vom Gesetz von Demeter abweichen, die Vorteile diesbezüglich die negativen überwiegen.
quelle