Designfrage: Gui und XMLRPC mit Logik verknüpfen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Hand
User
Beiträge: 65
Registriert: Sonntag 28. Januar 2007, 14:28

Freitag 20. Februar 2009, 10:30

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.
Benutzeravatar
snafu
User
Beiträge: 5459
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Freitag 20. Februar 2009, 12:37

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.
shcol (Repo | Doc | PyPi)
Hand
User
Beiträge: 65
Registriert: Sonntag 28. Januar 2007, 14:28

Freitag 20. Februar 2009, 14:43

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?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Freitag 20. Februar 2009, 14:53

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 ...
Antworten