Seite 1 von 1

Designfrage: Gui und XMLRPC mit Logik verknüpfen

Verfasst: Freitag 20. Februar 2009, 10:30
von Hand
Hallo,

ich stehe gerade vor dem Problem dass meine Applikation
als Dienst oder als GUI-Programm laufen kann.

Dann gibt es zur Steuerung noch ein XML-RPC interface oder ähnliches.

Wie verknüpfe ich jetzt am besten diese 3 Module?

Z.B. soll von der Logik nur etwas an die GUI geschickt werden,
wenn diese auch existiert.

Macht man so etwas normal direkt über Referenzen?
z.B. alle Module in einem Hauptmodul app.py referenzieren und über dieses dann darauf zugreifen.

Oder währe ein messagehandler über eine Queue besser geeignet?
Dieses stelle ich mir allerdings komplizierter vor da man sich ja für
alle Eventualitäten Messages ausdenken muss.

Re: Designfrage: Gui und XMLRPC mit Logik verknüpfen

Verfasst: Freitag 20. Februar 2009, 12:37
von snafu
Hand hat geschrieben:Z.B. soll von der Logik nur etwas an die GUI geschickt werden,
wenn diese auch existiert.
Warum soll sich die Logik darum kümmern? Die Funktionen sollen doch meist nur etwas berechnen und zurückgeben oder etwas verändern bzw etwas anderes aufrufen. Das können sie prima, ohne zu wissen ob eine Gui läuft.

Wenn deine Fenster bestimmte Werte anzeigen sollen, dann ruft die Gui die Funktion des Logikmoduls auf und gibt den Rückgabewert aus und nicht umgekehrt. Sollen wiederum zwei Eingabefelder aus der Gui in der Logik weiterverarbeitet werden, dann nimmt die Logik-Funktion eben zwei Argumente an. Diese Werte können dann entweder aus einem anderen Zusammenhang übergeben werden oder eben von der Gui, indem sie vorher durch die Textauslese-Funktion deines Toolkits bspw in Strings umgewandelt werden.

Mit XML-RPC kenne ich mich nicht wirklich aus, aber ich nehme an, dein drittes Modul ist nur als API beim Client gedacht. Denn großartig selbst implementieren muss man ja dank Pythons xmlrpclib anscheinend nicht. Hier können natürlich genau so die vom Server bereitgestellten Funktionen genutzt werden wie von der Gui.

Verfasst: Freitag 20. Februar 2009, 14:43
von Hand
Die Gui muss halt mitbekommen dass von XMLRPC was geändert wurde.

Desswegen muss von der Logik zur Gui was gesendet werden,
und da bin ich mir nicht sicher was der bessere Weg ist.

Z.b. müssen in der GUI Buttons deaktiviert werden wenn z.B. die Steuerung kurzzeitig via XMLRPC übernommen wird.

Dies soll aber nur dann passieren wenn überhaupt eine GUI existiert.

Über Referenzen -> Referenz ist eventuell nicht verhanden -> Exception.
Über eine Message Queue -> Die Message läuft einfach ins leere.

Oder verstehe ich da was falsch?

Verfasst: Freitag 20. Februar 2009, 14:53
von Hyperion
Hand hat geschrieben:Die Gui muss halt mitbekommen dass von XMLRPC was geändert wurde.
Da muss man ja generell zwischen dem Pull- Uns Push-Prinzip unterscheiden!
Davor wäre es allerdings hilfreich, wie die genaue Architektur so aussieht? Soll das ganze nach dem Client-Server-prinzip aufgebaut sein? Oder handelt es sich "nur" um Interprozess-Kommunikation?
Desswegen muss von der Logik zur Gui was gesendet werden,
und da bin ich mir nicht sicher was der bessere Weg ist.
Klar, aber das kann ja nach Anfrage der "GUI" erfolgen! (Pull)
Z.b. müssen in der GUI Buttons deaktiviert werden wenn z.B. die Steuerung kurzzeitig via XMLRPC übernommen wird.
Das ist aber ja "Logik", die sich innerhalb der GUI befindet - und dort ja durchaus ihre Berechtigung hat.
Dies soll aber nur dann passieren wenn überhaupt eine GUI existiert.
Das führt uns vor allem zurück zur Architekturfrage ...