Lorsqu'une méthode a trop de paramètres?

Lors du débogage d'un web-service client code aujourd'hui (en Java, avec jax-ws), j'ai couru à travers un web-service méthode avec l'esprit de soufflage montant de 97 paramètres!

J'ai dû créer un cas de test qui appelle cette méthode, et j'ai remarqué plusieurs choses:

  • assistance de code/hover n'est pas à l'échelle. Je suis à l'aide d'Eclipse, et l'info-bulle sur la méthode est aussi large que l'écran, et s'étend sur plusieurs lignes.
  • J'ai dû copier les valeurs des paramètres à partir d'un xml précédente capture, et il était pratiquement impossible de se souvenir "où suis-je" - quand j'ai eu le curseur se trouve après la virgule et avant de taper une certaine valeur, j'ai souvent eu le type de données de mal - j'ai tapé un Entier au lieu d'une Chaîne de caractères et vice versa.
  • Même après que j'ai écrit à tous les paramètres, j'avais encore quelques erreurs et que la signature n'a pas de match. Malheureusement Eclipse marques de l'ensemble de la ligne en rouge comme ayant une erreur, afin de trouver où l'erreur a été pris encore plus de temps 🙁

Donc cela m'a fait penser, que pensez-vous est le maximum sane nombre de paramètres d'une méthode? Et si vous pouviez changer cette web-service de signature, comment pensez vous que cela peut-il être amélioré?

  • Passer une dict de paramètre noms/valeurs à la place?
  • J'ai pensé que, peut-être que c'est utile pour les méthodes ordinaires, mais avec web-service, il sape le point de l'ensemble du contrat. Vous obtenez également dans le problème de savoir comment sérialiser le dict en xml, et votre modèle de données devient beaucoup plus détendu (le dict peuvent avoir des valeurs manquantes, etc.).
  • La meilleure chose est de faire passer un dataset fortement typé. Ensuite, le contrat est dans et coups de pied.
  • 97 params!? Sonne comme un quotidien WTF.
  • stackoverflow.com/questions/174968/...
  • Btw, vous dites que c'est Java, mais étiquette d'indépendant de la langue, donc je vais prendre la liberté de donner un C idée (et l'espoir qu'il peut être utilisé dans d'autres langues. Tout d'abord, bien sûr, utiliser CONST où, éventuellement, & de sens, ne le laissez pas douter. Même si il est habituellement possible de savoir si une valeur est entrée, sortie et entrée/sortie (modifié par la fonction) ne sont pas si faciles à détecter, de manière générale, j' #define ENTRÉE et de SORTIE et de MODIFIER pour être les cordes à vide et d'utilisation avant chaque paramètre pour le rendre immédiatement évident pour le lecteur.
  • Et il ne fait pas de mal d'avoir une norme de codage. Dire, l'entrée de tous les params d'abord, puis ceux qui sont in/out et enfin la sortie de données.
  • 97 est excessive et un meilleur modèle d'objet peut aider, mais c'est un service web où seul les appels sont encouragés. Cela étant dit, je serais prêt à parier que la méthode est sans doute de façon trop.
  • Une autre application est de le décomposer en RESTful appelle xfront.com/REST-Web-Services.html
  • 97?! Ne pas le modifier, et de les appliquer pour le livre guinness des records!
  • Pas un record: stackoverflow.com/questions/174968/....
  • escargot: OMG! Comment peut-on faire une telle chose!
  • Je parie que le projet a été un projet Cobol et ils sont de la réécrire en Java.