Recentemente ho esaminato alcune classi statiche di "utility bag" in stile Helper che fluttuavano intorno a code code C # di grandi dimensioni con cui lavoro, cose che sostanzialmente somigliano al seguente frammento molto condensato:
// Helpers.cs
public static class Helpers
{
public static void DoSomething() {}
public static void DoSomethingElse() {}
}
I metodi specifici che ho recensito sono
- per lo più non correlati tra loro,
- senza stato esplicito persistente attraverso invocazioni
- piccolo e
- ciascuno consumato da una varietà di tipi non correlati.
Modifica: quanto sopra non intende essere un elenco di presunti problemi. È una lista di caratteristiche comuni dei metodi specifici che sto esaminando. È il contesto in cui le risposte aiutano 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" è in parte intesa. Mi dispiace se mi viene in mente un gioco stupido.
Anche mettendo da parte il mio scetticismo di default su GLUM, non mi piacciono le seguenti cose a riguardo:
- Una classe statica viene utilizzata esclusivamente come spazio dei nomi.
- L'identificatore di classe statico non ha praticamente alcun significato.
- Quando viene aggiunto un nuovo GLUM, o (a) questa classe "bag" viene toccata senza una buona ragione o (b) viene creata una nuova classe "bag" (che di per sé non è di solito un problema; che le nuove classi statiche spesso ripetono semplicemente il problema di non correlazione, ma con meno metodi).
- La metamorfosi è ineluttabilmente orribile, non standard e solitamente internamente incoerente, sia che si tratti di
Helpers
,Utilities
, o qualsiasi altra cosa.
Che cosa è ragionevolmente buono e amp; schema semplice per refactoring questo, preferibilmente affrontando le preoccupazioni di cui sopra, e preferibilmente con un tocco il più leggero possibile?
Probabilmente dovrei enfatizzare: Tutti i metodi con cui ho a che fare sono a coppie non correlati tra loro. Non sembra esserci un modo ragionevole per scomporli in grani più fini ma ancora metodo-borse di classe statica multi-membro.