Ich habe eine private Validierungsmethode für eine bestimmte Validierung erstellt, die in meiner Klasse mehrmals durchgeführt wird (ich kann die validierten Daten aus verschiedenen Gründen nicht speichern). ReSharper schlägt nun vor, die Funktion statisch zu machen. Ich bin etwas zurückhaltend, da bekannte Probleme mit statischen Methoden bekannt sind. Es wäre eine private statische Methode. Meine Frage ist, können private statische Methoden ähnliche Kopplungs- und Testprobleme verursachen wie öffentliche statische Methoden? Ist es eine schlechte Praxis? Ich würde nicht raten, aber ich bin mir nicht sicher, ob es hier eine Falle gibt.
c#
static-methods
Tamás Szelei
quelle
quelle
Antworten:
Ich würde denken: "Muss ich das testen?"
Wenn Ihre Methode sowieso privat ist, was bedeutet, dass Sie die Logik in der Methode selbst nicht einem Komponententest unterziehen möchten, ist Ihre Klasse in Bezug auf Testbarkeit und Wartbarkeit in beiden Fällen eine Black Box. Das Innenleben Ihrer Klasse ist ihre Aufgabe und es ist allein. Das Refactoring wird ebenfalls nicht beeinflusst, was ebenfalls zu berücksichtigen ist.
Also meiner Meinung nach: Nein, eine "private" Methode "privat statisch" zu machen, hat keinerlei langfristige Auswirkungen.
quelle
Private statische Methoden sind aus meiner Sicht am einfachsten.
DataIn -> Methode -> DataOut
Es gibt keine Abhängigkeiten von externen Objekten, keine Nebenwirkungen. Warum hältst du sie für schlecht?
quelle
Das Testen von Klassen, die öffentliche statische Methoden verwenden, kann schwierig sein, da es (besonders) nicht einfach ist, die statischen Methoden zu stub / fälschen / verspotten. Instanzmethoden hingegen können leicht verspottet werden, insbesondere wenn sie virtuell sind oder eine Schnittstelle erfüllen.
Ich sehe jedoch keinen Grund, keine privaten statischen Methoden zu verwenden. In der Tat gibt es einen leichten Leistungsvorteil, da Sie keine Instanz der Klasse benötigen, um Speicher zu belegen.
Auf der anderen Seite ist alles, was statisch ist, ein bisschen nach Code. Ist das eigentlich eine "Helferklasse"? Könnte es sein, dass sich die Methode sinnvoller in einer der als Parameter übergebenen Klassen befindet? Die Antwort auf diese Fragen lautet oft "es ist in Ordnung als Statik", aber es lohnt sich, sich daran zu erinnern.
quelle
static
Schlüsselwort scheint unbegründet.