Der Trend beim Design und der Entwicklung von Anwendungen scheint mit dem "Mut" zu beginnen: der Domäne, dann dem Datenzugriff, dann der Infrastruktur usw. Die grafische Benutzeroberfläche scheint normalerweise später im Prozess zu kommen. Ich frage mich, ob es jemals nützlich sein könnte, zuerst die GUI zu erstellen ...
Mein Grundgedanke ist, dass Sie durch die Erstellung mindestens eines GUI-Prototyps eine bessere Vorstellung davon bekommen, was hinter den Kulissen passieren muss, und so besser in der Lage sind, mit der Arbeit an der Domäne und dem unterstützenden Code zu beginnen.
Ich sehe ein Problem mit dieser Praxis darin, dass die GUI-Schicht nicht viel zu tun hat, wenn der unterstützende Code noch nicht geschrieben ist. Vielleicht bietet das Erstellen von Scheinobjekten oder Wegwerfklassen (ähnlich wie beim Unit-Testen) gerade genug Grundlagen, um die GUI anfangs aufzubauen.
Könnte dies eine realisierbare Idee für ein reales Projekt sein? Vielleicht könnten wir GDD (GUI Driven Development) zum Akronym Stable hinzufügen ...
quelle
Antworten:
Es ist eine gute Idee, schnelle GUI-Prototypen zu erstellen, und ich habe gehört, dass sie in vielen Projekten verwendet werden. Frühes Feedback ist in der Tat wertvoll. Es hat jedoch seine Gefahren:
Die Minderung dieser Risiken erfordert eine aktive Diskussion und möglicherweise Schulung Ihrer Benutzer und / oder Manager.
quelle
Das Problem, das ich dabei sehe, ist, dass das Ziel völlig rückständig zu sein scheint.
"Mein Grundgedanke ist, dass Sie durch die Erstellung mindestens eines GUI-Prototyps eine bessere Vorstellung davon bekommen, was hinter den Kulissen passieren muss, und so besser in der Lage sind, mit der Arbeit an der Domäne und dem unterstützenden Code zu beginnen."
Dies ist meiner Meinung nach der falsche Weg, eine Business-Schicht zu betrachten, und ein großartiger Weg, um ein schlechtes, nicht erweiterbares Design zu finden. Eine Datenschicht, die die Daten vollständig ausdrückt, kann in jeder Benutzeroberfläche verwendet werden. Eine Datenschicht, die für die Anforderungen einer bestimmten Benutzeroberfläche entwickelt wurde, kann möglicherweise nicht an andere Elemente angepasst werden, auch nicht an geringfügige Funktionserweiterungen dieser Benutzeroberfläche.
Die Erfahrung mit Systemen, von denen Sie sprechen, lässt mich zu dem Schluss kommen, dass die meisten Entwürfe, die diese Methodik verwenden, kurzlebig und / oder überkompliziert sind. Sie neigen auch dazu, eine Kopplung zwischen der Benutzeroberfläche und der Datenschicht herzustellen, die es niemals geben sollte.
Die Unabhängigkeit von Daten- und Benutzeroberflächenebene muss gefördert werden. Aus diesem Grund funktioniert es auf lange Sicht besser, die Datenschicht so aufzubauen, dass sie einfach die gesamten Daten darstellt, anstatt auf eine bestimmte Benutzeroberfläche abzielen zu müssen.
Der Bau eines Prototyps kann gut für das Sammeln und Vereinbaren von Anforderungen sein, sollte aber dann weggeworfen werden. Verwenden Sie im realen Produkt nichts aus dem Prototypcode.
quelle
Ich halte @ Péter zu Recht für eine gute Idee, GUI-Prototypen zu erstellen. Ich möchte die potenziellen Fallstricke ergänzen, die es mit sich bringen, die Benutzererfahrung rückwärts bereitzustellen, dh zunächst auf Ontologien, die Architektur und die Infrastruktur und zuletzt auf die unmittelbare Benutzererfahrung zu konzentrieren:
Sie machen den Mut und dann bekommt der Benutzer, was aus Ihren Annahmen hervorgegangen ist, während Sie sich mit den Bedürfnissen des Benutzers befassen und den Mut entsprechend aufbauen sollten. Die Leute machen es einfach anders herum, weil die Präsentation, mit der der Benutzer interagiert, von wo aus das Verhalten der Anwendung auf natürliche Weise in die Höhe sprudelt, der komplexeste Teil des Systems ist, der niemals vollständig erforscht wird oder der die Leute einfach nur sehr fühlen glücklich darüber, Dinge so zu bauen, dass sie vermieden werden, um tatsächlich darüber nachdenken zu müssen, warum / was / für wen sie es bauen. Das Errichten einer riesigen Struktur, die strukturell einwandfrei ist, ist ein Kinderspiel. Das Erfüllen der funktionalen (und ästhetischen) Bedürfnisse aller ist der schwierigste Teil.
Für jede craptastic Erfahrung, schrullig fließen, schlecht kollokiert Informationen fehlen offensichtlicher Funktionalität, Dinge , die einfach falsch sind, Instanzen , wenn Sie gebeten haben zu fragen , „nur das Genie kam mit bis dass ?“, Liegt etwas , das ignoriert, negiert oder offenbarte den Benutzer als die vorderste Front der Entwicklungsbemühungen.
quelle
Im Allgemeinen sollte das Modell vor der Ansicht entwickelt werden. Sobald Sie eine logische Grundlage für Ihre Anwendung haben, können Sie eine oder mehrere Ansichten dieses Modells erstellen (z. B. können Sie Daten in einer Tabelle oder einem Diagramm anzeigen). In der Regel ist das Modell wichtiger als die grafische Benutzeroberfläche. Dies gilt insbesondere für die Unternehmensentwicklung, bei der die grafische Benutzeroberfläche in der Regel standardmäßig ausgeführt wird.
Manchmal ist die grafische Benutzeroberfläche jedoch der wichtigste Teil der Anwendung. Manchmal möchten Sie Daten auf neuartige und spezifische Weise betrachten - und von dort aus nehmen und dann das Modell entwickeln. Zum Beispiel ist CashCurve eine solche Anwendung, bei der der Punkt in der GUI liegt, während das Datenmodell selbst ein langweiliger Standard ist, den jeder in wenigen Minuten modellieren kann. (Haftungsausschluss: Ich bin nicht mit CashCurve verbunden, sondern nur ein sehr zufriedener Benutzer.)
Dies ist auch für das Entwerfen von Webservices oder anderen APIs relevant - nur dort wird es als " Contract-First " -Design bezeichnet.
Also, für alles gibt es keine Regel, was zuerst zu entwerfen ist; Manchmal ist es Modell und manchmal ist es GUI. Als Faustregel würde ich "das Wichtigste zuerst entwerfen".
Es sind einige Vorsichtsmaßnahmen zu beachten, wenn Sie zuerst eine grafische Benutzeroberfläche entwerfen. Der Benutzer wird wahrscheinlich Probleme haben zu verstehen, dass die Anwendung noch lange nicht vollständig ist, wenn nur ein grafischer Prototyp vorhanden ist. Andere Antworten haben dies jedoch ziemlich gut abgedeckt, sodass ich nicht auf Details eingehen werde.
quelle
Ich denke, es ist eine sehr gute Möglichkeit, sich dem Anwendungsdesign zu nähern, insbesondere in einer agilen Entwicklungsumgebung. Die meisten der erfolgreichen Projekte, an denen ich gearbeitet habe, haben mit einem Prototyp begonnen, der schließlich zur Realität wurde.
Sie müssen verstehen, dass die GUI das Fenster in das System ist (z. B. Datenbank, Dateisystem usw.). In einer Situation, in der die Projektanforderungen ungefähr so vage sind wie ein Haufen Matsch, haben Sie keine Hoffnung auf eine korrekte Lösung, wenn Sie im Backend beginnen. Fast immer entwickelt der gut gemeinte Backend-Entwickler eine Reihe von APIs, die für Benutzerinteraktionen nicht relevant sind.
Durch das Starten auf der GUI erhält der Kunde eine bessere Vorstellung davon, was er möchte. In diesem Stadium entsteht aus der Entwicklung der grafischen Benutzeroberfläche (mit Hilfe von Mocks und Stubs) ein Domänenmodell. Dieses Domain-Modell kann dann auf das Backend übertragen werden und die Backend-Entwickler können mit der Entwicklung der Persistenz- und Transaktionslogik beginnen.
Und warum solltest du den Protoype wegwerfen? Wir haben es nicht mit Stadien zu tun, die aus Streichhölzern gebaut sind. Refactor das verdammte Ding in etwas Gutes.
quelle
Klingt für mich überhaupt nicht schlecht, wenn die Person, die auf die GUI schaut, versteht, dass es sich nur um eine Shell handelt und Schaltflächen und Prozesse buchstäblich nicht funktionieren (werfen Sie eine neue NotImplementedException ();)).
Wenn Sie sich an eine Architektur im MVC-Stil halten, sehe ich keine zukünftigen Wartungs- oder Konstruktionsprobleme voraus, da die "Ansicht" so etwas überhaupt nicht definiert. Die "Controller" und "Modelle" können später mit jeder Infrastruktur geliefert werden, die Sie für Skalierbarkeit, Design usw. benötigen.
Zeichnen Sie für die Verwaltung ein großes Kreisdiagramm mit 3 Teilen und bezeichnen Sie sie mit "M", "V" und "C". Geben Sie dem V ungefähr 20% und erklären Sie, dass der Rest des Kuchens "TBC" ist;).
quelle
In einem System mit angemessener Größe hängt das, was hinter den Kulissen geschehen muss, stark davon ab, wie die grafische Benutzeroberfläche aussieht. Die GUI gibt Ihnen nur einen Teil der Anforderungen. Es gibt oft viele Komponenten, die keine GUI haben.
Nach der Entwicklung des Systems sind möglicherweise zusätzliche Schnittstellen (einschließlich neuer GUIs) erforderlich. Das Verstehen und Implementieren der Geschäftsanforderungen ist entscheidend für den Erfolg.
Wenn das Entwerfen der GUI und anderer Eingabe- und Ausgabemechanismen zur Validierung des Modells beitragen kann. Attribute, die niemals ausgegeben werden, sind möglicherweise nicht erforderlich. (Es kann Gründe geben, sie beizubehalten, aber es wird wahrscheinlich Prüfungs- oder Regulierungsanforderungen geben.)
Wie bereits erwähnt, werden viele Kunden glauben, dass Sie fertig sind, sobald Sie eine funktionierende Benutzeroberfläche haben. Möglicherweise steckt jedoch keine Infrastruktur dahinter. Papierprototypen können eine gute Option zur Validierung des Layouts und Inhalts der GUI sein.
Vergessen Sie nicht, dass Sie möglicherweise die Benutzeroberfläche nach der Entwicklung anpassen müssen. Ich habe den Bericht über einen fehlerhaften Austausch der Checkout-Oberfläche für einen Checkout-Vorgang in fünf Schritten erhalten. Eine viel einfachere Benutzeroberfläche vermittelte den Benutzern kein angemessenes Sicherheitsgefühl und hatte eine viel geringere Abschlussrate. Hören Sie Speed Bumps: Die magische Zutat im Marketing .
quelle