Diciamo che ho una funzione IsAdmin
che controlla se un utente è un amministratore. Diciamo anche che il controllo dell'amministratore viene eseguito abbinando l'id, il nome e la password dell'utente rispetto ad una sorta di regola (non importante).
Nella mia testa ci sono quindi due possibili firme di funzioni per questo:
public bool IsAdmin(User user);
public bool IsAdmin(int id, string name, string password);
Spesso vado per il secondo tipo di firma, pensando che:
- La firma della funzione dà al lettore molte più informazioni
- La logica contenuta all'interno della funzione non deve conoscere la
User
class - Di solito risulta un codice leggermente inferiore all'interno della funzione
Tuttavia a volte metto in discussione questo approccio, e realizzo anche che a un certo punto diventerebbe poco pratico. Se per esempio una funzione mappasse tra dieci diversi campi oggetto in un bool risultante, ovviamente invierò l'intero oggetto. Ma a parte un esempio rigido come quello, non riesco a vedere un motivo per passare nell'oggetto reale.
Apprezzerei qualsiasi argomento per entrambi gli stili, così come eventuali osservazioni generali che potresti offrire.
Io programma in entrambi gli stili orientati agli oggetti e funzionali, quindi la domanda dovrebbe essere vista come relativa a qualsiasi e tutti gli idiomi.