Wie viel Logik steckt normalerweise in der Hauptklasse? Sollte die Logik in der Hauptklasse minimal sein, nur andere spezialisierte Klassen instanziieren und alle Aufgaben von dort ausführen?
Wenn Sie Vorschläge zu diesem Thema (oder externen Artikeln) haben, würde ich es begrüßen.
Soll die Logik in der Hauptklasse minimal sein, nur andere spezialisierte Klassen instanziiert werden und alle Aufgaben von dort ausgeführt werden?
Ja. Die Methode main
und die sie umgebende Klasse sollten idealerweise nur als Einstiegspunkt zum Starten des Programms verwendet werden. Die bloße Existenz der umgebenden Klasse ist nur ein Artefakt der Art und Weise, wie Java-Programme zusammengesetzt sind ( alles muss innerhalb einer Klasse sein), und es gibt keinen Grund, warum es zusätzlich zu% co_de andere Dinge enthalten sollte % Methode (aber es gibt definitiv Gründe, warum sollte es nicht).
Wenn Sie die interessanten Klassen (diejenigen, die das eigentliche Programm bilden) getrennt bekommen, öffnen Sie Türen für alle Arten von Flexibilität. Vielleicht könnten einige dieser Klassen in einigen anderen Projekten verwendet werden. Vielleicht möchten Sie eines Tages einige von ihnen durch bessere Implementierungen ersetzen. Vielleicht finden Sie eine bessere Reihenfolge, um alle diese Klassen zu instanziieren - also tauschen Sie einfach ein paar Zeilen aus. Oder wie wäre es mit langwierigen Startup-Loadings und Instanziierungen in parallelen Threads? Wickeln Sie einige von ihnen zu geeigneten Executors. Viel Glück versuchen Sie dies mit einer 1000+ Hauptklasse.
Diese Art von Flexibilität ist für alles wichtig, außer vielleicht für elementare 100-Linien-Beispiele, Prototypen und dergleichen. Aber da selbst kleine Werkzeuge wachsen, warum nicht gleich von Anfang an richtig?
Für kleine Werkzeuge bin ich froh, dass ich die meiste oder die ganze Logik in der Hauptklasse habe - es gibt weniger ein Modell, mit dem man arbeiten kann. (Für sehr kleine Werkzeuge gebe ich zu, dass ich mich normalerweise nicht mit Komponententests beschäftige. Insbesondere ist der Design -Seitiger weniger von Vorteil als wenn man etwas baut, was ein Komponente in einer größeren App.)
Bei großen Apps ist die Hauptklasse wirklich nur daran beteiligt, Dinge einzurichten und in Bewegung zu bringen. Wenn Sie ein DI-Framework verwenden, das in der Tat sehr wenig Code sein kann; Wenn Sie keine Abhängigkeitsinjektion verwenden, fungiert die Hauptklasse oft als "manuelles" Abhängigkeitsinjektions-Framework.
Es ist nicht so sehr eine Frage, ob eine Klasse "die Hauptklasse" ist. Es ist eine Frage, wie viel Logik in der public static void main(String args[])
-Methode ist. Im Idealfall sollte es sehr wenig Logik enthalten. Es sollte im Wesentlichen ein oder zwei Objekte erstellen und dann Methoden für diese Objekte aufrufen. Eines dieser Objekte könnte ein this () sein - eine Instanz der Hauptklasse, und das ist in Ordnung.
Sie müssen die main () -Methode irgendwo platzieren - es gibt keine Notwendigkeit, eine spezielle Klasse zu erstellen, nur um diese Methode zu speichern.
Versuchen Sie generell, in statischen Methoden zu viel zu vermeiden - statische Methoden können nicht zum Testen verspottet werden.
Die Hauptklasse sollte ein Einstiegspunkt für Ihr Programm sein und sollte daher relativ klein sein. Dies hängt jedoch von Ihrem tatsächlichen Programm ab. Wenn es 50 Zeilen lang ist, könnte es zu viel Aufwand sein, zwei Dateien dafür zu erstellen.
Betrachten Sie als Beispiel die Standard-Desktopanwendung Swing Application Framework , wie sie von der NetBeans-Vorlage erzeugt werden würde, die einfach und kurz ist und deren main()
-Methode eine einzelne Zeile ist, die gestartet wird es:
Tags und Links java