Pregunta

Si una clase tiene demasiados parámetros en el constructor, podemos usar una estructura o un patrón de constructor.

¿Cual es mejor? ¿Hay buenas prácticas?

¿Fue útil?

Solución

Use una clase con estructura que satisfaga sus necesidades. Martin Fowler tiene una técnica similar llamada DatatransferObject (DTO), en el que pasa un modelo de objeto en lugar de recuperar los datos utilizando múltiples llamadas (persumiblemente llamadas de base de datos), reduciendo el costo.

El beneficio sobre el patrón de constructor:

  1. La estructura de clase no tiene lógica adicional, significa que es más fácil de leer (menos lógica)
  2. No cree Constructor haciendo trabajos reales El olor del código, nuevamente hace que el código sea más fácil de leer
  3. La operación es barata, ya que solo pasa las referencias y no crea un objeto nuevo. Especialmente cuando la estructura de datos es grande.

La desventaja: el objeto está en estado mutable.

Otros consejos

Dependería de cuáles eran los parámetros y de su relación entre sí y cuántos se requieren frente a opcionales.

Si se relacionan varios parámetros, generalmente es mejor crear una clase (o estructura) separada para almacenar esos parámetros.

Por ejemplo en lugar de

TransferMoney(long srcAccountNumber, int srcAmount, Currency srcCurrency, long destAccountNumber)

Podemos ver que SRC Ammount y SRCCURNIDAD están relacionados y podemos crear una nueva clase para manejar el dinero de varias cantidades (y posiblemente agregar métodos para convertir a otras monedas, etc.) y reducir el número de parámetros:

TransferMoney(long srcAccountNumber, Money amount, long destAccountNumber)

Esta pregunta es el lenguaje agnóstico, pero si tenía un idioma que no admite valores predeterminados (como Java), entonces es posible que necesite tener varios métodos sobrecargados con diferentes números y tipos de parámetros para adaptarse a todas las combinaciones posibles. Si hay muchas combinaciones, entonces un constructor es un camino más limpio a seguir.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top