Digamos que tengo una función IsAdmin
que verifica si un usuario es administrador. Supongamos también que la comprobación del administrador se realiza haciendo coincidir el ID de usuario, el nombre y la contraseña con algún tipo de regla (no importante).
En mi cabeza, hay dos posibles firmas de funciones para esto:
public bool IsAdmin(User user);
public bool IsAdmin(int id, string name, string password);
A menudo busco el segundo tipo de firma, pensando que:
- La firma de la función le da al lector mucha más información
- La lógica contenida dentro de la función no tiene que saber sobre la
User
clase - Por lo general, resulta un poco menos de código dentro de la función
Sin embargo, a veces cuestiono este enfoque y también me doy cuenta de que en algún momento sería difícil de manejar. Si, por ejemplo, una función mapeara entre diez campos de objetos diferentes en un bool resultante, obviamente enviaría todo el objeto. Pero aparte de un claro ejemplo como ese, no puedo ver una razón para pasar el objeto real.
Agradecería cualquier argumento para cualquier estilo, así como cualquier observación general que pueda ofrecer.
Programo tanto en estilos orientados a objetos como en estilos funcionales, por lo que la pregunta debe considerarse en relación con todos y cada uno de los modismos.