32 votes

Convaincre mon collègue que les méthodes à 26 paramètres sont une mauvaise pratique

Comment puis-je convaincre mon collègue de travail, que les méthodes avec 26 paramètres sont d'une mauvaise pratique? Nous avons discuté de cette question, sans aucun progrès.

Plus proche liés à des questions que j'ai pu trouver:

34voto

Robin Day Points 39440

Tu ne ... tu lui fais expliquer pourquoi ce n'est PAS une mauvaise pratique.

Écoutez ses remarques et dites-lui les raisons pour lesquelles vous le feriez d'une autre manière.

29voto

Méthodes avec beaucoup de paramètres ne sont pas nécessairement mauvais. Cela dépend de ce que les paramètres sont, par exemple. Je maintiens code avec certaines des méthodes qui prennent des dizaines de paramètres, car ces paramètres représentent des valeurs scalaires dans un objet, et l'objet de la création est le but de cette méthode.

Vous pourriez les réorganiser les paramètres si vous le vouliez, vous pourriez les mettre tous dans une carte, mais alors il n'y a aucun moyen d'être sûr qu'ils sont tous présents. Vous pouvez créer l'objet à la main, mais ensuite, soit vous avez un constructeur avec 26 paramètres ou vous avez 26 setXXXX les appels de méthode. Si votre objet exige de tous ces paramètres pour être complet, je dirais que vous êtes coincé avec le constructeur de l'approche ou la méthode de fabrique. Sinon, vous êtes en s'appuyant sur l'utilisateur configuration de l'objet correctement à chaque fois.

Quoi de mieux?

createTransation(date, username, transAmt, currency, accountNum, resultCode, ...);

Transaction trans = new Transaction(date, username, tranasAmt, currency, ...);
createTransaction(trans);

Transaction trans = new Transaction();
trans.setDate(date);
trans.setUsername(username);
// etc
createTransaction(trans);

Maintenant, si votre méthode a une poignée de paramètres de données et une poignée de paramètres de contrôle, tels que des drapeaux de choisir certains mode de fonctionnement, puis il devient problématique de l'utilisation de ces méthodes, et vous devriez lui expliquer qu'il devrait garder son code plus simple et plus concentré. Une méthode avec beaucoup de paramètres de contrôle a probablement un complexe de contrôle de la voie et pourrait être difficile à maintenir. Toutefois, il est commun pour un point d'entrée unique à un processus compliqué d'avoir beaucoup d'arguments; tenir compte de la ligne de commande pour votre compilateur: vous pourriez avoir des dizaines de drapeaux facilement. Mais dans ce cas, il devrait être possible de regrouper les options dans une structure unique, ce qui rend plus facile de déterminer les options doivent être définies, qui ont le comportement par défaut, etc.

Transaction trans = new Transaction(date, username, tranasAmt, currency, ...);
Options opts = new Options(DEFERRED, VALIDATE, STORE);
createTransaction(trans, opts);

La question d'origine est plutôt vague, mais il est important de se rappeler que, parfois, la complexité du code est nécessaire, ou au moins pas mal.

14voto

whaley Points 8789

Demandez-lui d'essayer de configurer un harnais de tests unitaires pour lequel il doit transmettre tous les objets réels / factices et prendre en compte tous les scénarios de tests possibles.

14voto

Steven A. Lowe Points 40596

Il Dépend

Cela dépend de ce que les paramètres sont, et ce qu'ils signifient.

Tandis que 26 paramètres semble désinvolte à être excessif, il peut être acceptable dans certains cas (DAL méthodes que la carte de procédures stockées viennent à l'esprit).

La sémantique des paramètres sont plus important que leur nombre - de regarder la liste des paramètres et de se demander si c'était une table de base de données des colonnes, aurais-je besoin de prendre des projections de normaliser?". Aussi se demander "si c'était une table de base de données des colonnes, auraient ils un sens en tant qu'attributs d'une entité unique?"

Dans de nombreux cas, la présence de l'excès de paramètres indique les classes manquantes dans la conception.

10voto

Stephan Eggermont Points 11224

Faites-lui écrire les tests unitaires.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X