2016-06-29 13 views
-2

Arbeiten an meinem ersten tatsächlichen nicht-akademischen Zusammenhang mit Java-Projekt, habe damit begonnen, ich langsam zu sehen und zu erkennen, dass meine Controller-Klasse (wo ich alle „hinter den Kulissen“ Arbeit Griff) ziemlich groß ..Wie man Controller-Methoden aufbricht?

gewachsen ist

Mir wurde gesagt und gelesen, dass es immer eine gute Übung ist, Klassen und Methoden in kleinere Klassen zu zerlegen. Wie würde ich die Trennung organisieren? Wie kann ich wissen, welche Teile der Klasse ich zerlegen und in eine andere Klasse legen sollte?

Zum Beispiel - das Projekt, an dem ich gerade arbeite, lädt eine Liste von Personen und ein Startdatum für jede Person und gibt dem Benutzer regelmäßig Erinnerungen, sobald jede Person einen bestimmten Tagesmeilenstein erreicht hat (z. 15 und 20 wird der Benutzer daran erinnert, dass Person X den Tag Y erreicht hat.

Mein Controller hat alle Arten von Methoden von Laden der Personen aus einer Datei in eine ArrayList, Erstellen von Berichtsinformationen für eine GUI, mathematische Berechnungen basierend auf Daten, Hinzufügen/Schreiben von Personen in die Datei, wenn nötig, und so weiter ..

Woher weiß man genau, "wie" ihre Klasse zerlegt werden soll?

Meine Vermutung: ähnliche Methoden in eine Klasse aufteilen? Zum Beispiel könnten die Methoden loadPeople() und loadMilestones() (die beide nur Textdateien aufnehmen und sie in ArrayLists ablegen) in eine LoadingManager-Klasse eingefügt werden. Aber in diesem Fall - wie würde ich auf diese Methoden von einer anderen Klasse zugreifen? Müsste ich sie nicht instanziieren und dann ihre Methoden aufrufen? Nach dem Erstellen von 5+ Klassen, würde ich mir vorstellen, das würde super langweilig werden.

Vielen Dank!

+0

Sorry Kumpel, aber diese Frage ist ** viel ** zu breit, um hier beantwortet zu werden. Ich empfehle Ihnen, Bücher wie "Agile Principles" und "Clean code" von Robert Martin zu lesen; und nehmen Sie eine andere Dimension: https://www.youtube.com/playlist?list=PLD0011D00849E1B79 ... im Allgemeinen: Sie beginnen mit einer ganz anderen Idee: Sie identifizieren die verschiedenen Verantwortlichkeiten in Ihrer Komponente; und jede Verantwortung wird zur eigenen Klasse. – GhostCat

+0

Wenn Sie also eine ganze Reihe von Klassen haben, müssten sie alle instanziiert werden, wenn Sie versuchen, auf ihre Methoden zuzugreifen? Nachdem Sie so viele Klassen erstellt haben - wäre es nicht mühsam, sie kontinuierlich zu instantiieren? Wo kann man Daten wie ArrayLists speichern? Sollten diese eine eigene Klasse haben? – Hazim

+0

Sicher. Und Sie werden zum Beispiel sehen, dass das zweite Video von meinem Link diesen Punkt anspricht. Und im Ernst: Lesen Sie diese Bücher. Dann übe. Setzen Sie Ihren Code zur Überprüfung auf; am besten mit menschlichen Kollegen; oder auf codereview.stackexchange.com ... wie gesagt: Dieser Ort ist nicht ideal für deine Frage. Im Allgemeinen: Ein ** komplexes ** Netzwerk einfacher Klassen ist immer besser als ein einfaches Netzwerk komplexer Klassen. Denn: Einfache Klassen können selbstständig getestet werden. Komplexe Klassen können nicht getestet werden. – GhostCat

Antwort

1

Es ist sehr schwer zu wissen, wie Sie Ihr Projekt anhand einer kurzen Beschreibung wie der von Ihnen angegebenen in verschiedene Klassen aufteilen können. Es klingt jedoch, als ob Sie auf dem richtigen Weg sind. Eine LoadingManager-Klasse klingt hier eine gute Idee.

Ja, Sie würden einen LoadingManager instanziieren und dann loadingMngrloadPeople() aufrufen, zum Beispiel wann immer Sie es brauchen. Das ist sauberer als der gesamte Code in einer großen Datei.