2010-08-20 3 views
9

Sie können diesen ersten Teil einfach überspringen, weil es verwirrend wird, aber ich behalte es hier, weil ich wissen möchte, ob jemand anders auf die gleiche Weise fühlt. Ich bin ein CS-Student, der Java seit 3 ​​Jahren benutzt, und ich finde es immer noch schwierig zu verstehen, wie man die Main-Funktion in mein Design einbezieht. Es fühlt sich falsch an, es alleine in eine Klasse zu stellen, aber es fühlt sich auch falsch an, es in eine andere Klassendatei einzufügen. Ich sehe das letztere als solches, weil es nicht zum Rest der Klasse passt und es inkohäsiv macht. Ich kann beispielsweise nicht einfach eine Hauptfunktion auf meinem DocumentReader-Objekt festhalten. Es hätte nichts mit dem Objekt zu tun. Auf der anderen Seite kann ich nicht einfach eine Hauptklasse erstellen, die nur eine Hauptfunktion in sich hat, denn in der objektorientierten Programmierung sollten Sie in Begriffen von Objekten denken, die effektiv eine Miniaturwelt in Ihrem Kopf kreieren. Es scheint, als würde sich die Miniaturwelt um ein einzelnes Objekt drehen, das nur existiert. Es agiert nicht als Erzähler und Charakter in einer Geschichte, weil es gleichzeitig nichts tut. Ich bevorzuge den C-Stil, eine Main-Funktion zu haben, die von allem getrennt ist. Es hält die Erzählung der Geschichte getrennt von den Charakteren, die miteinander interagieren.Wie integrieren Sie Javas Hauptfunktion in Ihr Design?

Ich möchte wissen, wie die Profis die Hauptmethode in den Rest ihres Codes mischen. Wie passt es in den Rest des Designs? Sind sie generell lang oder kurz?

+0

Ich möchte meine Hauptmethode so kurz wie möglich halten und komplexe Objektkonstruktionen in Fabriken durchführen. – helpermethod

Antwort

5

Ich behalte die main() Funktion in einer Klasse namens mein Projekt. Damit wenn Sie die Anwendung mit der Kommandozeile starten geben Sie:

java com.domain.project.ApplicationName 

Es scheint mir Logik einen einfachen Launcher Namen zu haben, anstatt:

java com.domain.project.AClassWhichDoesntLookLikeAMainClass 

oder die (auch) klassische

java com.domain.project.Launcher 

Aber stören Sie nicht zu viel für diese Klasse, es wird wahrscheinlich nie vom Endbenutzer so ausgeführt werden. Ein Skript oder eine andere ausführbare Datei startet die meiste Zeit.

Eine andere Sache, Ihre Main() -Methode kann schwer werden, vor allem, wenn Sie Hauptargumente wirklich für mehr CLI-Optionen verwenden. Vielleicht verdient es eine eigene Klasse.

+1

99% der Zeit Projektname = Anwendungsname – TheLQ

+0

Ja, aber für die 1% sake eine explizite sagen "project.ApplicationName", auch wenn es redundant ist, wenn Projektname = Anwendungsname. –

4

Nun, ich mag manchmal eine *Application Klasse erstellen und es dort platzieren. Für den DocumentReader hätte ich eine DocumentReaderApplication, in die ich die Hauptfunktion setzen würde, und könnte auch alle Startoptionen/Befehlszeilenargumente verarbeiten. Wenn es sich um eine GUI-App handelt, startet die Klasse *Application das Hauptfenster. Schließlich muss der Einstiegspunkt des Programms irgendwo liegen, oder?

4

Eine Klasse mit einer Hauptmethode fungiert als Einstiegspunkt. Es ist also eine gute Idee, alles in diese Klasse zu legen, die spezifisch für ist, die Einstiegspunkt ist. Delegieren Sie den Rest.

0

Ich lasse es in einer Program Klasse, wo es ganz allein sein wird. Normalerweise startet Kick nur mein Hauptfenster und wird beendet, wenn das Fenster geschlossen wird.

2

Die Hauptmethode wird nur verwendet, wenn Sie selbst eine eigenständige Anwendung starten. Die Welt bewegt sich davon weg für große Anwendungen, einfach weil sie so groß werden, dass sie modularisiert werden müssen.

Bekannte Ansätze sind WAR/EARs für Java EE und OSGi-Bundles.

3

Hardcore OOP Leute mögen das vielleicht nicht, aber ich habe nur eine Klasse namens Main in meinem Root-Projekt-Paket, das die Hauptmethode enthält.

Mein Gedanke ist, dass Ihr Programm irgendwo anfangen muss, aber es in eine andere Klasse zu bringen ist nur verwirrend. Ich behandle Main() als einen speziellen Fall, der eine eigene Klasse verdient. Ich habe nichts anderes als Setup-Informationen in dieser Klasse. Dies macht deutlich, dass dies der Ausgangspunkt (und manchmal auch der Endpunkt) meines gesamten Programms ist.

+0

Das mache ich auch. –

2

Ich arbeite in Java Web-Entwicklung, und seit Jahren.

Ich habe nie einmal professionell die Worte "öffentliche statische void main" eingegeben.

Zwischen Ant-Tasks, die Komponententests auslösen, und anderen lokalen Tasks, die ein WAR-Archiv auf einem Server bereitstellen, fällt die Hauptmethode nicht in den Bereich der Web-Arbeit.

0

Behalten Sie den Mindestcode in der Methode main(). Verwenden Sie Delegierung, um Ihr Problem im Falle eines Fehlers zu lokalisieren. Wenn Sie Geschäftslogik oder sogar Ihren UI-Code in Ihre Main-Klasse oder main() -Methode einfügen, neigt sie dazu, zu wachsen. Dies gilt sowohl für den objektorientierten Ansatz als auch für die prozedurale Programmierung.

0

Ich schließe eine Hauptmethode in jeder anderen Klasse ein, die ein einigermaßen eigenständiges Verhalten haben könnte, und sei es nur für einfache Testzwecke.