66 votes

Si une classe "Utilitaires" est diabolique, où dois-je placer 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 pourraient avoir une utilisation 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.

Ce morceau de code, fondamentalement, les côtelettes d'un 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...

30voto

Håvard S Points 11152

Si c'est une opération sur un IList<PointF>, alors il devrait être une extension de la méthode sur IList<PointF>.

Généralement, Utils et Helper type de classes doivent être évités. Le plus souvent, vous trouverez que ce que vous pouvez penser 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ù l' Util-comme des classes qui concernent le groupe de méthodes utiles) sont valables entités.

12voto

AMissico Points 12837

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
  • Vérifiez Microsoft du code source .NET Framework. Vous trouverez de nombreuses classes utilitaires.

4voto

Ben Voigt Points 151460

Vous devriez le placer dans une classe 'ListUtilities' ou PointListUtilities , bien sûr. Ensuite, vous ne violez pas le principe de responsabilité unique, qui constitue le principal problème de la classe fourre-tout 'Utilitaires'.

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