Скажімо, у мене є функція, IsAdmin
яка перевіряє, чи є користувач адміністратором. Скажімо також, що перевірка адміністратора проводиться шляхом зіставлення ідентифікатора користувача, імені та пароля проти якогось правила (не важливо).
Тоді в моїй голові є два можливі підписи функції для цього:
public bool IsAdmin(User user);
public bool IsAdmin(int id, string name, string password);
Я найчастіше берусь за другий тип підпису, думаючи, що:
- Підпис функції дає читачеві набагато більше інформації
- Логіка, що міститься у функції, не повинна знати про
User
клас - Зазвичай це призводить до дещо меншого коду всередині функції
Однак я іноді ставлю під сумнів цей підхід, а також усвідомлюю, що в якийсь момент він стане непростим. Якщо, наприклад, функція буде відображати між десятьма різними полями об'єкта в отриманий bool, я, очевидно, відправив би весь об'єкт. Але, крім подібного прикладу, я не бачу приводу перейти до фактичного об'єкта.
Буду вдячний за будь-які аргументи для будь-якого стилю, а також будь-які загальні спостереження, які ви можете запропонувати.
Я програмую як в об'єктно-орієнтованому, так і у функціональному стилях, тому питання слід розглядати як стосовно будь-яких ідіом.