Niedawno przeglądałem kilka klas statycznych typu „torba narzędziowa” pomocnika unoszących się wokół dużych baz kodu C #, z którymi pracuję, w zasadzie takie jak ten bardzo skondensowany fragment kodu:
// Helpers.cs
public static class Helpers
{
public static void DoSomething() {}
public static void DoSomethingElse() {}
}
Konkretne metody, które sprawdziłem, to
- w większości niezwiązane ze sobą,
- bez wyraźnego stanu utrzymywanego między wywołaniami,
- mały i
- każdy z nich jest konsumowany przez różne niepowiązane typy.
Edycja: Powyższe nie ma stanowić listy domniemanych problemów. To lista wspólnych cech konkretnych metod, które recenzuję. Jest kontekstem, aby pomóc w udzieleniu odpowiedzi na bardziej trafne rozwiązania.
Tylko na to pytanie będę się odnosił do tego rodzaju metody jako GLUM (ogólna metoda lekkiej użyteczności). Negatywne znaczenie słowa „ponury” jest częściowo zamierzone. Przepraszam, jeśli okaże się to głupim żartem.
Nawet odkładając na bok mój własny domyślny sceptycyzm wobec GLUM, nie podoba mi się następujące rzeczy:
- Klasa statyczna jest używana wyłącznie jako przestrzeń nazw.
- Identyfikator klasy statycznej jest w zasadzie bez znaczenia.
- Kiedy dodaje się nowy GLUM, albo (a) ta klasa „torby” zostaje dotknięta bez powodu lub (b) tworzona jest nowa klasa „torby” (co samo w sobie nie jest zwykle problemem; szkoda, że nowa klasy statyczne często powtarzają problem niezwiązania, ale przy użyciu mniejszej liczby metod).
- Meta-nazewnictwa jest nieunikniony okropne, niestandardowe, a zwykle wewnętrznie niespójne, czy to
Helpers,Utilitiesczy cokolwiek.
Jaki jest dość dobry i prosty wzorzec do refaktoryzacji tego, najlepiej w odpowiedzi na powyższe obawy, a najlepiej z jak najmniejszym naciskiem?
Powinienem chyba podkreślić: wszystkie metody, z którymi mam do czynienia, nie są ze sobą powiązane. Wydaje się, że nie ma rozsądnego sposobu na rozbicie ich na drobnoziarniste, ale wciąż wieloczłonowe torby metodyczne klasy statycznej.
