Data Access Object / MVC

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo zusammen,

ich versuche bei einer DB Anwendung das Dao Pattern einzusetzen. Leider gibt es in der Umsetzung einige Probleme.

Mir ist der Weg noch nicht ganz klar, wie ich die Daten von der GUI in die DB und von der DB zurück in
die GUI bekomme.

Der Weg sieht bisher so aus: GUI --> Controller --> Im Controller wird die DaoFactory aufgerufen -->
DaoFactory erzeugt konkretes DAO --> DAO ruft DATEN aus DB --> speichert Daten in POJO .

Wie kommen nun die POJOs zurück zur GUI?

Was passiert mit den POJOS, nachdem Sie von der DAO befüllt wurden. Werden die POJOS direkt an die
GUI weitergeleitet ?

Mein Beispiel wäre eine Methode : public ArrayList getData(int id ){}


Gibt es eine Verbindung zwischen dem Controller und den Pojos , d.h. hat der Controller die Möglichkeit,
POJOS zu instantiieren ?


Ich hoffe, mein Problem klar dargestellt zu haben..


Viele Grüße
 
G

Gast

Gast
In der GUI gibt es Formulare , die die Daten aus der DB anzeigen. Man soll Daten bearbeite , löschen und erstellen können.

Also läuft alles auf dem Hinweg über den Controller, auf dem Rückweg von der DB hat das Model direkten Kontakt zur View.

Mit Deiner Antwort hast Du mir schon einmal sehr geholfen.

Vielleicht kann ich ja mal einen Link zu meinem Klassendiagramm
einstellen, wenn es denn fertig ist. Vielleicht kann ich ja noch ein paar Tipps von Dir bekommen ?

Natürlich nur, wenn das im Pahmen liegt?!

Viele Grüße
 
M

maki

Gast
Während DAO eigentlich immer gleich ist, ist MVC in jeder Umgebung etwas anders: Webanwendungen im einem Servlet Container können verschiedene MVC Frameworks benutzen(struts, JSF, etc.), Swing ist wieder anderes MVC.

Deswegen meine Frage nach deiner GUI ;)
 
G

Gast

Gast
Achso, ich nutze Swing .

Der Einsatz von Frameworks sind nicht in Planung.

Wie wäre den dann im Zusamenhang mit Swing der Einsatz von

MVC zu händeln ?

:)
 
M

maki

Gast
Swing ist nicht meine Baustelle ;)
Kann dir da leider nicht helfen.
 

SnooP

Top Contributor
Swing bietet ja an sich schon Modelle für alle möglichen Controlls an... - TableModel, ComboBoxModel etc... diese Modelle packen wir immer in den Controller (also Referenzen darauf) inkl. Listener usw... Wenn die GUI eine Aktion starten soll, ruft sie also den Controller auf, bzw. die actionPerformed Methode aus einem ActionListener z.B. ... das Modell selbst - (also das eigene) kann z.B. via DAO angesprochen werden bzw. über Factories die wiederum im Controller liegen. Meistens muss im Controller dann auch noch die gui selbst liegen, sprich der Controller hält Referenzen sowohl zu Modell als auch zur View, weil man z.B. nen Dialog nach dem Drücken des Speichern-Buttons auch wieder schließen möchte... man könnte das natürlich umgehen, indem man prinzipiell nur Events hin und herschickt und Controller+View nur via Listener lose gekoppelt sind - ich halte davon aber nich soo viel - zu viel Overhead und zu unübersichtlich beim Debuggen.

Um den Dialog bzw. das Modell jeweils von Änderungen zu unterrichten, kann dann ein PropertyChange-Mechanismus verwendet werden.

Trotzdem - prinzipielles Vorgehensmodell: Modellklassen... Controllerklasse für jede View-Klasse die Modell+View verbinden. Dazwischen können evtl. auch noch einige Service-Klassen gehängt werden, wo ich dann so die DAOs einordnen würde...
 

ARadauer

Top Contributor
mein konzept:

  • ein controller der instanziert die models und die views. die view kriegt eine referenz auf das model und die view regestriert sich beim model als listener. (ob jetzt ein oder mehrere model bzw views, hängt vom fall ab)

    benutzer klickt zb in der view auf load, ein comando geht an den controller, der das model anweißt daten zu laden.

    das model benutz ein dao um die jeweiligen fachobjekte zu laden und hält sie in sich (oft überschreibt das model, zb ein table model)

    ist das laden beendet, informiert das model die view darüber

    die view kann dann selbst entscheiden ob sie sich aufgrund der aktuellen daten im model aktualisiert.


ich mach das so und bei mir funktioniert das gut. bei mir hat der controller immer wenig zu tun. die teile sind lose über interfaces gekoppelt. also die view kennt nicht wirklich das model sondern nur das interface dass das model implementiert.
 
G

Gast

Gast
Hallo ,

ich halte mich ein wenig an die letzte Beschreibung von ARadauer.

Zitat:
view regestriert sich beim model als listener.

Das ist gut. Hab also einen Observer eingebaut. Nutze dafür
import java.util.Observable;
import java.util.Observer;

In der View geht das auch ganz gut:

Code:
public class CLAnlegenScreen extends CLScreen implements Observer{

	MainController mc;
	Observable observable;
	
	
	public CLAnlegenScreen(MainController mc, Observable observable) {
		super();
		this.mc = mc;
		this.observable = observable;
		
		observable.addObserver(this);


	}

...........

Ich frage mich nur wie ich im Controller den Observer anspreche , wenn ich die View aufrufe?

1.) new CLPatientAnlegenScreen(mc, ??? ).show(); <--- keine Ahnung wie ich hier den Observer übergebe

----------

Vielleicht wäre es auch schöner, seinen eigenen Observer zu programmieren.

Im DaoInterface also diese Methoden implementieren:

addObserver(Object o) ;
deleteObsrverObject o);

In den Daos dann :

Code:
ArrayList observers = new ArrayList();

MitarbeiterDao:

public void addObserver(Object o){
mit_observers.add(o);
}

Das Ding ist, ich müßte für jede DAO eine ArrayList machen und die beiden Methoden implementieren,
das kommt mir sehr aufwendig und falsch vor. Sehr hier aber auch keinen Ausweg.

Ich hoffe, ich konnte mein Problem einigermaßen rüber bringen! Wie würdet ihr das machen?

Viele Grüße
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben