Ich habe kürzlich einige statische "Utility Bag" -Klassen im Helper-Stil überprüft, die in einigen großen C # -Codebasen schweben, mit denen ich arbeite. Grundsätzlich Dinge wie das folgende sehr komprimierte Snippet:
// Helpers.cs
public static class Helpers
{
public static void DoSomething() {}
public static void DoSomethingElse() {}
}
Die spezifischen Methoden, die ich überprüft habe, sind
- meist nicht miteinander verwandt,
- ohne expliziten Zustand über Aufrufe bestanden,
- klein und
- jeweils von einer Vielzahl von nicht verwandten Typen konsumiert.
Bearbeiten: Das oben Gesagte ist nicht als Liste angeblicher Probleme gedacht. Es ist eine Liste allgemeiner Merkmale der spezifischen Methoden, die ich überprüfe. Es ist ein Kontext, der Antworten hilft, relevantere Lösungen bereitzustellen.
Nur für diese Frage werde ich diese Art von Methode als GLUM (General Lightweight Utility Method) bezeichnen. Die negative Konnotation von "bedrückt" ist teilweise beabsichtigt. Es tut mir leid, wenn dies als dummes Wortspiel rüberkommt.
Selbst wenn ich meine Standard-Skepsis gegenüber GLUMs beiseite lasse, mag ich die folgenden Dinge nicht:
- Eine statische Klasse wird ausschließlich als Namespace verwendet.
- Die statische Klassenkennung ist grundsätzlich bedeutungslos.
- Wenn ein neues GLUM hinzugefügt wird, wird entweder (a) diese "Taschen" -Klasse ohne guten Grund berührt oder (b) eine neue "Taschen" -Klasse erstellt (was an sich normalerweise kein Problem darstellt; was schlecht ist, ist, dass die neue statische Klassen wiederholen oft nur das Problem der Nicht-Verwandtschaft, jedoch mit weniger Methoden.
- Die Meta-Namensgebung ist unentrinnbar schrecklich, Nicht-Standard, und in der Regel intern inkonsistent, wäre es
Helpers
,Utilities
oder was auch immer.
Was ist ein einigermaßen gutes und einfaches Muster, um dies umzugestalten, vorzugsweise die oben genannten Bedenken auszuräumen und vorzugsweise mit einer möglichst leichten Berührung?
Ich sollte wahrscheinlich betonen: Alle Methoden, mit denen ich zu tun habe, sind paarweise nicht miteinander verbunden. Es scheint keinen vernünftigen Weg zu geben, sie in feinkörnigere und dennoch mehrköpfige Methodenbeutel für statische Klassen zu zerlegen.