Допустим, у меня есть функция, IsAdmin
которая проверяет, является ли пользователь администратором. Давайте также скажем, что проверка администратора выполняется путем сопоставления идентификатора пользователя, имени и пароля с каким-то правилом (не важно).
В моей голове есть две возможные функции подписи для этого:
public bool IsAdmin(User user);
public bool IsAdmin(int id, string name, string password);
Я чаще всего иду на второй тип подписи, думая, что:
- Функция подписи дает читателю намного больше информации
- Логика, содержащаяся внутри функции, не должна знать о
User
классе - Обычно это приводит к немного меньшему количеству кода внутри функции
Однако я иногда подвергаю сомнению этот подход, а также понимаю, что в какой-то момент он станет громоздким. Если, например, функция отобразит между десятью различными полями объекта в результирующее логическое значение, я, очевидно, отправлю весь объект целиком. Но кроме яркого примера, подобного этому, я не вижу причин для перехода к реальному объекту.
Я был бы признателен за любые аргументы в пользу любого стиля, а также за любые общие замечания, которые вы могли бы предложить.
Я программирую как в объектно-ориентированном, так и в функциональном стилях, поэтому вопрос следует рассматривать как относящийся ко всем идиомам.