Digamos que tengo una función IsAdmin
que verifica si un usuario es un administrador. Digamos también que la verificación del administrador se realiza al hacer coincidir la identificación del usuario, el nombre y la contraseña con algún tipo de regla (no importante).
En mi mente hay dos posibles firmas de funciones para esto:
public bool IsAdmin(User user);
public bool IsAdmin(int id, string name, string password);
La mayoría de las veces voy para 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 acerca de la clase
User
- Por lo general, se obtiene un código ligeramente menor dentro de la función
Sin embargo, a veces cuestiono este enfoque y también me doy cuenta de que en algún momento se volverá difícil de manejar. Si, por ejemplo, una función se asignara entre diez campos de objeto diferentes en un bool resultante, obviamente enviaría el objeto completo. Pero aparte de un ejemplo rígido como ese, no puedo ver una razón para pasar el objeto real.
Apreciaría cualquier argumento para cualquiera de los estilos, así como cualquier observación general que pueda ofrecer.
Programo en estilos tanto orientados a objetos como funcionales, por lo que la pregunta debería considerarse en relación con cualquiera y todos los idiomas.