Sembra che tu suggerisca che la complessità di un'interfaccia è misurata dal numero di elementi che ha (metodi, in questo caso).
Molti sostengono che il fatto di dover ricordare che il metodo charge
può essere utilizzato per restituire il saldo di un Client
aggiunge molta più complessità rispetto all'elemento extra del metodo getBalance
. Rendere le cose più esplicite è molto più semplice, specialmente al punto in cui non lascia ambiguità, indipendentemente dal numero più alto di elementi nell'interfaccia.
Inoltre, la chiamata di charge(0)
viola il principio di minimo stupore , noto anche come metrica WTFs al minuto (da Codice pulito, immagine sotto), che rende difficile per i nuovi membri del team (o quelli attuali, dopo un po 'di distanza dal codice) fino a quando non capiscono che la chiamata è effettivamente utilizzata per ottenere l'equilibrio. Pensa a come reagirebbero gli altri lettori:
Inoltre,lafirmadelmetodocharge
vacontrolelineeguidadi facendo una e una sola cosa e separazione comando-query , perché fa sì che l'oggetto cambi il suo stato mentre restituisce anche un nuovo valore .
Tutto sommato, credo che l'interfaccia più semplice in questo caso sarebbe:
public class Client {
private float bal;
float getBalance() { return bal; }
void charge(float c) { bal -= c; }
}