2009-12-28 4 views

Antwort

16

Dies ist ein praktikabler Ansatz. Tatsächlich verwenden einige Programmierer es für die Vorteile, die es bringt:

  • Modular Nicht-GUI-Code kann dann in mit verschiedenen GUIs gebunden werden, nicht nur eine einzige Bibliothek
  • Es kann auch für eine Kommando- verwendet werden line-Anwendung (oder eine Batch-Schnittstelle zu einem GUI one)
  • es kann
  • und vor allem für eine Web-Anwendung wiederverwendet werden: es kann Komponententests des Codes erleichtern.

Beachten Sie jedoch, dass es einige sorgfältige Planung erfordert. Sie möchten, dass Ihr "Logikcode" frei von GUI-Einschränkungen ist, und manchmal ist es schwierig (insbesondere wenn der Code auf GUI-Idiomen wie einer Ereignisschleife beruht).

+2

Es ermöglicht das Komponententest. Unit-Tests, wenn der Code mit der GUI verbunden ist, ist sehr schwierig. –

+0

ein häufiges Problem und eine gute Antwort –

2

Das hängt von der Problemdomäne ab. Ein Bildverarbeitungswerkzeug wäre ziemlich schwierig ohne Bezug auf eine GUI zu implementieren. Für die meisten Apps würde ich jedoch stark dafür eintreten, die beiden Teile zu trennen. Es ist viel einfacher, ein UI-freies Backend zu entwickeln, zu testen und weiterzuentwickeln. Die Vorteile werden die Kosten für die Definition einer sauberen API zwischen Front- und Back-End aufwiegen. In der Tat wird der Prozess der Definition der API insgesamt zu einem besseren Design führen.

+3

Haben Sie schon von ImageMagick gehört? Nur weil Sie Anweisungen wie "Zuschneiden auf X- und Y-Dimensionen" benötigen, müssen diese nicht von einer grafischen Benutzeroberfläche kommen. –

0

IMHO, das wäre eher eine bessere Idee. Um die zugrundeliegende Geschäftslogik nicht an die Benutzeroberfläche gebunden zu halten, ist ein besserer Ansatz, dass wir uns mehr Gedanken über die zugrundeliegende Logik machen können, als zu viel über die Schnittstelle zu verlieren.

Gleichzeitig ist es auch wichtig, ein grundlegendes Design für Ihre Schnittstelle zu haben, damit Sie eine Vorstellung davon haben, welche Art von Eingängen und Ausgängen beteiligt sind und die zugrundeliegende Logik eine Vielzahl von Eingängen unterstützt/Ausgänge oder einfach eine große Auswahl an Schnittstellen.

-1

Welchen Grad an Interaktivität benötigen Sie? Wenn Sie reichhaltiges Feedback und Interaktion benötigen, dann benötigen Sie ein OO-Programmmodell, dann können Sie die GUI über den Objekten anzeigen.

Wenn Sie nur Filter und Funktionen haben (keine echte Rückmeldung oder nur ein Ergebnisfenster), wäre eine Bibliothek oder ein Komponentenmodell besser.

In jedem Fall ist es besser, wenn Sie Ihre Logik getrennt von der GUI programmieren, damit Sie sie einfacher testen können.

-1

Wenn Sie an einen Befehlszeilenansatz gewöhnt sind, wäre dies eine schlechte Idee. Die Reaktion auf Benutzereingaben ist ein völlig anderes Paradigma, und Sie werden es beim ersten Mal wahrscheinlich nicht richtig finden.

Wenn Sie nur über den Unterschied zwischen WxPython und einer anderen GUI sprechen, machen Sie sich keine Sorgen.

1

Die Trennung der Benutzeroberfläche vom Engine-Code ist der unumstößliche Weg, dies zu tun, und es gibt eine Menge Vorteile, dies zu tun. Es resultiert in modularen wiederverwendbaren Programmen und Code, die gut mit anderen Programmen zusammenspielen und in eine größere Werkzeugkette passen.

Having said that, ein solcher Ansatz neigt dazu, den Wert der Schaffung einer wirklich brauchbaren UI Erfahrung. Es ist sehr schwierig und selten, dass das interne Modell eines Programms dem Benutzermodell entspricht, wenn Sie zuerst die Funktionalität des Programms und dann später die Benutzeroberfläche entwerfen. Daher müssen Sie die beiden Seiten impedanzübereinstimmen, nachdem Sie sie unabhängig voneinander erstellt haben. Dies führt entweder zu einem Kompromiss in der Benutzerfreundlichkeit (Ihr UI wird zu nichts mehr als einem Front-End zu den Befehlszeilenoptionen, die Ihr Programm benötigt) oder zu einer großen Klebeschicht zwischen der Benutzeroberfläche und dem Kernprogramm, die dazu neigt, unordentlich und fehlerhaft zu sein.

Wenn Ihr Programm in erster Linie dazu gedacht ist, interaktiv mit einem Benutzer durch eine Benutzerschnittstelle zu laufen, dann ist es wahrscheinlich sinnvoll, die Benutzerschnittstelle parallel zu Ihrer tatsächlichen Funktionalität zu gestalten.

So:

wäre es besser, das Programm in einer Weise vertraut, mir zu schreiben, dann gelten die WxPython gui es, nachdem ich mit dem Gesamtdesign der App zufrieden bin

Wenn Ihre Benutzerschnittstelle das Hauptmittel zur Bedienung Ihres Programms ist, dann ist diese Benutzerschnittstelle Teil des Programmentwurfs. Nicht etwas über das Programm zu malen, wenn es fertig ist.

+0

Sie sagen: "Es ist sehr schwierig und selten, dass das interne Modell eines Programms dem Benutzermodell entspricht", aber genau das sollten Sie anstreben. Das mentale Modell des Benutzers sollte nichts mit der Implementierung des Codes zu tun haben. –

+0

Ja, Sie sollten natürlich bestrebt sein, sie übereinstimmen.Ich sagte, es ist schwierig, wenn Sie das Back-End vor der Benutzeroberfläche. Was der Benutzer von Ihrer Benutzeroberfläche erwartet, wird sich sehr stark auf den benötigten Backend-Code auswirken. Ich sehe keinen Konflikt zwischen dem, was ich geschrieben habe und der Antwort, die du unten gegeben hast :) –

0

Da Sie neu in der GUI-Programmierung sind, ist Ihr Ansatz absolut gültig. Es wird wahrscheinlich zu einer weniger als optimalen Benutzeroberfläche führen, aber das ist jetzt in Ordnung. Und tatsächlich gibt es einige sehr erfolgreiche, mehrere Millionen Dollar teure kommerzielle Projekte, die auf diese Weise gebaut werden.

Es ist wohl ein besserer Ansatz, zunächst die Benutzeroberfläche zu entwerfen, da dies der wichtigste Teil ist. Danach können Sie ein Back-End erstellen, das diese Benutzeroberfläche unterstützt. Dieser Ansatz führt immer noch zu getrennten Front- und Back-Ends, legt aber den Schwerpunkt auf die Bedürfnisse des Nutzers, wo er sein sollte.

Verwandte Themen