mvc + db
Verfasst: Mittwoch 27. Februar 2008, 22:41
hi,
ich plane gerade ein etwas größeres projekt, bin aber noch völlig unerfahren, was softwaredesign anbelangt. vielleicht könnt ihr mir mit euerer erfahrung ein wenig auf die sprünge helfen:
besagtes projekt erfordert u.a., dass eine liste aus einer datenbank (oder textdatei) über eine wxpython-gui oder tui angezeigt wird. über diese sollen die datensätze dann auch verändert werden können.
ich habe dabei versucht, so objektorientiert wie möglich zu denken. da ich meinen eigenen entwürfen etwas misstrauisch gegenüber stand, habe ich recherchiert und bin dabei auf das mvc-design pattern gestoßen.
demnach brauche ich also ein model, das alle datenbestände enthält, u.a. eine abstrakte liste mit einträgen.
außerdem eine view, die dann u.a. eine grafische version einer liste mit grafischen einträgen enthalten würde.
und dann den controller, der die beiden verbindet.
das wars jetzt mit der sicherheit, ab jetzt ist hinter jeder zeile ein fragezeichen zu lesen:
- die view erfährt von einer änderung des models durch eine art observer, der z.B. feststellt, dass sich eintrag 1 in liste a des models geändert hat. die view wird deshalb eintrag 1 in ihrer grafischen liste a anweisen, sich zu updaten.
- wird nun in der gui eintrag 1 von liste a geändert, wird dies von wxpython als event registriert. zuständig für die nun nötigen veränderungen ist aber der controller. dieser soll entscheiden, was zu tun ist, ggf. berechnungen mit hilfe anderer klassen durchführen und die änderungen am model vornehmen (konkret model.listea.eintrag1 verändern). und da wären jetzt zwei varianten für mich denkbar:
a) die view leitet events nur an den controller weiter, d.h. sie teilt ihm lediglich mit: "eintrag 1 in liste a hat sich geändert"
b) die view trifft bereits erste entscheidungen: "löscheEintrag(a, 1)"
- wie werden jetzt aber die daten gespeichert? im zusammenhang mit mvc habe ich leider nie etwas von io-operation gelesen. irgendwie muss ich den datenbestand im arbeitsspeicher ja mit dem datenbestand auf der festplatte synchronisieren.
a) ich könnte vielleicht das model bei jeder änderung anweisen, sich in der datenbank zu speichern bzw. im konstruktor die daten aus der datenbank zu laden.
b) oder aber ich interpretiere das model als die datenbank selbst, dann müsste ich aber wohl darauf verzichten, meine daten als objekt abzuspeichern, da datenbanken ja keine objekte kennen.
irgendwie hab ich das dumme gefühl, dass ich grad viel zu kompliziert denke
ich plane gerade ein etwas größeres projekt, bin aber noch völlig unerfahren, was softwaredesign anbelangt. vielleicht könnt ihr mir mit euerer erfahrung ein wenig auf die sprünge helfen:
besagtes projekt erfordert u.a., dass eine liste aus einer datenbank (oder textdatei) über eine wxpython-gui oder tui angezeigt wird. über diese sollen die datensätze dann auch verändert werden können.
ich habe dabei versucht, so objektorientiert wie möglich zu denken. da ich meinen eigenen entwürfen etwas misstrauisch gegenüber stand, habe ich recherchiert und bin dabei auf das mvc-design pattern gestoßen.
demnach brauche ich also ein model, das alle datenbestände enthält, u.a. eine abstrakte liste mit einträgen.
außerdem eine view, die dann u.a. eine grafische version einer liste mit grafischen einträgen enthalten würde.
und dann den controller, der die beiden verbindet.
das wars jetzt mit der sicherheit, ab jetzt ist hinter jeder zeile ein fragezeichen zu lesen:
- die view erfährt von einer änderung des models durch eine art observer, der z.B. feststellt, dass sich eintrag 1 in liste a des models geändert hat. die view wird deshalb eintrag 1 in ihrer grafischen liste a anweisen, sich zu updaten.
- wird nun in der gui eintrag 1 von liste a geändert, wird dies von wxpython als event registriert. zuständig für die nun nötigen veränderungen ist aber der controller. dieser soll entscheiden, was zu tun ist, ggf. berechnungen mit hilfe anderer klassen durchführen und die änderungen am model vornehmen (konkret model.listea.eintrag1 verändern). und da wären jetzt zwei varianten für mich denkbar:
a) die view leitet events nur an den controller weiter, d.h. sie teilt ihm lediglich mit: "eintrag 1 in liste a hat sich geändert"
b) die view trifft bereits erste entscheidungen: "löscheEintrag(a, 1)"
- wie werden jetzt aber die daten gespeichert? im zusammenhang mit mvc habe ich leider nie etwas von io-operation gelesen. irgendwie muss ich den datenbestand im arbeitsspeicher ja mit dem datenbestand auf der festplatte synchronisieren.
a) ich könnte vielleicht das model bei jeder änderung anweisen, sich in der datenbank zu speichern bzw. im konstruktor die daten aus der datenbank zu laden.
b) oder aber ich interpretiere das model als die datenbank selbst, dann müsste ich aber wohl darauf verzichten, meine daten als objekt abzuspeichern, da datenbanken ja keine objekte kennen.
irgendwie hab ich das dumme gefühl, dass ich grad viel zu kompliziert denke