2012-07-12 11 views
6

Esta pregunta proviene del punto de vista de javascript, pero ciertamente podría aplicarse a otros idiomas.Cuándo usar qué: múltiples métodos, parámetros múltiples o un parámetro de opciones

Me he estado encontrando con esto cada vez más últimamente, y me preguntaba si había una mejor práctica, o al menos un buen estándar de diseño, para cuándo crear sus métodos.

Las opciones obvias que veo son como sigue, junto con un ejemplo trivial para cada

  • métodos múltiples:

    this.makeGetRequest = function(controller){...} 
    this.makeSynchronousGetRequest = function(controller){...} 
    this.makePostRequest = function(controller, data){...} 
    
  • Un método, con más parámetros:

    //data would be an optional parameter 
    // this.makeRequest("friends", "GET", true); 
    // this.makeRequest("friends", "POST", false, newFriend); 
    this.makeRequest = function(controller, type, isSynchronous, data){...} 
    
  • Un método, con un parámetro de opciones:

    this.makeRequest = function(controller, type, options); 
    this.makeRequest("friends", "POST", {data:newFriend, isSync:false}); 
    

El peticiones HTTP ejemplo tan solo motivó la pregunta, pero esto funciona para cualquier función del lado público con cantidades variables de personalización/variables.

Los tres son obviamente igual de funcionales. Pero, ¿qué es una buena práctica? ¿Existe un estándar o lineamiento que se siga?

Respuesta

2

La ventaja del parámetro options es que permite opciones ilimitadas sin sacrificar la claridad. Cuando alguien especifica data: o isSync:, es obvio qué ajustes se están rellenando. Recordar establecer el 13º parámetro de una función en false es una receta para la confusión.

Entonces, entre las dos últimas opciones solo uso múltiples parámetros en casos donde (1) hay menos de cuatro parámetros en total, (2) la secuencia es lógica y fácil de recordar (URL, luego tipo, luego datos), y (3) no más de uno (el último) es opcional. Esa es una regla general, de todos modos.

¿Qué hay de los métodos múltiples frente a la parametrización? Múltiples métodos es solo una opción para comenzar cuando tienes un número pequeño de posibilidades (GET vs. POST, UseDefaults vs. DontUseDefaults, o lo que sea).Pensando en ello, tengo tendencia a métodos separados de ajustes cuando:

  1. La distinción es muy importante (una petición síncrona se comporta fundamentalmente diferente de una solicitud asincrónica y quiero que el desarrollador elegir conscientemente lo que se aplica a (. Mientras que, por el contrario, GET frente a POST es solo una propiedad más de su pedido; no es una decisión final, de reparto si lo hace incorrectamente.)

  2. No hay otras opciones que desee establecer de todos modos. Si primero tengo que recordar si llamar a foo.get() o foo.post() y entonces re miembro para completar un objeto optionsde todos modos, solo te estoy forzando a tomar decisiones en dos lugares diferentes. Prefiero tener todas las configuraciones en un solo lugar.

1

Obviamente, con métodos múltiples tendrías que tener algún tipo de supermétodo abstracto al que llamaran, de lo contrario te repetirías, lo que se considera malo, sin embargo, a veces es bueno tener métodos como alias o abreviaturas (véase por ejemplo jQuery $.getJSON() para un -Llame modificado $.ajax())

un método con más parámetros no es muy flexible si usted tiene una gran cantidad de spechial caso o parámetros opcionales, por ejemplo que tendría que utilizar una objeto de opciones como lo mencionaste en tu tercer ejemplo.

Realmente se reduce al caso de uso y la flexibilidad/reutilización necesarias. Personalmente siempre iría con el método One, con un enfoque de parámetro de opciones.

1

¿Qué hay de tener una "supermethod" con las opciones JSON para una flexibilidad máxima, y ​​luego tal vez algunos métodos de contenedor con parámetros más estrictamente definidas tener fácil acceso a las funciones más comúnmente utilizado.

Cuestiones relacionadas