Учитывая, что изменения в сигнатуре API / публичного метода должны быть минимальными, чтобы не допустить взлома тех клиентских кодов, которые используют эти методы, мне было интересно, не применим ли закон Деметры к ним.
Простой пример:
class Account() {
double balance;
public void debit(Transaction t) {
balance -= t.getAmount();
}
}
Обратите внимание, что метод дебетования передает объект транзакции, а не просто двойную сумму («Закон Деметры», как я понимаю, сказал бы просто передать необходимую информацию, в данном случае только сумму, а не объект транзакции ...) ). Причина этого заключается в том, что метод в будущем может потребовать некоторые другие свойства транзакции помимо суммы. Насколько я понимаю, это предотвратит нарушение сигнатуры метода, добавив новый параметр в будущем.
Делает ли это разумный выбор? Или я что-то упустил?