Ich habe kürzlich bemerkt, dass, wenn ich private Methoden erstelle, die ein paar Felder in den Objekten setzen, die an sie übergeben werden, dass Resharper einen Hinweis anzeigt, dass die Methode statisch gemacht werden kann.
Hier ist ein stark vereinfachtes Beispiel für die Art der Methode, die ich haben könnte.
%Vor%Wenn ich eine Methode wie diese habe, gibt Resharper eine Empfehlung, dass die Methode statisch gemacht werden kann.
Ich versuche zu vermeiden, dass öffentliche Methoden statisch werden, da sie bei Komponententests verheerende Schäden verursachen ... aber ich bin mir nicht sicher, ob das auch für private Methoden gilt.
Ist Resharpers Empfehlung eine gültige Best Practice oder sollte ich sie einfach abschalten?
Auf die Gefahr hin, wie ein Contrarian zu klingen, muss ich zugeben, dass ich statische Methoden nicht gerne mit Instanzmethoden vermische; und ich mag statische Methoden im Allgemeinen nicht. Statische Methoden sind schwer zu testen, schwer zu überschreiben und schwer zu warten. Ich bevorzuge es, alle statischen Methoden für den Umgang mit Foo-Objekten in einer einzigen FooUtils-Klasse zu verankern - oder noch besser in einer Singleton-Instanz einer FooSomethingDoer-Klasse.
Natürlich machen statische Methoden in einigen Fällen durchaus Sinn - zum Beispiel, wenn ich die oben erwähnten Singletons oder Fabriken usw. erstelle. Ich sage nicht, dass alle statischen Methoden aus reinem Bösen bestehen; Ich bevorzuge es, auf der Seite zu bleiben, wenn es möglich ist, sie zu meiden.
Ich denke schon; zu sehen, dass eine Methode statisch ist, ist ein klarer Hinweis darauf, dass die Methode nicht mit Instanzmitgliedern interagieren soll.
Stellen Sie sich vor, Sie würden eine nicht-statische Methode debuggen und realisieren, dass die Instanz nicht berührt wird. Sofortiger Geruch, und wenn es keinen Kommentar gibt, der erklärt, was die Funktion tut, könnten Sie vom wirklichen Problem abgelenkt werden.
Ich gehe normalerweise mit der Empfehlung von R #. Es ist eine private Methode, also schreiben Sie (hoffentlich) keine Komponententests dagegen. Wenn Sie es statisch machen, wird explizit angegeben, dass es keine Instanzenmitglieder verwendet, was die Überprüfung auf Nebenwirkungen erleichtert.