Vielleicht ein bisschen frech, aber da ich diese Antwort nirgendwo über Google finde, kann ich sicherstellen, dass Software Engineering die Antwort hat:
Was ist ein Helfer?
Ich habe gesehen, dass der Name überall verwendet wird (Modulnamen, Klassennamen, Methodennamen), als ob die Semantik tiefgründig und aussagekräftig wäre, aber im Kontext der Informatik (obwohl ich keinen Abschluss darin habe). ' Ich habe noch nie eine Beschreibung oder Definition gesehen!
Ist es ein Designmuster? Ist es ein Algorithmus? Ich habe einmal an einem Programm gearbeitet, in dem das Modul und die Klasse beide " SomethingsomethingHelper" genannt wurden (wobei etwas auch ziemlich allgemein war), und ich habe es umgehend in etwas umbenannt, das für mich sinnvoll war, aber ich habe das Gefühl, dass mir hier etwas fehlt!
quelle
Antworten:
Eine Helper-Klasse ist ein weniger bekannter Codegeruch, bei dem ein Codierer verschiedene, häufig verwendete Vorgänge identifiziert und versucht hat, sie durch Zusammenfassen in einer unnatürlichen Gruppierung wiederverwendbar zu machen. Nachfolgende Entwickler sind dann in das Projekt eingetreten und haben nicht bemerkt, dass die Hilfsklasse vorhanden ist, und haben folglich dieselben allgemeinen Operationen umgeschrieben oder sogar mehrere Hilfsklassen erstellt.
Im Ernst, das Hauptproblem bei Helper-Klassen ist, dass es sich in der Regel um Operationen handelt, die auf eine bestimmte Klasse angewendet werden, was in OO-Begriffen offensichtlich bedeutet, dass sie an einem akuten Fall von Feature Envy leiden . Dieses Versagen, das Verhalten mit den Daten, auf die es sich bezieht, zu packen, ist der Grund, warum Entwickler es (meiner Erfahrung nach) so oft nicht finden.
Darüber hinaus ist SomethingSomethingHelper, wie Sie bereits identifiziert haben, ein schrecklicher Name. Es ist nicht aussagekräftig und gibt Ihnen keine wirkliche Ahnung, welche Art von Operationen die Klasse ausführt (es hilft?), Was auch bedeutet, dass es beim Hinzufügen neuer Verhalten nicht offensichtlich ist, ob sie zur Helper-Klasse gehören oder nicht. Ich würde solche Klassen nach dem Muster des verwandten Verhaltens aufteilen, das sich logisch gruppiert, und dann die neuen Klassen umbenennen, um zu reflektieren, was sie tun.
quelle
SomethingSomethingHelper
nicht der tatsächliche Name der Klasse ist. Ob es sich um einen Codegeruch handelt oder nicht, hängt davon ab, wie spezifisch die Helferklasse ist, da Helferklassen wieMath
überhaupt kein Codegeruch sind.SomethingSomethingHelper
. Verdammt, ich schaue mir gerade eine Klasse an, dieHelperMethods
im<company>.Helpers
Namensraum heißt. Für mich befindet sich eineHelper
Klasse im selben Eimer wie*Manager
.Helper
, und ich denke, dies dient dazu, eine Klasse in .NET Framework mit demselben Namen zu trennen. Ich würde*Helper
akzeptieren, wenn*
etwas Sinnvolles wäre.HelperMethods
ist nur ein Versagen der Vorstellungskraft; es sollte zumindest bestimmte konzeptionelle Eimer geben.do..while
in Python eine Schleife benötigen , die die Sprache nicht unterstützt (siehe das zweite Beispiel hier ). Eine andere wäre eine if / elif /.../ else-Struktur, aber Sie müssen einen Fall oben und unten wiederholen. Wenn möglich, sollten sie für diese Funktion lokal gemacht werden und im Allgemeinen nicht als "Helfer" bezeichnet werden.Ein Helfer ist eine harmlose zusätzliche Klasse oder Methode, solange er eine externe Komponente ergänzt. Wenn das Gegenteil der Fall ist, weist dies auf ein fehlerhaftes Design hin, da der Code von seiner Berechtigung ausgeschlossen wurde, sofern überhaupt eine Berechtigung vorliegt.
Hier ist ein Beispiel für einen harmlosen Helfer. Ich verwende eine Methode
FindRep
, die die Anzahl der führenden Nullen zählt.Die Hilfsmethode ist sehr einfach, aber sehr unpraktisch beim Kopieren und Einfügen, und das Framework bietet keine Lösung.
Und hier ist ein Beispiel für einen schlechten Helfer:
quelle
Meine Firma verwendete früher die Methode der Basisklasse / Hilfsklasse, bei der jedes Objekt über zwei Klassen verfügte. Sie hätten eine Person-Klasse, die alle Klasseneigenschaften und -definitionen enthält, und eine PersonHelper-Klasse, die alle Methoden, SQL-Anweisungen und Logik enthält, die die Person-Klasse manipuliert haben. Dies hat sich für uns bewährt, da alle unsere Anwendungen SQL-Anweisungen zum Manipulieren von Daten verwenden und es für uns sehr einfach war, die SQL-Anweisungen nach Bedarf zu finden und zu ändern.
Wir sind seitdem weitergezogen und haben jetzt alles in die Klasse Person / Basis eingeordnet. Wir haben die Verwendung der Namenskonvention Helper beendet, weil wir weniger Dateien in unseren Projekten haben wollten. Auch die Länge einiger Klassennamen geriet außer Kontrolle. lol.
Kein gutes Beispiel, aber Sie bekommen die Idee.
Ich sage nicht, dass die Verwendung der Helfer-Namenskonvention die perfekte Lösung ist, aber sie hat für einige Jahre bei uns funktioniert.
quelle