A veces (raramente), parece que crear una función que tome una cantidad decente de parámetros es la mejor ruta.
El uso de varios parámetros suele ser un indicador claro de que usted viola el SRP en este método. Es poco probable que un método que necesita muchos parámetros haga una sola cosa. La exclusión puede ser una función matemática o un método de configuración, donde de hecho se necesitan varios parámetros como tales. Evitaría múltiples parámetros como el diablo evita el agua bendita. Cuantos más parámetros use dentro de un método, mayores serán las posibilidades de que el método sea (demasiado) complejo; cuanto más complejidad significa: más difícil de mantener y eso es menos deseable.
Sin embargo, cuando lo hago, siento que a menudo elijo el orden de los parámetros al azar. Por lo general, voy por "orden de importancia", con el parámetro más importante primero.
En principio estás eligiendo al azar . Por supuesto, puede pensar que el parámetro A es más relevante que el parámetro B ; pero ese podría no ser el caso para los usuarios de su API, quienes piensan que B es el parámetro más relevante. Entonces, incluso si estuviera atento al elegir el pedido, para otros podría parecer aleatorio .
¿Hay una mejor manera de hacer esto? ¿Existe una forma de "mejor práctica" de ordenar parámetros que mejore la claridad?
Hay varias salidas:
a) El caso trivial: no utilice más de un parámetro.
b) Como no especificó, qué idioma ha elegido, existe la posibilidad de que elija un idioma con parámetros con nombre . Este es un buen azúcar sintáctico que le permite aflojar la importancia del orden de los parámetros:fn(name:"John Doe", age:36)
No todos los idiomas permiten tales sutilezas. ¿Entonces, qué?
c) Podría usar un Diccionario / Mapa de hash / Matriz asociativa como parámetro: por ejemplo, Javascript permitiría lo siguiente: fn({"name":"John Doe", age:36})
que no está lejos de (b).
d) Por supuesto, si trabaja con un lenguaje de tipo estático como Java. podría usar un Hashmap , pero perdería información de tipo (por ejemplo, cuando trabaje con HashMap<String, Object>
) cuando los parámetros tengan diferentes tipos (y necesiten convertir).
El siguiente paso lógico sería pasar un Object
(si está utilizando Java) con las propiedades apropiadas o algo más liviano como una estructura (si escribe, por ejemplo, C # o C / C ++).
Regla de oro:
1) Mejor caso: su método no necesita ningún parámetro
2) Buen caso: su método necesita un parámetro
3) Caso tolerable: su método necesita dos parámetros
4) Todos los demás casos deben ser refactorizados
MessageBox.Show
. Mira eso también.