Disons que j'ai une fonction IsAdmin
qui vérifie si un utilisateur est un administrateur. Disons également que la vérification de l'administrateur est effectuée en faisant correspondre l'identifiant, le nom et le mot de passe de l'utilisateur à une sorte de règle (sans importance).
Dans ma tête, il y a alors deux signatures de fonction possibles pour cela:
public bool IsAdmin(User user);
public bool IsAdmin(int id, string name, string password);
Je choisis le plus souvent le deuxième type de signature, en pensant que:
- La signature de fonction donne au lecteur beaucoup plus d'informations
- La logique contenue dans la fonction n'a pas besoin de connaître la
User
classe - Il en résulte généralement un peu moins de code dans la fonction
Cependant, je remets parfois en cause cette approche et réalise également qu’à un moment donné, elle deviendrait difficile à manier. Si, par exemple, une fonction mappait entre dix champs d'objet différents dans un bool résultant, j'enverrais évidemment l'objet entier. Mais à part un exemple aussi frappant que celui-là, je ne vois aucune raison de transmettre l'objet réel.
J'apprécierais tous les arguments pour l'un ou l'autre style, ainsi que vos observations générales.
Je programme dans les styles à la fois orienté objet et fonctionnel, la question doit donc être considérée comme concernant tous les idiomes.