Ist es besser, alles auf einmal zu tun? Ich bin sehr neu bei wxPython und ich denke, es wäre besser, das Programm in einer mir vertrauten Weise zu schreiben und dann die wxPython-GUI darauf anzuwenden, nachdem ich mit dem Gesamtdesign der App zufrieden bin. Irgendein Rat?Ist es eine schlechte Idee, ein Python-Anwendungs-Backend zu entwerfen und zu entwickeln und dann, wenn es einmal fertig ist, eine GUI darauf anzuwenden?
Antwort
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).
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.
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. –
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.
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.
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.
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.
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. –
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 :) –
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.
- 1. ist es eine schlechte idee, statische wpf wertwandler zu haben?
- 2. Ist es eine schlechte Idee, Versteckmethoden zu haben und verschiedene Methodenimplementierungen hinter verschiedenen Schnittstellen zu haben?
- 3. Was ist MongoDBs strikter Modus und ist es eine gute Idee zu verwenden?
- 4. Ist es eine gute Idee, Methoden zu Scala-Fallklassen hinzuzufügen
- 5. Ist es eine schlechte Übung, ein statisches Feld zu haben?
- 6. Ist es immer eine schlechte Idee + verwenden Strings verketten
- 7. Wie starte ich eine CompleableFuture ohne zu blockieren und etwas zu tun, wenn es fertig ist?
- 8. Ist es eine gute Idee, eine IDE für scala zu entwickeln?
- 9. Prism - Schlechte Idee, es zu benutzen?
- 10. Ist es möglich, eine Idee für Software zu verkaufen, ohne sie tatsächlich zu entwickeln?
- 11. Löscht ein Thread eine Sperre, wenn es fertig ist?
- 12. Ist es eine gute Idee, eine Python-Klasse zu hashen?
- 13. Ist es eine gute Idee, Fehler auf Eltern und dann Großeltern zu propagieren?
- 14. Ist es eine schlechte Idee, eine Eigenschaftentabelle in einer Datenbank zu haben?
- 15. Ist ini_set ('max_execution_time', 0) eine schlechte Idee?
- 16. Wann/warum ist es eine schlechte Idee, die Funktion fscanf() zu verwenden?
- 17. Ist es eine schlechte Übung, Variablen eines Callbacks zu spiegeln?
- 18. Ist es eine schlechte Übung, eine willkürliche Ausnahme zu werfen, wenn CancellationToken gesetzt ist?
- 19. Django: Ist es eine gute Idee, JS dynamisch zu generieren?
- 20. Ist es eine gute Idee, alte Schienen Migrationen zu reduzieren?
- 21. Ist es eine schlechte Übung, dynamische Arrays zu ändern, die darauf verweisen?
- 22. Ist * {position: relative} eine schlechte Idee?
- 23. Ist es eine gute Idee (tm), REST-Ideen zu verwenden, um "einige Dienste" von Grund auf zu entwickeln?
- 24. Ist es eine schlechte Idee, POD C-array mit std :: valarray zu ersetzen?
- 25. Ist es eine schlechte Übung, selbst in Decorators zu verwenden?
- 26. Ist es eine schlechte Übung, in $ _POST zu schreiben?
- 27. Ist es eine schlechte Idee, die Modelle in Verzeichnisse zu unterteilen?
- 28. Ist es eine schlechte Idee, * .orig Dateien mit einem hgignore zu ignorieren?
- 29. Ist es eine gute Idee, BootFaces & PrimeFAces zusammen zu verwenden?
- 30. Ist es eine gute Idee, NSNumberFormatterBehavior10_4 über NSNumberFormatterBehaviorDefault zu bevorzugen?
Es ermöglicht das Komponententest. Unit-Tests, wenn der Code mit der GUI verbunden ist, ist sehr schwierig. –
ein häufiges Problem und eine gute Antwort –