Ich habe kürzlich ein Refactoring eines mittelgroßen Projekts in Java durchgeführt, um zurück zu gehen und Unit-Tests hinzuzufügen. Als ich merkte, was für ein Schmerz es war, Singletons und Statik zu verspotten, "bekam" ich endlich, was ich die ganze Zeit über sie gelesen hatte. (Ich bin einer von denen, die aus Erfahrung lernen müssen. Na ja.)
Jetzt, da ich Spring verwende, um die Objekte zu erstellen und zu verkabeln, werden die static
Schlüsselwörter links und rechts entfernt. (Wenn ich mich möglicherweise darüber lustig machen könnte, ist es nicht wirklich statisch in dem Sinne, wie es Math.abs () ist, oder?) Die Sache ist, ich hatte mir angewöhnt, damit static
zu bezeichnen, dass sich eine Methode nicht darauf stützte auf jeden Objektzustand. Beispielsweise:
//Before
import com.thirdparty.ThirdPartyLibrary.Thingy;
public class ThirdPartyLibraryWrapper {
public static Thingy newThingy(InputType input) {
new Thingy.Builder().withInput(input).alwaysFrobnicate().build();
}
}
//called as...
ThirdPartyLibraryWrapper.newThingy(input);
//After
public class ThirdPartyFactory {
public Thingy newThingy(InputType input) {
new Thingy.Builder().withInput(input).alwaysFrobnicate().build();
}
}
//called as...
thirdPartyFactoryInstance.newThingy(input);
Also, hier wird es empfindlich. Ich mochte den alten Weg, weil mir der Großbuchstabe sagte, dass ThirdPartyLibraryWrapper.newThingy (x) genau wie Math.sin (x) jedes Mal das Gleiche tat. Es gibt keinen Objektstatus, um zu ändern, wie das Objekt das tut, was ich von ihm verlange. Hier sind einige mögliche Antworten, die ich in Betracht ziehe.
- Niemand sonst fühlt sich so, also stimmt etwas nicht mit mir. Vielleicht habe ich die OO-Art, Dinge zu tun, einfach nicht wirklich verinnerlicht! Vielleicht schreibe ich in Java, denke aber in FORTRAN oder so. (Was beeindruckend wäre, da ich FORTRAN noch nie geschrieben habe.)
- Vielleicht verwende ich Statik als eine Art Proxy für Unveränderlichkeit, um über Code nachzudenken. Abgesehen davon, welche Hinweise sollte ich in meinem Code haben, damit jemand mitkommt, um zu wissen, was zustandsbehaftet ist und was nicht?
- Vielleicht sollte dies nur kostenlos sein, wenn ich gute Objektmetaphern wähle? zB
thingyWrapper
hört sich nicht so an, als hätte es einen Zustand unabhängig von der Verpackung, derThingy
selbst veränderlich sein kann. EbensothingyFactory
sollte ein Sound unveränderlich sein, könnte aber unterschiedliche Strategien haben, die bei der Erstellung ausgewählt werden.