Forum: PC-Programmierung Schnittstelle zwischen Konsolenanwendung und GUI


von Mathias B. (matthiasbuerkle)


Lesenswert?

Hallo Zusammen,

ich arbeite an einem kleinen Programm, das ich in C# (Visual Studio 2010 
Ultimate) schreibe. Bislang habe ich das Hauptprogramm und die GUI in 
einem Programm.
Der Artikel "Linux ist nicht Windows" aus dem Embedded Projects Journal 
Ausgabe 5 hat mich allerdings auf die Idee gebracht, das Programm selbst 
von der GUI zu trennen.

Momentan habe ich aber noch keine Vorstellung, wie ich das am Besten 
bewerkstellige.

Vielleicht hat jemand Tipps oder Informationsquelle hierfuer.

Vielen Dank schon mal im Vorraus

Mathias

von Tobi (Gast)


Lesenswert?

Hallo,

such mal nach IPC (inter-process communication).

Gruss,
Tobi

von Sven P. (Gast)


Lesenswert?

Mathias B. schrieb:
> Der Artikel "Linux ist nicht Windows" aus dem Embedded Projects Journal
> Ausgabe 5 hat mich allerdings auf die Idee gebracht, das Programm selbst
> von der GUI zu trennen.
Hervorragende Idee!

> Momentan habe ich aber noch keine Vorstellung, wie ich das am Besten
> bewerkstellige.
Was tut das Programm denn?

Kleines Brainstorming:

In der *nix-Welt gibt es da eine Vielzahl von Varianten. Schau dir K3B 
an, das Brennprogramm für KDE: Das ist im Wesentlichen eine GUI für eine 
ganze Reihe von Programmen (Image erstellen, brennen, Transkodieren, 
Vergleichen). Teilweise wird schlicht die Standardausgabe dieser 
Programme aufgefangen und verarbeitet (cdrdao), andere brauchen garkeine 
Ausgabe, sondern nur Eingaben (geht dann bequem mit 
Kommandozeilenschaltern).

Du müsstest klären, was und in welcher Art zu zwischen Programm und GUI 
kommunizieren musst. Vielleicht ist die Trennung ja doch garkeine so 
gute Idee. Wenn als Backend nachher ein Programm zurückbleibt, welches 
nur etwas Datei-I/O macht, wars halt der falsche Weg. Auch sollte es 
nicht dazu führen, dass du redundanten Code programmierst, denn daran 
scheitert es oft.
Das passiert zum Beispiel, wenn man umfangreiche Eingabemasken 
auslagert. Einerseits muss das Backend immer noch robust sein, denn man 
soll es ja auch ohne GUI verwenden können. Andrerseits soll die GUI auch 
interaktiv sein und nicht erst beim Abschicken Eingabefehler finden.

Manche Programme bieten auch einen Schalter an, um die Ausgaben in einer 
Art zu erzeugen, die leicht wieder von Programmen geparst werden kann.

Bei anderen Projekten liegt der Programmkern in einer 
Programmbibliothek. Dann gibt es eben zwei UI dafür, eines mit 
Klickibunti (GUI) und eines für die Konsole (CLI, command line 
interface).

Du könntest auch, wie Tobi schon schreibt, klassisch IPC nehmen. Das ist 
unter Windows zugegebenermaßen manchmal ätzend. Unter Unix mach ich ein 
Socket auf und gut ist. Das erfordert dann aber wieder ein 
Kommunikationsprotokoll...

von Matt B. (mattb)


Lesenswert?

Hallo Tobi und Sven,

ich habe mir in letzter Zeit immer wieder Gedanken ueber das Trennen der 
GUI von der Anwendung gemacht.
Ich bin dann zu dem Entschluss gekommen, dass es in meinem Fall eher 
keine Sinn macht die beiden Teile zu trennen. Mein Programm ist hierfuer 
einfach zu klein.

Trotzdem vielen Dank fuer eure Tipps!

Mathias

von Rolf Magnus (Gast)


Lesenswert?

Eine ganz andere Möglichkeit ist auch, die Funktionalität in eine 
Bibliothek auszulagern, für die du dann ein Kommandozeilen- und ein 
GUI-Frontend schreibst.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.