Design Patterns in Programm hineinfließen lassen

  • Themenstarter Jürgen Müller
  • Beginndatum
Status
Nicht offen für weitere Antworten.
J

Jürgen Müller

Gast
Hallo allerseits,

Ich habe mal ein UML Bild erstellt von einem geplanten Programm. Die MainWindow Klasse ist ein JFrame, alle anderen Klassen sind von JPanel abgeleitet und stellen JTabbedPanes dar. Die letzte KLasse ist die ComponentPanel Klasse mit einen add(..); methode für das GBLayout.

Später wird hinter jeder JPanel Klasse eine embedded MySql-Tabelle stehen als Datenmodel für die Daten die in den GUI-Klassen eingegeben werden. Die MySql-Tabellen haben teilweise Beziehungen zueinander.

Nun frage ich mich, da ich mich bereits etwas mit verschiedenen Design Patterns beschäftigt habe, welches Design Pattern ich über meine Anwendung "stülpen" könnte bzw. macht ein Design Pattern bei mir überhaupt Sinn ?

Dann hätte ich noch gleich eine Frage:

MVC Pattern: wende ich das MVC Muster bereits an, wenn ich meine Daten, GUI und SteuerungsMethoden bereits in einer eigenen Klasse habe? oder fehlt das Delegate?

azaaek1wx7fn5ya53.png
 

L-ectron-X

Gesperrter Benutzer
Mindestens das MVC-Pattern, das DAO-Pattern und das Factory-Pattern können hier eingesetzt werden.
 
J

Jürgen Müller

Gast
L-ectron-X hat gesagt.:
Mindestens das MVC-Pattern, das DAO-Pattern und das Factory-Pattern können hier eingesetzt werden.

DAO:

DAO ist eine hervorragende Wahl um die Persistenzschicht und die eingesetzten Technologien wie z.B. JDBC, EJB CMP oder Hibernate zu abstrahieren und somit den Code für den Datenzugriff vom Rest der Anwendung zu isolieren.

ok DAO kannte ich nicht bzw. nie davon gehört, doch hört sich gut an! Kannst du mir Tutorials oder eine Lektüre dazu empfehlen? Ich habe das Buch Entwurfsmuster von Kopf-Fuß doch leider gibt es dort keine tolles Beispiel von DAO :/

MVC: ok also MVC schaue ich mir genau nochmals an...

Factory Method Pattern: Habe mir das Pizza Beispiel durchgelesen mit der Pizzafabrik und den verschiedenen Pizzen, doch ich weiß nicht wie ich dies auf mein Programm anwenden sollte bzw. ich sehe da keine deckenden Muster...

Könntest du da noch näher draufeingehen?
 
J

Jürgen Müller

Gast
da hab ich noch was auf wikipedia gefunden:
(DAO, deutsch: „Datenzugriffsobjekt“) ist ein Entwurfsmuster, das den Zugriff auf unterschiedliche Arten von Datenquellen (z. B. Datenbanken, Dateisystem, etc.) so kapselt, dass die angesprochene Datenquelle ausgetauscht werden kann, ohne den aufrufenden Code zu ändern

Datenquelle sprich MySql datenbank austauschen... warum sollte ich das wollen? Selbst in 2 Jahren gibts nichts besseres als eine embedded MySql Datenbank.

Wie gesagt ich bin der Meinung man sollte jedes Pattern genau abwägen ob damit nicht auf Spatzen mit Riesenkanonen geschossen wird sprich man springt weit übers Ziel hinaus... doch da fehlt mir die Erfahrung, daher frage ich ja hier ;-)
 

foobar

Top Contributor
Das DAO-Pattern ist auch dann praktisch, wenn man die DB später nicht auswechseln will, weil man eine saubere Trennung von Persistenzschicht und dem Rest der Anwendung hat.
 
J

Jürgen Müller

Gast
L-ectron-X hat gesagt.:
Zum DAO- und Factory-Pattern hat semi ein schönes Beispiel geschrieben und gut erklärt.
http://www.java-forum.org/de/viewtopic.php?p=393061#393061

Habs mir mal durchgelesen und viele Fragen nun ^^

Ich finde in Semi`s Code nichts von einer MySql Verbindung noch irgendwelche sql statements ??

Ist Dao nun ein Pattern sprich ein spezielles Verhältnis von Klassen/Interfaces zueinander etc oder ein Framework? Ich dachte Dao würde MySql irgendwie kapseln und mir Methoden bereitstellen.
 
J

Jürgen Müller

Gast
so habe mal die forensuche benutzt mit "DAO" und les mich da mal durch...

noch eine letzte Frage: also ist es OK wenn ich die H2 embedded Datenbank benutze mit DAO als Schicht zwischen Datenbank und meiner meiner Java Anwendung?
 

L-ectron-X

Gesperrter Benutzer
Sicher, probiers einfach mal aus. Ich hab bis jetzt die DAO-Schicht selbst geschrieben, aber ich werde mir auf jeden Fall auch mal das Material von deinem Link ansehen.

Jürgen Müller hat gesagt.:
also ist es OK wenn ich die H2 embedded Datenbank benutze mit DAO als Schicht zwischen Datenbank und meiner meiner Java Anwendung?
Ja.
 
M

maki

Gast
Kannst auch iBatis nehmen, wenn es etwas einfacher sein darf, ohne JPA/Hibernate.

http://ibatis.apache.org/

Hier noch ein generisches Hibernate DAO: http://www.hibernate.org/328.html

Nachtrag: AdressBuch, Veranstaltungen, Noten, Wochenplan, Vorkommnisse sehen für mich wie Domainklassen aus (Model), sind aber abhängig von der GUI da sie von Componentpanel erben, muss dass denn sein? ;)

Nachtrag 2: Englische Begriffe sind zu bevorzugen, da kommt es dann nicht zu so seltsamen Konstrukten wie getNote() und ähnlichem.
 
J

Jürgen Müller

Gast
maki hat gesagt.:
Kannst auch iBatis nehmen, wenn es etwas einfacher sein darf, ohne JPA/Hibernate.

http://ibatis.apache.org/
Hier noch ein generisches Hibernate DAO: http://www.hibernate.org/328.html

Nachtrag: AdressBuch, Veranstaltungen, Noten, Wochenplan, Vorkommnisse sehen für mich wie Domainklassen aus (Model), sind aber abhängig von der GUI da sie von Componentpanel erben, muss dass denn sein? ;)

Nachtrag 2: Englische Begriffe sind zu bevorzugen, da kommt es dann nicht zu so seltsamen Konstrukten wie getNote() und ähnlichem.

1. Zu iBatis: wie ganz oben gesagt, das ist eine Java Desktop Anwendung und was ich brauche ist eine schnelle embedded Datenbank. Glaube kaum dass mir Hibernate da hilft oder entgegen kommt.

2. Zu Nachtrag: Das sind alles GUI-Klassen auf der Umel Karte darum ComponentPanel, damit ich die add Methoden nicht jedesmal neu in die Klasse schreiben muss.

3. getNote finde ich ok getGrade klingt bescheuert, vor allem weil die Benutzeroberlächetexte auch in deutsch sind sollte man das einheitlichmachen mit holeNote(), setzeNote() meine Meinung als Deutscher ;-)

Danke semi für deinen Link!

Frage: Macht DAO den DB Zugriff nicht langsam? da wird ewig viel gekapselt und verwurschtelt da frag ich mich doch was an den guten alten JDBC Zugriffen schlecht war :wink: vor allem habe ich so wie ich das ganze bisher verstanden habe um einiges mehr an Code...

vor allem den Satz verstehe ich net...:

Code:
The basic idea behind the iBATIS introduction was to significantly reduce the amount of Java code that a Java developer normally needs to access a relational database with the use of XML files containing SQL queries.

wenn ich zu JDBC noch iBatis dazunehme wie kann ich dann weniger Code benötigen um eine rel. DB anzusprechen ??
 
M

maki

Gast
1. Zu iBatis: wie ganz oben gesagt, das ist eine Java Desktop Anwendung und was ich brauche ist eine schnelle embedded Datenbank. Glaube kaum dass mir Hibernate da hilft oder entgegen kommt.
Kommt darauf an, wenn du ein Domainmodell mit OR Mapper gewohnt bist, wirst du mit nix anderem arbeiten wollen.
Wenn du Hibernate nicht kennst, ist es anders, die Lernkurve ist ziemlich steil.

2. Zu Nachtrag: Das sind alles GUI-Klassen auf der Umel Karte darum ComponentPanel, damit ich die add Methoden nicht jedesmal neu in die Klasse schreiben muss.
Nun, eine neue Klasse zu schreiben wäre ein saubereres Design ;)

In OO Sprachen schreibt man sehr viele kleine Klassen.

3. getNote finde ich ok getGrade klingt bescheuert, vor allem weil die Benutzeroberlächetexte auch in deutsch sind sollte man das einheitlichmachen mit holeNote(), setzeNote() meine Meinung als Deutscher icon_wink.gif
Benutzeroberflächen gibt es in vielen Sprachen, hat rein gar nix mit dem Quellcode zu tun, die deutsche Sprache pflegt man definitiv nicht im Quelltext von Progammen.
"Denglisch", die hässliche Vermischung von Deutsch und Englisch, wie zB. "getNote()" rührt in der IT daher dass Leute nicht konsequent sind, per Konvention sollen getter mit get beginnen und setter mit set, wichtig bei vielen Frameworks (von JSF bis iBatis und Hibernate), "setze" und "hole" sind nicht möglich. Was bleibt? ;)

Frage: Macht DAO den DB Zugriff nicht langsam? da wird ewig viel gekapselt und verwurschtelt da frag ich mich doch was an den guten alten JDBC Zugriffen schlecht war icon_wink.gif vor allem habe ich so wie ich das ganze bisher verstanden habe um einiges mehr an Code...
Falsche "denke", in der OO macht man genau das.
"Langsam"? Vielleicht wäre Assembler eher etwas für dich ;)
Nee, quatsch. Vergiss Performance, ist nicht wichtig, ist aber vor allem nicht vorherzusagen, kann man nur messen, alles andere ist geraten.

wenn ich zu JDBC noch iBatis dazunehme wie kann ich dann weniger Code benötigen um eine rel. DB anzusprechen ??
Mit iBatis braucht man keine Zeile JDBC mehr, wenn man schon mal JDBC Code geschrieben hat, versteht man warum JDBC ein sog. "PITA" ist.
 
J

Jürgen Müller

Gast
2. Zu Nachtrag: Das sind alles GUI-Klassen auf der Umel Karte darum ComponentPanel, damit ich die add Methoden nicht jedesmal neu in die Klasse schreiben muss.

Nun, eine neue Klasse zu schreiben wäre ein saubereres Design ;)

Aber ich habe doch eine neue Klasse geschrieben genannt ComponentPanel ??

In OO Sprachen schreibt man sehr viele kleine Klassen.

Wo habe ich wenige große Klassen?

Benutzeroberflächen gibt es in vielen Sprachen, hat rein gar nix mit dem Quellcode zu tun, die deutsche Sprache pflegt man definitiv nicht im Quelltext von Progammen.
"Denglisch", die hässliche Vermischung von Deutsch und Englisch, wie zB. "getNote()" rührt in der IT daher dass Leute nicht konsequent sind, per Konvention sollen getter mit get beginnen und setter mit set, wichtig bei vielen Frameworks (von JSF bis iBatis und Hibernate), "setze" und "hole" sind nicht möglich. Was bleibt? ;)
ok also getGrade() auch wenn das sehr hm ungewohnt ist.



OK iBatis scheint ein interessantes Framework zu sein welches mir Arbeit ab nimmt. Das schaue ich mir näher an. Wenn ich also iBatis benutze sollte ich dann auch nocht mit dem DAO Pattern arbeiten ??
 

foobar

Top Contributor
Aber ich habe doch eine neue Klasse geschrieben genannt ComponentPanel ??
Dir fehlt die Trennung zwischen Domainmodel und GUI(View). Deine Klassen Adressbuch, Noten, Wochenplan sollen nur das Domainmodel darstellen. Guck dazu mal Pojos an: http://de.wikipedia.org/wiki/Plain_Old_Java_Object

OK iBatis scheint ein interessantes Framework zu sein welches mir Arbeit ab nimmt. Das schaue ich mir näher an. Wenn ich also iBatis benutze sollte ich dann auch nocht mit dem DAO Pattern arbeiten ??
Ja, die DB-Schicht sollte trotzdem gekapselt werden. Wenn du mit einem Persistenzframework arbeitest, kann die Kapselung aber viel dünner ausfallen.
 
J

Jürgen Müller

Gast
jetzt habe ich noch ein gutes Zitat gefunden, welches evtl. hervorhebt was ich brauche und was überflüssig wäre:

I've been playing around with Persistence frameworks lately, after been inspired by a Hibernate, which is a de facto standard is used in lot of places. While Hibernate is certainly an excellent technology, it is not always the right choice. In other words, Hibernate works very well if your data model is well in sync with object model, because ORM solutions like Hibernate map object to tables. However, let’s suppose data model is not in sync with object model, this is where the model starts breaking down. One size does not fit all. So this is where I like to use iBatis; as the alternative solution, iBatis maps results sets to objects, so no need to care about table structures.

In meinem Programm KÖNNTE es so sein, dass beim Programmstart IMMER alle Daten aus der Datenbank gelesen werden. Diese Daten können sein Strings, int, date oder auch objekte.Nun würde ich dieses Daten je Tabelle in je einer ArrayList speichern als Objekte sprich am Besten wäre eigentlich, wenn alles aus der Datenbank ein Objekt wäre.


Anhand der Voreinstellungen der GUI z.B. ist in der JComboBox ausgewählt, dass in der GUI-Jtable nur Adressdaten der Schüler aus Klasse "7a" angezeigt werden. Jetzt jedes Objekt in der ArrayList nach dem String "7a" zu durchsuchen und diese dann in die Tabelle mit setValueAt(); zu schreiben wäre ja Schwachsinn...

Wißt Ihr was ich meine ungefähr? Ich denke Ihr oder einige von Euch kennen iBatis/Hibernate und bestimmt könnt Ihr mir ziemlich genau sagen was in meinem Fall geeignet wäre?

Würde mich zumindest darüber sehr freuen, damits nicht von Beginn an chaotisch wird :lol:
 
J

Jürgen Müller

Gast
foobar hat gesagt.:
Aber ich habe doch eine neue Klasse geschrieben genannt ComponentPanel ??
Dir fehlt die Trennung zwischen Domainmodel und GUI(View). Deine Klassen Adressbuch, Noten, Wochenplan sollen nur das Domainmodel darstellen. Guck dazu mal Pojos an: http://de.wikipedia.org/wiki/Plain_Old_Java_Object

Ich glaube hier liegt ein Mißverständnis vor hehe. Auf meiner Umel Karte sind die GUI-Klassen das ist richtig, diese beinhalten aber nicht die Model/Controll Klassen das wäre noch gekommen ich wollte euch nur schnell was zeigen, habe schon bissl mit GUI gespielt und dann schnell UML gemacht daher das ganze... klar trenne ich das später noch in MVC auf ;-)

OK iBatis scheint ein interessantes Framework zu sein welches mir Arbeit ab nimmt. Das schaue ich mir näher an. Wenn ich also iBatis benutze sollte ich dann auch nocht mit dem DAO Pattern arbeiten ??
Ja, die DB-Schicht sollte trotzdem gekapselt werden. Wenn du mit einem Persistenzframework arbeitest, kann die Kapselung aber viel dünner ausfallen.

Ernste Frage: Macht Ihr das wirklich alle so: iBatis + DAO oder Hibernate + DAO ?
 
J

Jürgen Müller

Gast
ok war gerade auf manning.com habe mir mal die 2 freien Kapitel durchgeles...überflogen

Code:
Employee emp = (Employee) sqlMap.queryForObject("getEmployee",
new Integer(5));

jetzt weiß ich auch warum jdbc alleine nix ist :lol:

ne iBatis scheint echt ein tolles framework zu sein und für meine kleine Anwendung genau richtig. Das mit der ArrayList war quark wie ich jetzt sehe, kann ja objekte mit integrierter Bedingung direkt mit ibatis aus der DB lesen :bae:
 
M

maki

Gast
Ernste Frage: Macht Ihr das wirklich alle so: iBatis + DAO oder Hibernate + DAO ?
Natürlich siehe, siehe Antwort von L-etron-X und semi, DAO + JDBC funzt auch.

Wenn ich jetzt so drüber nachdenke, wäre es villeicht nicht verkehrt wenn du dich mit JDBC auseinandersetzt, ist zwar 'ne lowlevel API, aber zum üben richtig, JDBC sollte man zumindest mal gemacht haben dann darf man auch auf Frameworks umsteigen.

Liegt aber an dir.

Wichtig ist dass du deine DB Zugriffschicht vom Rest der Anwendung kapselst -> DAOs

Was dahinterliegt sollte ja austauschbar sein :) (JDBC, iBatis, Hibernate, JPA, DTO, etc. pp.)
 

ps

Bekanntes Mitglied
Kurz zu den DAOs:
Wenn man mit JPA arbeitet (Hibernate, Toplink, OpenJPA, etc) so finde ich das ist genug kapselung von der DB Schicht.

Man benutzt für den Zugriff durch den EntityManager ja ausschließlich Klassennamen - die Datenbankstruktur muss einem nicht bekannt sein. Möchte man hier noch eine Schicht dazwischenziehen so ist das wirklich seeeeeh dünn - man gewinnt eigentlich nur bessere Prüfung zur Compile-Time.

Ich finde DAOs aber allgemein sehr unpraktisch wenn man Objekte mit vielen Properties hat und zB. eine Suche implementieren möchte (die DAOs werden unübersichtlich). Baut man generische DAOs so baut man den EntityManager nach ^^
 
M

maki

Gast
Man benutzt für den Zugriff durch den EntityManager ja ausschließlich Klassennamen - die Datenbankstruktur muss einem nicht bekannt sein. Möchte man hier noch eine Schicht dazwischenziehen so ist das wirklich seeeeeh dünn - man gewinnt eigentlich nur bessere Prüfung zur Compile-Time.

Ich finde DAOs aber allgemein sehr unpraktisch wenn man Objekte mit vielen Properties hat und zB. eine Suche implementieren möchte (die DAOs werden unübersichtlich). Baut man generische DAOs so baut man den EntityManager nach ^^
Ja ps, sehe ich genauso, generische DAOs sind in etwa das was der PM macht.
DAOs sollten auch nur genutzt werden, um die Datenzugriffsschicht zu abstrahieren, Domainklassen würde ich keine referenzen auf DAOs geben (falls sie Daten/Objekte laden müssen), dafür sind sog. "Repositories" besser geeignet.

IMHO: DAOs nur für "primitive" CRUD Operationen, Repositories ( welche schon Businesslogik enhalten) als Zugriff von Domainklassen aus.

Denke aber dass der TS (noch) nicht wirklich etwas mit all diesen Infos anfangen kann ;) (nicht böse gemeint Jürgen Müller, aber wenn du jetzt verwirrt bist ist das verständlich)
 
J

Jürgen Müller

Gast
darfst Jürgen sagen :lol:

ich komm schon in ein paar wochen mit einem Beispiel doch zur Zeit halten mich Schöler noch auf Trab.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Design Patterns und die Keywords Softwareentwicklung 22
K Einlesen einer .dat-Datei (verschiedene Formate) | Entwicklung unter Einsatz von Design-Patterns Softwareentwicklung 0
L Design Patterns zu abstraktem Problem Softwareentwicklung 2
P Zwei Fragen zum Design Softwareentwicklung 16
M Visito/Besucher Design-Pattern/Strukturmuster Softwareentwicklung 4
M Sauberes Design, Clean Code, etc. pp. Softwareentwicklung 47
G Projekte die Design by Contract verwendet haben?? Softwareentwicklung 2
H2SO3- design pattern: code in model classes Softwareentwicklung 5
G Design Pattern gesucht! Softwareentwicklung 4
D Design Pattern Softwareentwicklung 6
C Wiki für ein Uni - High Level Design Softwareentwicklung 5
V Design Patters - Observer Softwareentwicklung 6
S Design Pattern für zwei abhängige Klassen Softwareentwicklung 8
Jay_030 Checkstyle: Lösungsvorschläge für Design for Extension Softwareentwicklung 7
G Suche Programm für Masken Design für Pflichtenheft Softwareentwicklung 5
W Frage zu a)Innere Klassen und b)OO Design Softwareentwicklung 13
D Datenbank-Design Softwareentwicklung 3
M Datei-Typ-Design Softwareentwicklung 10
K Design Pattern für einen simple Rechenmaschine Softwareentwicklung 18
S Design-Frage: Wie viele Fassaden? Softwareentwicklung 4
G Test First <-> Design First Softwareentwicklung 6
M Patterns sinnvoll anwenden Softwareentwicklung 2
P Unterschiede einiger Patterns Softwareentwicklung 2
D Beispiele für Patterns Softwareentwicklung 3
B Batchdatei, Prüfe ob Programm X läuft Softwareentwicklung 2
N Pop-up Programm mit Live-Video Softwareentwicklung 7
fk1 Beginnercode: Pokerdealer Programm Softwareentwicklung 60
C Programm "Road Chat" realisierbar? Softwareentwicklung 2
J Suche noch eine Loesung fuer Kommunikation zwischen Webserver und ein Programm Softwareentwicklung 0
P Benutzeroberfläche Programm Bewertung Softwareentwicklung 2
KranzKrone Architektur für einfaches Gui Programm Softwareentwicklung 6
G Make or Buy? - Tagging-Programm Softwareentwicklung 4
G Linux: Programm mit UI einmalig beim Systemstart ausführen Softwareentwicklung 3
B WHILE und GOTO Programm Softwareentwicklung 32
I Tool / Programm etc. zur Testdokumentation gesucht Softwareentwicklung 2
T Kommerziellen Programm unter Verwendung div. Libraries mit div. Lizenzen Softwareentwicklung 7
Airwolf89 Java-Programm in C++ portieren Softwareentwicklung 4
Steev Javaprogram aus C/AL-Programm ansteuern Softwareentwicklung 13
clupus Verbindung mit c-Programm Softwareentwicklung 4
V AGB's in Programm einbauen? Softwareentwicklung 3
sparrow Welche Lizenz für ein offenes Programm Softwareentwicklung 2
T Programm mit Passwort schützen. Softwareentwicklung 44
J Finde Fehler im Programm nicht (Klasse Kreis) Softwareentwicklung 1
E Java Programm distributen Softwareentwicklung 35
X Möglichst unverständliches Programm Softwareentwicklung 13
P Grafik-Programm mit JAVA? Softwareentwicklung 21
F Kleines Programm für Windows Softwareentwicklung 2
M Kurvendiskussion, Funktions-Plotter, Mathe-Programm. Softwareentwicklung 3
W Herangehensweise an ein Java Programm Softwareentwicklung 4

Ähnliche Java Themen

Neue Themen


Oben