Recientemente estuve revisando algunas clases estáticas de "bolsa de utilidad" estilo Helper que flotan alrededor de algunas grandes bases de código C # con las que trabajo, básicamente cosas como el siguiente fragmento muy condensado:
// Helpers.cs
public static class Helpers
{
public static void DoSomething() {}
public static void DoSomethingElse() {}
}
Los métodos específicos que he revisado son
- en su mayoría no relacionados entre sí,
- sin estado explícito persistió a través de invocaciones,
- pequeño y
- cada uno consumido por una variedad de tipos no relacionados.
Editar: lo anterior no pretende ser una lista de supuestos problemas. Es una lista de características comunes de los métodos específicos que estoy revisando. Es un contexto para ayudar a las respuestas a proporcionar soluciones más relevantes.
Solo por esta pregunta, me referiré a este tipo de método como GLUM (método de utilidad general ligero). La connotación negativa de "tristeza" es en parte intencionada. Lo siento si esto aparece como un juego de palabras tonto.
Incluso dejando de lado mi propio escepticismo predeterminado sobre GLUM, no me gustan las siguientes cosas sobre esto:
- Una clase estática se está utilizando únicamente como un espacio de nombres.
- El identificador de clase estática es básicamente sin sentido.
- Cuando se agrega un nuevo GLUM, (a) esta clase de "bolsa" se toca sin razón alguna o (b) se crea una nueva clase de "bolsa" (que en sí misma no suele ser un problema; lo malo es que la nueva las clases estáticas a menudo solo repiten el problema de la falta de relación, pero con menos métodos).
- El meta-denominación es ineludiblemente horrible, no estándar, y por lo general carece de coherencia interna, ya sea
Helpers,Utilitieso lo que sea.
¿Cuál es un patrón razonablemente bueno y simple para refactorizar esto, preferiblemente abordando las preocupaciones anteriores y preferiblemente con un toque lo más ligero posible?
Probablemente debería enfatizar: todos los métodos con los que estoy tratando no están relacionados por pares entre sí. No parece haber una forma razonable de dividirlos en bolsas de métodos de clase estática de grano fino pero aún con múltiples miembros.
