Je passais récemment en revue quelques classes statiques de "sac utilitaire" de style Helper flottant autour de grandes bases de code C # avec lesquelles je travaille, des choses comme l'extrait de code très condensé suivant:
// Helpers.cs
public static class Helpers
{
public static void DoSomething() {}
public static void DoSomethingElse() {}
}
Les méthodes spécifiques que j'ai examinées sont
- la plupart du temps sans rapport les uns avec les autres,
- sans état explicite persistait à travers les invocations,
- petit, et
- chacun consommé par une variété de types non liés.
Edit: Ce qui précède n'est pas destiné à être une liste de problèmes allégués. Il s'agit d'une liste des caractéristiques communes des méthodes spécifiques que j'examine. C'est le contexte pour aider les réponses à fournir des solutions plus pertinentes.
Juste pour cette question, je ferai référence à ce type de méthode comme un GLUM (méthode générale de l'utilitaire léger). La connotation négative de "morosité" est en partie voulue. Je suis désolé si cela apparaît comme un jeu de mots stupide.
Même en mettant de côté mon propre scepticisme par défaut à l'égard des GLUM, je n'aime pas les choses suivantes à ce sujet:
- Une classe statique est utilisée uniquement comme espace de noms.
- L'identifiant de classe statique n'a pratiquement aucun sens.
- Lorsqu'un nouveau GLUM est ajouté, soit (a) cette classe "bag" est touchée sans raison valable, soit (b) une nouvelle classe "bag" est créée (ce qui en soi n'est généralement pas un problème; ce qui est mauvais, c'est que le nouveau les classes statiques ne font que répéter le problème de l'absence de lien, mais avec moins de méthodes).
- La méta-nommage est inéluctablement terrible, non standard, et généralement dépourvue de cohérence interne, que ce soit
Helpers
,Utilities
ou autre chose.
Quel est un modèle raisonnablement bon et simple pour refactoriser cela, de préférence en répondant aux préoccupations ci-dessus, et de préférence avec un toucher aussi léger que possible?
Je devrais probablement insister sur le fait que toutes les méthodes auxquelles je fais face ne sont pas liées les unes aux autres. Il ne semble pas y avoir de moyen raisonnable de les décomposer en sacs de méthode de classe statique plus fins mais toujours multi-membres.