Si un “Utilitaires” la classe est le mal, où dois-je mettre mon code générique?
En général, je vis par la règle que les variables Globales /fonctions sont mauvais et que chaque morceau de code doit vivre dans la classe à laquelle elle appartient.
C'est très facile, la règle à suivre, et je crois que je n'ai jamais couru dans un problème avec cette règle jusqu'à présent.
Aujourd'hui, cependant, j'ai besoin d'ajouter une fonction à mon assemblée plutôt qu'à une classe spécifique. C'est, presque toutes mes classes pourrait l'usage de cette fonction particulière.
Où dois-je mettre cette fonction (+1 surcharge)?
Si je l'ai mis dans un "Utilitaires" de la classe, je me sens sale. Si je le cloue à un semi-classe, et laisser les autres classes de l'appeler directement, je me sens pire.
De ce morceau de code, fondamentalement, les côtelettes d'une IList<PointF>
dans une liste normalisée. Je ressens à cet instant que l'ajout d'une méthode d'extension sur IList<PointF>
peut être le meilleur pari...
- Je suis d'accord, les variables globales sont le mal. Ils semblent avoir leur propre système de pensée consacré à la détérioration de votre code.
- L'état Global est problématique, mais les fonctions globales sont juste qu'une logique réutilisable, avec trop peu d'entrées/sorties pour être la peine d'encapsulation dans une classe. Je ne vois pas de problème avec accompagnateur ou l'Utilité des méthodes regroupées en bien nommé accompagnateur ou l'Utilitaire de classes statiques.
- Je préfère à l'aide de "Tirer vers le Haut la Méthode" à la place de l'Utilité/classe d'assistance - Tirez la Méthode
Vous devez vous connecter pour publier un commentaire.
Si c'est une opération sur un
IList<PointF>
, alors il devrait être une extension de la méthode surIList<PointF>
.Généralement,
Utils
etHelper
type de classes doivent être évités. Le plus souvent, vous trouverez que ce que vous pouvez pense est une méthode utilitaire, est en fait plutôt une méthode spécifique qui appartient probablement dans une classe de son propre (comme vous dites). Cependant, il y aura de domaine spécifique des cas oùUtil
-comme des classes qui concernent le groupe de méthodes utiles) sont valables entités.points.NormalizeIntoSegments(50)
, à la place de mon préféréUtilities.Segment(points, 50)
.Utilities.Segment(points, 50)
est très bien, quel est le problème avecpoints.Segment(50)
?.
de l'opérateur. La manière dont vous utilisez les méthodes de vulgarisation et statique de l'utilitaire de méthodes de conception de logiciels est exactement le même. Je trouve cela déroutant que cette réponse semble sous-entendre qu'il y a une différence.Il n'y a rien de mal avec "mondial" des variables et des méthodes. Vous utilisez tout le temps. Le cadre aime à les appeler "statique" des classes ou "statique" des méthodes.
J'ai rarement besoin de le faire, mais j'ai l'habitude d'ajouter un interne statique de la classe Util dans l'espace de noms que la méthode ou variable est nécessaire pour C# et d'un module pour VB.NET.
Des échantillons de .NET Framework
System.Collections.Specialized.CollectionsUtil
System.Net.WebUtility
Utils
classe n'importe où.Vous devriez le mettre dans un "ListUtilities" ou
PointListUtilities
classe, bien sûr. Vous n'êtes pas rompre le principe de responsabilité unique, qui est le principal problème avec un fourre-tout de "Utilitaires" de la classe.