Recentemente stavo rivedendo alcune classi statiche "utility bag" in stile Helper che fluttuavano attorno ad alcune grandi basi di codice C # con cui lavoro, cose fondamentalmente come il seguente frammento molto condensato:
// Helpers.cs
public static class Helpers
{
public static void DoSomething() {}
public static void DoSomethingElse() {}
}
I metodi specifici che ho esaminato sono
- per lo più estranei l'uno all'altro,
- senza stato esplicito persistito tra le invocazioni,
- piccolo e
- ciascuno consumato da una varietà di tipi non correlati.
Modifica: quanto sopra non intende essere un elenco di presunti problemi. È un elenco di caratteristiche comuni dei metodi specifici che sto esaminando. È contesto per aiutare le risposte a fornire soluzioni più pertinenti.
Proprio per questa domanda, mi riferirò a questo tipo di metodo come GLUM (metodo generale di utilità leggero). La connotazione negativa di "glum" è parzialmente intesa. Mi dispiace se questo si presenta come un gioco di parole stupido.
Anche mettendo da parte il mio scetticismo predefinito sui GLUM, non mi piacciono le seguenti cose:
- Una classe statica viene utilizzata esclusivamente come spazio dei nomi.
- L'identificatore di classe statica è sostanzialmente insignificante.
- Quando viene aggiunto un nuovo GLUM, (a) questa classe "bag" viene toccata senza motivo o (b) viene creata una nuova classe "bag" (che di solito non è un problema; ciò che è negativo è che il nuovo le classi statiche spesso ripetono semplicemente il problema di non correlazione, ma con meno metodi).
- La meta-denominazione è inevitabilmente terribile, non standard, e di solito internamente incoerente, che si tratti di
Helpers
,Utilities
o qualsiasi altra cosa.
Qual è un modello ragionevolmente buono e semplice per refactoring questo, preferibilmente affrontando le preoccupazioni di cui sopra e preferibilmente con un tocco il più leggero possibile?
Dovrei probabilmente enfatizzare: tutti i metodi con cui ho a che fare sono accoppiati l'uno con l'altro. Non sembra esserci un modo ragionevole per scomporli in borse di metodi di classe statica a grana fine ma ancora multi-membro.