Ho avuto una discussione con un collega di lavoro sui membri dell'interfaccia con parametri che alcune implementazioni non usano.
Dire che ho un'interfaccia
interface IDoctor
{
string GetMedicalOpinion(Age age, Weight weight, SleepSchedule sleepSchedule, Symptom symptom)
}
Le implementazioni di IDoctor non utilizzano necessariamente tutti i parametri del metodo:
class BadDoctor : IDoctor
{
string GetMedicalOpinion(Age age, Weight weight, SleepSchedule sleepSchedule, Symptom symptom)
{
if (Symptom == Symptoms.Fatigue)
return "You're sick!";
return "You're okay."
}
}
Il mio collega pensa che l'interfaccia sia mal definita perché ci sono implementazioni che non usano tutti i parametri del metodo.
Penso che vada bene. Avere un metodo con tutti i parametri ci dà il polimorfismo - possiamo scambiare gli IDoctor di varia competenza senza modificare il codice circostante. Inoltre, i parametri sono dati immutabili, quindi i consumatori non dovrebbero avere alcuna aspettativa che la funzione faccia qualcosa di diverso dal restituire una stringa. Infine, i parametri sono tutte cose che i consumatori dovrebbero avere naturalmente, quindi fornire le informazioni non è un onere per i consumatori.
Questo viola i principi del design contemporaneo? C'è davvero un problema con i membri dell'interfaccia che hanno parametri usati da alcune implementazioni, ma ignorati da altri?