Anfangsschwierigkeiten

pinsleepe

Mitglied
Hallo,
ich habe einige Anfangsschwierigkeiten mit der OO-Programmierung.
Mein Programm ist nämlich viel zu groß und unübersichtlich geworden und ich weiß nicht, wie ich es am sinnvollsten aufsplitten könnte. :confused:

Kurze Beschreibung der Funktionalität
1.) es ist ein Kommandozeilenprogramm
2.) es kann mit Parametern aufgerufen werden,
wenn nicht, wird ein Dialog mit dem Nutzer geführt um die notwendigen Parameter aufzusammeln; danach erfolgt eine DB-Verbindung
3.) nachdem man mit einem Server verbunden ist, werden unterschiedliche Funktionen angeboten, z.B. Ausschreiben einer Schemadatei, Sichern der DB u.Ä.

Das ganze ist gegen eine Schnittstelle geschrieben und funktioniert zwar aber es ist sehr durcheinader. Wie kann ich da eine Struktur einbringen Gibt es Muster, die dem 2/3 Punkt entsprechen würden?

Meine Idee läuft auf Folgendes:
2.) Hier möchte ich für jeden Parameter eine Klasse (?) haben, die so funktioniert, dass erstmal geschaut wird ob der konkrete Parameter gesetzt ist und wenn nicht - ein Dialog geführt wird. Wie könnte ich das einigermaßen generisch halten? D.h. wie kann ich zur Laufzeit entscheiden welche Klasse genommen wird? Lässt sich das alles von einer Klasse aus steuern?
3.) Wie kann man solche Fallunterscheidung sinnvoll schreiben, dass man sowas in der Art hat
1 - Schema schreiben
2 - DB sichern
3 - usw.
wo je nachdem welche Option gewählt wird eine entsprechende Klasse ihr Ding tut?

Ich hoffe, ich habe mich einigermaßen klar ausgedruckt und jemand kann mir bisschen auf die Sprünge helfen.

Gruß :)
 
Hallo,

mit Sinnvoll aufteilen meinst du eine Aufteilung in verschiedene Klassen?

Du solltest dich immer fragen, welche Aufgabengebiete habe ich in meinem Programm, und wie kann ich die in logische Einheiten gruppieren (je nach Umfang des Projekts mach ich schon mal CRC Karten). Daraus ergibt sich oft schon ein brauchbares erstes Klassendiagramm.

Zu 2) Ich weiß ja nicht, was du mich deinen Parametern noch alles anstellen musst. Aber wenn du den Wert nur einfach nur zum Login o.Ä. benutzen willst, ist das mit einer Klasse pro Parameter absoluter overkill. Du kannst imo einfach eine Konfigurationsklasse schreiben, die deine Parameter speichert und bescheid gibt, wenn nicht alle benötigten Params gesetzt sind.

Zu 3) Klingt für mich wie ein schönes Anwendungsgebiet für ein Strategy Pattern.

Grüße
Daniel
 
Laocoon, danke für deine Antwort! :)

Mit einer sinnvollen Aufteilung meinte ich genau das Verlagern der Funktionalitäten in mehrere Klassen... Vllt ist es aber gar nicht sinnvoll :confused:

2.) Je nachdem welcher Vendor(sybase, oracle usw.) gewählt wird, werden bestimmte Parameter benötigt. Wenn man sie beim Aufruf des Programms nicht gesetzt hat, erfolgt eine Interaktion. Die Parameter benötigt man in der Tat nur zur Verbindung mit einem DBServer, wobei Host/Port/ggf. Installationsfolder auch auf gleiche Weise parametrisierbar sind. Der Vorschlag mit einer Konfigurationsklasse hört sich sehr gut an. Wo könnte ich mir sowas Ähnliches anschauen?

3.) Ich werde mir das Muster unter die Lupe nehmen. Danke!
 
2.) Je nachdem welcher Vendor(sybase, oracle usw.) gewählt wird, werden bestimmte Parameter benötigt. Wenn man sie beim Aufruf des Programms nicht gesetzt hat, erfolgt eine Interaktion. Die Parameter benötigt man in der Tat nur zur Verbindung mit einem DBServer, wobei Host/Port/ggf. Installationsfolder auch auf gleiche Weise parametrisierbar sind. Der Vorschlag mit einer Konfigurationsklasse hört sich sehr gut an. Wo könnte ich mir sowas Ähnliches anschauen?
Seit wann benötigen denn unterschiedliche Vendor unterschiedliche angaben? Es reichen eigentlich immer Treberklasse, DB Host, DB User, DB Password, DB Name. Benutzt du eine Implementierung von DataSource (z.B. aus Commons DBCP, BasicDataSource), erledigt sich das ganze durch einfache Setter.

Gruß
Ollie
 
2.) Verschiedene Vendors brauchen bei mir unterschiedliche Angaben, da eine Schnittstelle, gegen die ich laufen muss, so ausgelegt ist, dass man z.B. bei sybase die sog. Dsqueries angibt und keine Host-/Portangaben machen will.
 
Zurück