Java Java GUI Anwendung mit Anbindung an Datenbank Designtechnische Fragen

PEASANT KING

Commander
Registriert
Okt. 2008
Beiträge
2.412
Hallo Leute,

mich beschäftigt mal wieder ein Thema und ich wollte eure Meinungen mal dazu hören.

Ich programmiere in den letzten Wochen eine Java GUI Anwendung mit Anbindung an eine Datenbank.
Soweit so gut. Um etwas genauer zu sein handelt es sich um ein Programm ähnlich einer Warenwirtschaft allerdings zugeschnitten auf eine bestimmte Dienstleistung.

Ich habe versucht so viel wie möglich mittels MVC Pattern zu schreiben, doch leider ertappe ich mich immer wieder von diesem Pattern abzuweichen, weil manche Dinge einfach nicht in das Schema rein passen.

Jetzt ist es so das viele SQL Abfragen im Hintergrund laufen, beim erzeugen von neuen Datensätzen usw.
Diese Abfragen steuer ich über das jeweilige Model zu meinen Modulen, als Beispiel:

Kundenmodul besitzt eine View -> enthält nur GUI Komponenten
Model -> Enthält SQL Statements und erzeugt unter anderem auch das TableModel für die Tabelle in der GUI
Controller -> Reagiert auf Eingaben in der GUI und führt dann die jeweiligen Funktionen aus.

Ist das so in Ordnung oder sollten z.B. alle SQL Statement Funktionen in eine Datenbankklasse ausgelagert werden.

Die Anwendung besitzt natürlich DatenbankHandler Klassen die die Verbindung zur Datenbank aufbauen oder schließen, sowie das erstellen der Datenbank wenn nicht vorhanden.
 
SQL-Abfragen haben bei MVC weder im Model noch im Controller was zu suchen.
Ich empfehl dir für die DB-Anbindung SOA (Service-Orientated Architecture).

Du baust dir für jedes Model, was du Mappen willst, ein DAO (Data Access object), der ausschließlich zur Transaktion mit der DB bestimmt ist, sowie einen Service, der die Anfragen vom Controller verarbeitet, Beziehungen herstellt und auf Fehler korrigiert und dann erst den Dao fragt.

Model -> Enthält SQL Statements und erzeugt unter anderem auch das TableModel für die Tabelle in der GUI
GUI-Sachen haben im Model gar nix zu suchen. Sowas macht die Oberfläche, der Controller liefert dafür die Daten.

Ich würd dir euch wärmstens empfehlen, nicht mit SQL-Abfragen zu arbeiten, sondern einen Mapper zu nehmen -> Hibernate.

Gruß Thax

Mal ein Beispiel (C#):

Model

Code:
public class Car {
private int _id;
private string _model;

//Konstruktor

public string Model {
 get {return _model;}
set {_model = value;}
}
public int Id{
 get {return _id;}
}
}

View heißt jetzt mal MainView.

Code:
public class MainViewController{
private Car _car;
private MainView _view;
private CarService _carService

//Konstruktor mit MainView und CarService-Parameter und Event-Subscribing

private void OnButtonSaveClick(object sender, EventArgs e){
     _carService.Save(_car);
}
}

Service
Code:
public class CarService:BaseService<Car>{
private CarDao _carDao = new CarDao();

public void Save (Car car){
 //NullCheck
//ValidCheck
car = _carDao.Save(car); //bekommt Id
}
}

Dao
Code:
public class CarDao:BaseDao<Car> {
public Car Save (Car car){
return HibernateTemplate<Car>.Save(car);
}
}

Sorry, ist grade von Hand hier reingetippt, deswegen keine Gewähr auf Typos. Mir gings ums Prinzip.
 
Zuletzt bearbeitet:
@Thaxll'ssillyia
Genau so geht's
 
DAO sagt mir was allerdings wäre ich erfreut wenn du mir dazu ein gutes Tutorial empfehlen kannst.

Verstehe mich nicht falsch ich habe Klassen geschrieben, die die Verbindung zur jeweiligen Datenbank handlen einen Wrapper für SQL Abfragen beinhalten, in meinem Model werden explizite Abfragen gestellt.
 
Hier findest du alles dazu:
http://www.hibernate.org/

in meinem Model werden explizite Abfragen gestellt.

Und genau das musst du dir abgewöhnen: Das Model bildet bloß ein fest definierbares Objekt (Kunde, Stift, Auto) mit seinen Attributen ab und sollte bis auf Ausnahmen dumm sein wie 4m Feldweg. Es weis nicht wie es angezeigt wird, in der DB gespeichert oder gelöscht wird.
 
Zuletzt bearbeitet:
Vielen Dank für die Antworten, doch leider fühle ich mich im Moment wie die 4m dummer Feldweg ^^.

Wird wohl einiges dauern, bis ich die Sache kapiere.

Den Ablauf verstehe ich und was Hibernate macht, das schwierige wird sein, diese Geschichte in meine jetzige Applikation zu integrieren.
 
Zurück
Oben