2010-04-08 7 views
18

¿Es mejor (cuál es la mejor práctica) crear métodos con una larga lista de parámetros o ajustar los parámetros en un objeto?¿Es mejor crear métodos con una larga lista de parámetros o ajustar los parámetros en un objeto?

Quiero decir, digamos que tengo un tipo de datos de Cliente con una larga lista de propiedades y quiero actualizar todas las propiedades a la vez. ¿es mejor hacer algo como

public int Update(int id, string name, string surname, string streetAddress, string streetAddress2, string postcode, string town, string city, string nationality, string age, string gender,string job) 
{ } 

o envolver todas las propiedades de un objeto y hacer algo como

public int Update(Client client) 
{ } 

gracias

+2

utilice el segundo enfoque. En el momento en que escribe una llamada para actualizar, no recordará de memoria cuál fue cada parámetro. IntelliSense puede ayudar, pero aun así, es terrible cuando intentamos entender su código cuando lo miramos. – Abel

+0

posible duplicado de http://stackoverflow.com/questions/439574/whats-the-best-way-to-refactor-a-method-that-has-too-many-6-parameters –

Respuesta

21

En su libro Refactoring, Martin Fowler llama explícitamente el parámetro de largo enumera como código huele y sugiere refactorizar dichos métodos para usar un Objeto de parámetro.

Una variación consiste en identificar cómo se agrupan esos muchos parámetros y crear más de un Objeto de parámetro que represente cada uno de dichos grupos.

La ventaja de un objeto de parámetro es que el código se vuelve más legible cuando se puede dar el parámetro objeto un nombre comunicativa. Puede ocurrir que el Objeto de parámetro represente Domain Concept real, y lo siguiente que puede hacer es comenzar a mover comportamiento en él.

+0

+1 sucinta y al ¡punto! – Abel

1

Yo diría que es mejor usar un objeto. Si busca Desbordamiento de pila, existen numerosas otras publicaciones relacionadas con este tema

0

Normalmente debería utilizar un objeto. Por lo general, cuando tiene una gran cantidad de parámetros en un método, esos parámetros describen un "estado" particular. Tu código de ejemplo indica exactamente lo que quiero decir.

0

¿Qué ocurre con el uso de un Value Provider por componente en comparación con los parámetros de entrada (en este caso agrupados).

Gracias

Cuestiones relacionadas