Peut-être un peu ironique, mais comme je ne trouve aucune réponse à cette question via Google, il est donc important de s’assurer que le génie logiciel a bien la réponse:
Qu'est-ce qu'un assistant?
J'ai vu le nom utilisé partout (noms de modules, noms de classes, noms de méthodes), comme si la sémantique était profonde et significative, mais dans le contexte de l'informatique (bien que je ne sois pas diplômé), je ' Je n'ai jamais vu une description ou une définition nulle part!
Est-ce un motif de conception? Est-ce un algorithme? J'ai déjà travaillé sur un programme dans lequel le module et la classe s'appelaient tous deux quelque chose ( quelque chose d' assez générique aussi) et je l'ai rapidement renommé en quelque chose de sensé pour moi, mais j'ai le sentiment que quelque chose me manque!
la source
Réponses:
Une classe Helper est une odeur de code moins connue lorsqu'un codeur a identifié certaines opérations diverses couramment utilisées et a tenté de les rendre réutilisables en les regroupant dans un groupe non naturel. Les développeurs successifs sont alors entrés dans le projet et ne se sont pas rendus compte que la classe d'assistance existait, et ont par conséquent réécrit les mêmes opérations courantes, voire ont créé plusieurs classes d'assistance.
Mais sérieusement, le principal problème des classes Helper est qu’il s’agit généralement d’opérations qui agissent sur une classe spécifique, ce qui signifie évidemment qu’elles souffrent d’un cas aigu d’ Envy Feature . Cette incapacité à conditionner le comportement avec les données sur lesquelles il agit est la raison pour laquelle les développeurs échouent souvent (selon mon expérience) à le trouver.
De plus, comme vous l'avez déjà identifié, SomethingSomethingHelper est en réalité un nom terrible. Cela n'est pas descriptif et ne vous donne aucune idée précise du type d'opérations que fait la classe (ça aide?), Ce qui signifie également que ce n'est pas évident d'ajouter de nouveaux comportements, qu'ils appartiennent ou non à la classe Helper. Je diviserais ces classes en fonction de comportements connexes qui se grouperaient logiquement, puis je renommerais les nouvelles classes pour refléter ce qu'elles font.
la source
SomethingSomethingHelper
n'est pas le nom réel de la classe. Qu'il s'agisse d'une odeur de code ou non, cela dépend de la spécificité de la classe d'assistance, carMath
ces dernières ne sont pas du tout une odeur de code.SomethingSomethingHelper
. Bon sang, je regarde une classe nomméeHelperMethods
dans l'<company>.Helpers
espace de noms. Pour moi, uneHelper
classe est dans le même seau que*Manager
.Helper
, et je pense que c'est pour le différencier d'une classe du .NET Framework portant le même nom. Je considérerais*Helper
acceptable si*
était quelque chose de significatif.HelperMethods
est juste un manque d'imagination; il devrait au moins y avoir des compartiments conceptuels spécifiques.do..while
boucle en Python, que le langage ne prend pas en charge (voir le deuxième exemple ici ). Une autre serait une structure if / elif /.../ else, mais il faudrait répéter un cas en haut et en bas. Dans la mesure du possible, ils doivent cependant être localisés dans cette fonction et généralement pas appelés "aide".Un assistant est une classe ou une méthode supplémentaire inoffensive, dans la mesure où il complète un composant externe. Dans le cas contraire, cela indique une mauvaise conception, car le code a été exclu de son autorité, s'il en existe une.
Voici un exemple d'aide inoffensive. J'utilise une méthode appelée
FindRep
compte le nombre de zéros non significatifs.La méthode d'assistance est très simple, mais très peu pratique à copier-coller et le framework ne fournit aucune solution.
Et voici un exemple de mauvaise aide:
la source
Mon entreprise utilisait auparavant la méthodologie Classe de base / Classe d'assistance, chaque objet ayant deux classes. Vous auriez une classe Person contenant toutes les propriétés et définitions de la classe et une classe PersonHelper contenant toutes les méthodes, instructions SQL et logique qui manipulaient la classe Person. Cela a bien fonctionné pour nous car toutes nos applications utilisent des instructions SQL pour manipuler des données et il était très facile pour nous de rechercher et de modifier les instructions SQL selon les besoins.
Depuis, nous sommes passés à autre chose et mettons maintenant tout dans la classe Personne / Base. Nous avons cessé d'utiliser la convention de nommage Helper car nous voulions avoir moins de fichiers dans nos projets. En outre, la longueur de certains noms de classe devenait incontrôlable. lol.
Pas un bon exemple, mais vous avez l’idée.
Je ne dis pas que l'utilisation de la convention de nommage des assistants est la solution idéale, mais cela a fonctionné pour nous pendant quelques années.
la source