Personnellement, je ne crois pas que le déplacement de tous les arguments dans un struct sera beaucoup mieux. Il suffit de déplacer la saleté sous le tapis. Quand vous allez à traiter avec la création de la structure, vous avez le même problème.
La question est de savoir combien réutilisables cette structure sera? Si vous vous retrouvez avec un 18 les paramètres pour un appel de fonction de quelque chose, c'est pas tout à fait raison dans votre conception. Après une analyse plus poussée, vous pourriez découvrir que ces paramètres peuvent être regroupés en différentes classes et les classes peuvent être cumulées pour un objet unique, qui sera l'entrée de votre fonction. Vous pouvez aussi préférer les classes de structure dans le but de protéger vos données.
MODIFIER
Je vais vous donner un petit exemple pour décrire de façon, plusieurs classes sont mieux que ce qu'on monolithique struct. Nous allons commencer à compter les tests qui ont besoin d'écrire pour couvrir la fonction ci-dessus. Il y a 18 paramètres en entrée (3 boolean). Donc, nous allons avoir besoin d'au moins 15 tests pour valider la saisie (en supposant que les valeurs ne sont pas reliés).
Le nombre total de tests est impossible à calculer sans la mise en œuvre, mais nous pouvons avoir une idée de l'ampleur. Laissez prendre la limite inférieure de tous les commentaires peuvent être traiter comme boolean le nombre de combinaisons possibles de 2^18, de sorte autour de 262000 tests.
Maintenant, ce qui se passerait si nous avons divisé l'entrée dans plusieurs objets?
Tout d'abord, le code pour valider l'entrée est déplacé en dehors de la fonction dans le corps de chaque objet (et il peut être réutilisé).
Mais plus important encore, le nombre de tests va s'effondrer, disons que dans le groupe de quatre (4,4,4 et 4 params par objet) le nombre total de tests est à seulement:
2^4 + 2^4 + 2^4 + 2^4 + 2^4 = 80
La cinquième attributs est due à la permutation des objets eux-mêmes.
Alors, qu'est-ce que des coûts plus exigeant? Écrire des milliers de tests ou de quelques autres classes?
Évidemment, ce n'est qu'une grossière simplification, toutefois, il sera sous-jacente au cœur du problème. Un désordre de l'interface n'est pas qu'une question de style ou un inconvénient pour le développeur, c'est un vrai obstacle pour produire du code de qualité.
C'est la leçon la plus importante que j'ai jamais appris dans ma carrière en tant que développeur professionnel: "Grandes classes et de la graisse interfaces sont du mal". C'est juste mon heuristique version du principe de responsabilité unique (j'ai remarqué que la SRP peut être difficile à obtenir de droit, ce qu'il semble raisonnable d'être seule responsabilité, il peut être pas tout à fait la même après une heure de codage, donc j'ai utilisé une règle heuristique pour m'aider à revaulate mon choix de départ).