Biorąc pod uwagę, że zmiany w sygnaturze API / metody publicznej powinny być minimalne, aby zapobiec łamaniu kodów klientów korzystających z tych metod, zastanawiałem się, czy prawo Demetera w mniejszym stopniu się do nich stosuje.
Prosty przykład:
class Account() {
double balance;
public void debit(Transaction t) {
balance -= t.getAmount();
}
}
Zauważ, że metoda debetowa przekazuje obiekt Transakcji zamiast podwójnej kwoty („Prawo Demetera”, jak rozumiem, powiedziałoby, aby przekazać wymagane informacje, w tym przypadku tylko kwotę, a nie obiekt Transakcji ... ). Powodem tego jest to, że metoda w przyszłości może wymagać innych właściwości Transakcji oprócz kwoty. Z tego, co rozumiem, zapobiegnie to złamaniu podpisu metody przez dodanie nowego parametru w przyszłości.
Czy to sprawia, że jest to rozsądny wybór? A może coś mi brakuje?