richtiger Umgang mit Klassen und Vererbung??

derjens

derjens

Ambitioniertes Mitglied
5
Einen schönen guten Abend wünsche ich.

Habe folgende Frage:

Ich habe einen DialogFragment der vier Spinner ein DatumPicker und ein EditText hat und aus den Daten einen SQLite Datensatz in einer Datenbank erzeugt.

Nun möchte ich aber das der Dialog je nachdem aus welcher activity ich ihn starte andere Daten anfordert.
Z.B. nur zwei Spinner und kein DatumPicker oder nur den DatumPicker und ein EditText. Die nicht abgefragten Daten werden an den Dialog per Bundle übergeben.


Denke mal das ich eine Basisklasse erzeugen muss und dann
die verschiedenen DialogFragments davon ableite oder?

Aber wie mache ich das am besten??
Oder wie verhindere ich das ich doppelten code??

Gruß
Jens
 
Nabend,

antwortet ja mal leider keiner.
Ich gehe davon aus, dass Du planst die Datenbeschaffung aus deiner Datenbank sowieso schon sauber auszulagern. Diesen Code wirst Du wiederverwenden.

Richtung GUI sehe ich wenig Potential für Vererbung. Du hast unterschiedliche UI-Elemente die offenbar auch nicht häufiger verwendet werden.
Für drei Dialoge wird ein Vererbungskonzept kaum lohnen. Außer Du planst die Erweiterbarkeit. Dann würde ich dir vorschlagen entweder vorher ein gutes Konzept zu machen (UML: Klassendiagramm), oder aber erstmal die Dialoge zu schreiben und dann zu Refaktorisieren (umbauen und Gemeinsamkeiten auslagern).

Ohne eine genaue Vorstellung davon, was Du machen willst, ist es schwer Tipps zu geben.
Gut möglich, dass Du auch einfach einen Dialog nutzen kannst, der über bestimmte Flags Elemente ein- und ausblenden kann.

Evtl. hilft dir das ja schon weiter, oder aber Du beschreibst etwas genauer was Du überhaupt für Dialoge erstellen willst.
 
  • Danke
Reaktionen: derjens
Die App wird eine Projektzeiterfassungin der man zu einem Projekt Buchungen zufügen kann.

Es gib eine Übersicht in der nur Buchungen angezeigt werden die dem ausgewähltem
Projekt zugeordnet sind. Außerdem gibt es eine Activity in der ich Buchungen nach Datum anzeige.

Die SQL Daten beziehe und erstelle ich über einen ContentProvider.

Ich möchte das wenn ich das DialogFragment zum erstellen der Buchung aus der Projektübersicht starte ich das Projekt dem die Buchung zugehören soll nicht mehr auswählen kann oder das wenn ich das DialogFragment aus der Datumsübersicht
starte ich zwar ein Projekt auswählen kann aber das Datum fix ist. und es gibt noch einige fälle mehr in denen das DialogFragment anders aussehen soll.

Was mich an der Sache mit den vielen underschiedlichen DialogFragments stört ist
der viele doppelten code. Spinner füllen, EditText felder checken, Daten auslesen
und den SQL Eintrag erstellen.

Vielleicht kann mir ja mal jemand auf die Sprünge helfen.

Gruß
Jens
 
Dann mach dir doch eine Art Controller Klasse, diese kannst du dann halt gewissen Funktionen übernehmen lassen ...
 
Hi,

über ein Auslagern habe ich auch schon nachgedacht. Dann würdest Du deinem "Controller" die UI-Elemente übergeben in einer Art "fillWithData" Methode. Zusätzlich evtl. noch Parameter, die das Befüllen steuern.

Die Controller wären dann für das Beschaffen der Daten zuständig.

Die Frage ist nur, ob Du daraus wirklich einen Vorteil ziehst.
Wenn die UI-Elemente häufig vorkommen in deinen Views und dazu noch genau gleich mit Daten gefüllt werden, kann ich mir einen Nutzen vorstellen.
Das musst Du dann entscheiden.

Nachteil ist halt, dass es schnell unübersichtlich werden kann und eine klare Trennung evtl. verloren geht. Es bietet sich also an verschiedene Controller zu erstellen, die für unterschiedliche Aufgaben zuständig sind, um so eine klare Strukturierung auf der Ebene zu erreichen.

Vorsicht ist allerdings bei den Bezeichnungen geboten. Der beschriebene Controller ist nicht mit dem Controller aus MVC (ModelViewController) zu verwechseln. Dieses Entwurfsmuster (MVC) hast Du ja grunsätzlich bereits eingeplant und das ist auch eine gute Entscheidung.

mfg
 
  • Danke
Reaktionen: derjens

Ähnliche Themen

M
  • MikelKatzengreis
Antworten
5
Aufrufe
137
swa00
swa00
B
Antworten
4
Aufrufe
497
bb321
B
Laser5001
Antworten
3
Aufrufe
650
swa00
swa00
Zurück
Oben Unten