Spontifixus hat geschrieben:Ich erstelle im Rahmen meiner Diplomarbeit eine Datenbank, auf die über zwei verschiedene Wege zugegriffen werden soll. Weg Nummer Eins: Ein Webinterface, Weg Nummer Zwei eine auf dem Rechner des Benutzers laufende lokale Python-Anwendung.
[...]
Zur Verarbeitung der Daten möchte ich bestimmte Klassen definieren, die anschließend von den jeweiligen Anwendungen (Webinterface und lokale Anwendung) instanziiert werden sollen (Stichwort MVC).
Hallo Markus!
Code: Alles auswählen
Datenbank
|
Middleware
|
-------------------
| |
Webinterface Lokales Python-Programm
Was will ich damit sagen? Mach einzelne Programme daraus und nicht ein ganzes Programm.
Die Datenbank kümmert sich um die Datenhaltung.
Die Middleware greift direkt auf die Datenbank zu und kümmert sich darum, dass die Clients eine vereinfachte Schnittstelle zur Datenbank haben.
Die Clients richten ihre Anfragen an die Middleware, die die Daten aus der Db holt und weiter gibt.
Einfachste Kommunikation zwischen den Clients und der Middleware --> XMLRPC, das in Python sehr gut implementiert wurde.
Für das Webinterface eignet sich jedes Web-Framework oder sogar CGI. Ich schlage dir CherryPy vor. Und für das GUI-Programm wxPython.
EDIT:
Eine Middleware hat allerdings auch seine Nachteile. Eine Middleware kann ziemlich schnell aus allen Nähten platzen. Mir persönlich ist schon passiert, dass die Middleware so umfangreich wurde, dass es inzwischen einfacher ist, direkt auf die Datenbank zuzugreifen, als für jede Kleinigkeit über die Middleware zu gehen. Man muss sich als Programmierer stark zurück halten, um doch über die Middleware zu gehen. Außerdem hat jedes gute Datenbanksystem eine Benutzer- und Rechteverwaltung eingebaut. Wenn du über eine Middleware gehst, dann musst du dich selber darum kümmern. Auch um die Lastverteilung. Connectionpooling usw.
Als Alternative kann man die Funktionen der Middleware
direkt in die Datenbank verlegen. Das hat fast nur Vorteile. Eine gute Datenbank, wie z.B. PostgreSQL kann sogar direkt mit Python programmiert werden. Die Rechte können granular auf einzelne Objekte verteilt werden. Usw.
mfg
Gerold
PS:
http://www.postgresql.org/docs/8.2/static/plpython.html