Digamos que eu tenho uma função IsAdmin
que verifica se um usuário é um administrador. Digamos também que a verificação do administrador seja feita combinando a ID do usuário, o nome e a senha com algum tipo de regra (não importante).
Na minha cabeça, existem duas possíveis assinaturas de funções para isso:
public bool IsAdmin(User user);
public bool IsAdmin(int id, string name, string password);
Costumo escolher o segundo tipo de assinatura, pensando que:
- A assinatura da função fornece ao leitor muito mais informações
- A lógica contida na função não precisa saber sobre a
User
classe - Geralmente resulta em um pouco menos de código dentro da função
No entanto, às vezes questiono essa abordagem e também percebo que em algum momento ela se tornaria pesada. Se, por exemplo, uma função mapeasse entre dez campos de objetos diferentes em um bool resultante, eu obviamente enviaria o objeto inteiro. Mas, além de um exemplo gritante como esse, não vejo uma razão para passar no objeto real.
Eu apreciaria quaisquer argumentos para qualquer estilo, bem como quaisquer observações gerais que você possa oferecer.
Como programa em estilos orientados a objetos e funcionais, a pergunta deve ser vista em relação a todo e qualquer idioma.