Vorderseite zuerst oder Rückseite zuerst. Welches ist ein gutes Systemdesign-Verfahren?

30

Ich habe gerade einen Kunden, der mich auffordert, ein Einschulungssystem zu entwickeln. Dies ist das erste Mal, dass ich diese Art von Herausforderung habe. Die meisten der Software, die ich in der Vergangenheit erstellt habe, sind nicht so komplex.

Ich weiß, dass die meisten von Ihnen komplexe Software erstellt haben, ich möchte nur Ihren Rat dazu. Soll ich zuerst das Frontend oder das Backend designen?

Vielen Dank!

Hier ist eine Zusammenfassung eines Artikels, den ich vor einiger Zeit im Internet gefunden habe. Ich will nur teilen

http://www.skitoy.com/p/front-end-vs-back-end-developers-my-take/157

Front-End- und Back-End-Entwickler (meine Einstellung)

Meine persönliche Einstellung

Wieder ist es eine Frage des Trainings, einige allgemeine Schlaganfall-Verallgemeinerungen:

Front-End-Entwickler

  • In der Regel haben Sie keinen CS-Abschluss oder einen CS-Abschluss von einer Schule der 3. Klasse.
  • Arbeiten Sie in Sprachen, die Basic ähneln (siehe PHP ist Basic)
  • Visuelle Fähigkeiten beim Konvertieren von Photoshop-Dokumenten in CSS / HTML / etc.
  • Hohe Toleranz für iteratives Programmieren aufgrund typfreier Sprachen

Backend-Entwickler

  • Haben Sie einen CS-Abschluss oder viel Erfahrung
  • Gehen Sie systematischer vor, wenn es um Problemlösungen geht
  • Es macht nichts aus, Tage damit zu verbringen, das eine Objekt zu finden, das leckt
  • Versuche und baue Werkzeuge, um Probleme zu lösen
drexsien
quelle
2
smh, das ist der Grund, warum ich Leuten sage, dass ich ein Softwareentwickler oder ein Webentwickler bin.
Bitte
10
Was haben diese Verallgemeinerungen über Front- und Back-End-Entwickler mit der Frage zu tun?
Erik Reppen
Front-End-Entwickler! = Back-End-Entwickler, obwohl die meiste Zeit, Übergänge s / w sie weiter.
Abhinav Gauniyal
Ich denke, die einzig gültige Antwort hier wäre "Es kommt darauf an ..."
Oliver Weiler

Antworten:

43

Wenn Sie hinten anfangen und vorwärts gehen, laufen Sie Gefahr, den Kunden falsch zu verstehen. Da Sie Dinge erschaffen, die sie nicht leicht sehen und verstehen können, können sie nicht leicht prüfen, ob Sie die Anforderungen erfüllen. Dies bedeutet, dass Sie möglicherweise viel Arbeit verschwenden.

Wenn Sie von vorne beginnen und nach hinten gehen, laufen Sie Gefahr, dass der Kunde denkt, dass es fast geschafft ist, wenn Sie nur ein einfaches Formular auf dem Bildschirm zeichnen. Dann fragen sie sich vielleicht, warum es so lange dauert, da Sie es meistens in ein paar Tagen fertig hatten. Sie laufen auch Gefahr, sich selbst in eine Ecke zu malen, wenn Sie feststellen, dass Sie einige komplizierte Arbeiten ausführen müssen, um die Vorderseite mit der Rückseite zu verbinden, wenn ein geeigneteres Frontend einfacher gewesen wäre.

IMO, Sie sollten zuerst daran arbeiten. Schreiben Sie das vordere und das hintere Ende für jede Funktion im System zusammen. Dies gibt dem Kunden eine bessere Sichtbarkeit des Fortschritts und die Möglichkeit, "Nein, das habe ich nicht gemeint" zu sagen, ohne Sie zu sehr zu belasten.

Wenn es sich jedoch um ein sehr umfangreiches Projekt handelt, bei dem Sie die Serverhardware oder die Funktionen einer Software berücksichtigen müssen, auf die Sie sich verlassen (z. B. welche Datenbank Sie verwenden), sollten Sie sich zuerst über diesen Teil Gedanken machen.

Paul Butcher
quelle
Ich denke, das ist eine präzisere Erklärung. Aber wäre es besser, das Backend als erstes zu erstellen, da es meiner Meinung nach einfacher ist, das Frontend zu erstellen, wenn Sie ein gut strukturiertes Backend haben?
Drexsien
3
Wenn sie denken, dass das Frontend alles ist, können Sie Google erwähnen ...
10b0
1
Aus diesem Grund sollten Sie eine Modell-GUI erstellen, die Sie dem Client anzeigen und sagen: "Soll das Programm das Gleiche tun?". Sobald dies erledigt ist, können Sie es verwerfen und mit der Erstellung des Backends beginnen.
Gablin
1
+1. @andsien: Wenn du schon deine Meinung hast, warum hast du gefragt? Meiner Erfahrung nach hat Paul Recht, merkmalsgetriebene Entwicklung ist fast immer die bessere Strategie.
Doc Brown
3
@andsien: "Es ist einfacher, das Front-End zu erstellen, wenn Sie ein gut strukturiertes Back-End haben". IMHO, das ist ein gefährliches Missverständnis. Das Problem ist: Sie wissen nicht, ob Ihr Backend gut strukturiert ist, bis Sie es zum Erstellen von Funktionen für das Frontend verwendet haben.
sleske
9

Software hat viele Dimensionen, daher ist ein zu stark vereinfachtes Front-vs-Back eine schlechte Frage und es ist sehr, sehr schwierig, eine vernünftige und nützliche Antwort darauf zu finden.

Eine Ansicht ist die statische Struktur der Daten. In dieser Ansicht gibt es mindestens drei Dimensionen: Architekturebenen ("Front-to-Back"), Anwendungsfälle und Akteure sowie Kosten oder Risiken der Implementierung.

Eine Ansicht ist die dynamische Struktur der Verarbeitung. Auch für diese Ansicht gibt es mindestens drei Dimensionen.

Eine dritte Sichtweise sind die Architekturkomponenten, die auf natürliche Weise in Schichten unterteilt sind, Anwendungsfälle unterstützen und Kosten und Risiken aufweisen.

Ich könnte weitermachen, aber der Punkt ist dies.

Front-End- und Back-End-Entwickler (meine Einstellung)

Ist ungefähr die am wenigsten nützliche Möglichkeit, das Problem zu betrachten. Die eigentlichen Entwickler - und Ihre Meinung dazu - sind hier sehr, sehr wenig von Bedeutung. Was zählt, ist

  • Anwendungsfälle und Schauspieler

  • Logisches Datenmodell zur Unterstützung dieser Anwendungsfälle

  • Prozess, der als Teil des Anwendungsfalls ausgeführt wird

  • Komponenten, mit denen Sie die logischen und verarbeitenden Elemente des Anwendungsfalls erstellen.

Aus diesem Grund geben die meisten Leute an, dass Sie Ihr System nach User Story oder Anwendungsfall aufteilen müssen.

Machen Sie keine umfassenden Verallgemeinerungen über Menschen, die sich weiterentwickeln werden.

S.Lott
quelle
7

Weder. Was muss Ihre App können? Stellen Sie sicher, dass das heiße Ventil heißes Wasser liefert, das kalte Ventil kaltes Wasser liefert, dass das Wasser an erster Stelle fließt, dass Sie die Rohre nach Bedarf verlängern können, und sorgen Sie sich dann darum, dass alle Räume des Hauses tatsächlich mit Wasser versorgt werden sieht eigentlich genau so aus.

Das vordere Ende ist nur eine Maske mit einigen Schaltern und Hebeln. Das Back-End ist nur eine Sache, die Anfragen zum Abrufen und Verarbeiten von Daten empfängt. Erreichen Sie einen Punkt, an dem Sie beide in einer beliebigen Kombination schnell implementieren können.

Aber was auch immer Sie tun, lassen Sie nicht zu, dass das Design des einen das Design des anderen bestimmt. So liegt der Wahnsinn.

Stellen Sie die Tools bereit, mit denen Ihre Entwickler alles bauen können, was sie für Ihre Kunden benötigen, unabhängig davon, wie oft sie es sich anders überlegen. Dann baue es nach Vorgabe und starte es neu, bis die kleinen Flüche endlich glücklich sind.

Auch der Vergleich von Front-End-Entwicklern mit Back-End-Entwicklern im Jahr 2008 ist in den Webjahren lange her. Aus Spaß möchte ich ein paar Dinge zu dieser alten Kastanie korrigieren / hinzufügen, da wir sie in der Frage verlinkt haben, aber auch (hoffentlich) ein paar Tipps einbetten:

Front-End-Entwickler

In der Regel haben Sie keinen CS-Abschluss oder einen CS-Abschluss von einer Schule der 3. Klasse.

Handzeichen. Wie vielen Personen mit CS-Abschluss wurden Best Practices am Frontend beigebracht? Oder wie man kein Chaos mit JavaScript anrichtet? Oder wie man mit CSS-Problemen von IE6-IE9 umgeht? Die Schulbuchbranche, die im akademischen Bereich tätig ist, ist zu faul und aufgebläht, um mit ständig wechselnden Technologien fertig zu werden, sodass sie an den Hochschulen nur sehr wenig „ernsthafte“ Aufmerksamkeit erhält. Dies war hervorragend für Spätzünder wie mich.

Arbeiten Sie in Sprachen, die Basic ähneln (siehe PHP ist Basic)

Weil PHP clientseitige Technologie ist? Oder weil JavaScript, das in erster Linie von Scheme inspiriert wurde, mehr mit Basic zu tun hat als Visual Basic, das jetzt im Front-End keine Rolle mehr spielt und für .NET-Back-End-Webanwendungen nie wirklich verfügbar war, aber immer noch verfügbar ist? Der Blog vergleicht autodidaktische Open-Source-Webentwickler mit CS-Webentwicklern, die an dieser Stelle, wie ich denke, beliebte Technologien für Unternehmen einsetzen. Ich bin auf beiden Seiten dieses Kampfes zu gleichen Teilen auf unerträgliche und kompetente Menschen gestoßen, aber er ist immer noch so weit wie möglich.

Visuelle Fähigkeiten beim Konvertieren von Photoshop-Dokumenten in CSS / HTML / etc.

Mehr Liebe zum Detail als "visuelle Fähigkeiten", die ein bisschen breit sind. Nicht jeder von uns hat irgendwelche ästhetischen Designfähigkeiten. Aber ja, die meisten von uns müssen dieses Zeug auf der Junior-Ebene lernen, und es ist ziemlich wichtig, eine gute Benutzeroberfläche zu schreiben, die keine JS-Hämmer verwendet, wenn CSS-Skalpelle funktionieren.

Hohe Toleranz für iteratives Programmieren aufgrund typfreier Sprachen

Aus diesem Grund möchten Sie die Stücke, die ich zuvor erwähnt habe, zuerst platzieren. Wir geben die gedrückten Knöpfe weiter, Sie produzieren / holen die Ware ab. Wir verpacken und liefern sie. Es gibt keinen Grund dafür, dass diese Dinge in irgendeiner Weise eng miteinander verbunden sind. Tatsächlich sollte strenges Tippen einen iterativen Prozess nicht stören, wenn Sie nicht an OOP saugen, was die meisten Leute, die eine Sprache hochmütig finden möchten, die technisch keinen Unterricht hat, in der Tat normalerweise tun. Aber selbst wenn sie stinken, braucht das Front-End nur einen vorhersehbaren Zugangspunkt und Sie können alles tun, was Sie wollen, solange Sie nicht dumm sind, dynamisch JavaScript zu schreiben, das nicht JSON oder Binden Sie erfolgreiches Back-End-Verhalten eng an die HTML-Struktur, die "nur so" ist. * Husten * Java-Entwickler * / Husten *

Erik Reppen
quelle
Ich bedaure nur, dass ich Ihre Frage nicht mehr als einmal beantworten kann. Es ist eine Schande, dass ich zwei Antworten auf diese Frage nach unten scrollen musste, um endlich die zu finden, in der es heißt, dass die Frage nach der Reihenfolge, in der Vorder- und Rückseite entwickelt werden sollen, die falsche Frage ist. Ich stimme auch Ihrer Meinung zum CS Degree zu. Und die abschließende Bemerkung "Spätzünder".
Shivan Dragon
5

Darauf gibt es keine eindeutige Antwort. Beide Ansätze können in bestimmten Situationen gut (und schlecht) sein.

Ich empfehle Ihnen, den TDD-Ansatz in Betracht zu ziehen, bei dem man sich von (Akzeptanz- und Einheits-) Tests leiten lässt.

Stellen Sie zunächst ein Grundgerüst des Systems zusammen: die Basisinfrastruktur mit der absoluten Mindestfunktionalität. Dies soll nur zeigen, dass Ihr Konzept funktioniert und die verschiedenen Komponenten zusammenarbeiten können. Dies beinhaltet auch eine Bare-Bones-Benutzeroberfläche (falls zutreffend), die gerade ausreicht, um tatsächlich etwas Minimales zu tun und / oder zu zeigen.

Anschließend konkretisieren Sie die Details Feature für Feature : Schreiben Sie einen Akzeptanztest für ein bestimmtes Feature / Szenario, lassen Sie ihn fehlschlagen, und schreiben Sie dann Code, um ihn zu erfüllen. Dadurch arbeiten Sie von außen nach innen : Das System empfängt eine Eingabemeldung. Sie müssen diese Meldung also verarbeiten / konvertieren, etwas damit tun und die Ergebnisse dann an die Benutzeroberfläche weitergeben. Unterwegs entdecken Sie die Domänenkonzepte und stellen sie mit neuen Klassen dar, von der Benutzeroberfläche bis zur Domänenschicht und zurück.

Für diesen Ansatz wird empfohlen, objektorientierte Software zu entwickeln, die von Tests geleitet wird .

Péter Török
quelle
1

API zuerst

Ingenieure beider Teams sollten an der API zwischen dem Front-End und dem Back-End zusammenarbeiten. Dann können beide Teams mit der entworfenen API arbeiten. Dies hat den Vorteil, dass auch ein anderes Front-End-Team mit der Arbeit beginnen kann (möglicherweise mobil, nach dem Web-Client), und den offensichtlichen Vorteil, dass Teams parallel arbeiten können.

Kombiniere mit einem iterativen Ansatz und sollte so aussehen:

  1. Entwerfen Sie eine einfache API
  2. Beide Teams entwickeln und testen auf Basis der API
  3. Integrationstest
  4. Zeigen Sie dem Kunden und erhalten Sie Feedback.
  5. API verbessern und wiederholen.
m3th0dman
quelle
0

Beginnen Sie mit dem Frontend, aber zuerst, warum können sie keine Anwendung finden, die bereits existiert? Dies würde weitere Einblicke in dieses Projekt geben. Haben sie spezielle Anforderungen oder glauben sie, dass Sie billiger bauen können?

Verschaffen Sie sich einen umfassenden Überblick über die Sicherheitserwartungen und die gesetzlichen Anforderungen. Ich bin mir nicht sicher, um welche Art von Schule es sich handelt, aber die Informationen der Schüler erfordern normalerweise ein gewisses Maß an Vertraulichkeit.

Wenn die potenziellen Studenten die Daten auf einer Website eingeben, wird das grafische Design ein größeres Problem sein.

Zeichnen Sie auf der Grundlage ihrer Anforderungen Modelle für das Front-End. Wenn Sie der Meinung sind, dass die GUI nicht direkt ist, müssen Sie möglicherweise etwas Funktionales erstellen, damit sie es in Aktion sehen können. Sie sehen die Registrierung möglicherweise als eine Art "Assistent", der je nach Dateneingabe in verschiedene Richtungen verzweigt.

Dann können Sie damit beginnen, Informationen dauerhaft in die Datenbank zu übertragen.

JeffO
quelle
1
Das Problem beim Starten mit dem Front-End (basierend auf der Erfahrung) ist, dass, wenn Sie einige Funktionen vergessen, es Ihr Back-End durcheinander bringen kann und Sie
möglicherweise
1
@andsien - redest du über das Entwerfen oder Bauen? Ich würde nicht anfangen, ein Front-End zu erstellen, ohne zuerst das Back-End zu entwerfen.
JeffO
Ich denke darüber nach, etwas zu bauen ... danke für diesen Jeff.
Drexsien
0

Ja, ich habe festgestellt, dass das OP vor einiger Zeit gefragt hat. Beginnen Sie am hinteren Ende, aber VERSPERREN Sie das vordere Ende, damit der Benutzer sehen kann, was Sie sich vorstellen. Das vordere Ende, für alles, was es wert ist, ist nur die Glocken und Trillerpfeifen. Das Back-End ist, wo das Geld ist, und wenn Sie das gerade haben, ist die FE nur die Soße über dem Fleisch.

Fabasard
quelle
Leider ist es das, was Kunden normalerweise wollen, aber ich denke, ein solches Verhalten sollte entmutigt werden. Lassen Sie sie nicht auf dem Bildschirm hängen und bleiben Sie bei Ihren Prototyp-Looks, bis sie überprüfen können, ob sie das grundlegende Verhalten haben, das sie wollten. Kunden sind oft nicht in der Lage, Augenweide von nützlichen Funktionen zu trennen, und sie werden viel Zeit mit den weniger wichtigen Dingen verschwenden, nur um Ihnen die Schuld zu geben, wenn die App auf lange Sicht in ihrer endgültigen Absicht versagt.
Erik Reppen
@ErikReppen Ich habe diese Erfahrung oft gemacht - ich wollte dem Kunden zeigen, dass "der Benutzer Daten in ein Textfeld eingibt" und der Kunde sieht, dass das Formularfeld genau 400 Pixel breit und die Seite hellblau ist Hintergrund mit Arial 11pt Text ... "Aber ich denke immer noch, es ist besser, als niemals ein Frontend zu testen. Andernfalls ist es möglich, ein gesamtes System zu erstellen, das im Hauptanwendungsfall einer nicht angegebenen Annahme widerspricht.
30.
Sie können ein Front-End demonstrieren, aber schlicht und einfach halten. Holen Sie sie aus dem Photoshop genaue Dummheit, es sei denn, sie verlangen, dass es ihnen verkauft wird. Und darin liegt das Problem. Es ist das, was sie erwartet haben, aber sie sind meistens zu dumm, um Pixel zu priorisieren.
Erik Reppen
ähm, ist das nicht der Grund, warum wir CSS haben? (obwohl ich es fühle deinen Schmerz). Ich habe immer & absichtlich ein hässliches, aber funktionales FE & mache deutlich, dass wir Use Cases, Workflow ... diskutieren & kann es später verschönern. (aber die wahre Antwort ist Anforderungen-> Datenbank-> FE)
Mawg
0

Erweitere meinen Kommentar:

Sammeln Sie zuerst Anforderungen und setzen Sie sie dann in Use Cases & Design um.

Zuerst folgt eine detaillierte Datenbankdefinition. Es ist mir egal, ob der Kunde es nicht vollständig auslotet, ich zwinge ihn, sich hinzusetzen und es anzuschauen - und sich abzumelden (möglicherweise zwinge ich ihn dann zu erkennen, dass einer ihrer technisch versierteren Jungs dies tun sollte ), bevor Sie fortfahren.

Wie kann man mit FE anfangen, ohne BE? FE für was ??? Definieren Sie Ihre Datenbank !! Das manipuliert die FE.

Ok, es wird Probleme und spätere Optimierungen geben, und ich tun damit einverstanden , dass es gut ist , so schnell wie möglich eine einfache, Probe, GUI vor dem Klienten zu erhalten, da diese bestimmte Spitze des Eisbergs ist , was die meisten die meisten verstehen.

Ich 1) betone jedoch, dass dies nur ein grobes Mock-up für Schweinswale ist, und 2) mache es absichtlich hässlich, aber funktional , so dass diejenigen, die es nicht verstehen, mir sagen können, dass ich das Eingabefeld genau 400px machen soll der Hintergrund hellblau.

Ich bin der Meinung, dass die meisten Antworten hier (und ich habe sie befolgt) sich zu sehr auf den Kunden konzentrieren, aber aus rein s / w-Sicht behaupte ich, dass man eine FE nicht entwerfen kann, um ein BE zu manipulieren, ohne vorher Entwerfen, dass BE.

Mawg
quelle
"Sie können keine FE entwerfen, um eine BE zu manipulieren, ohne diese BE zuerst zu entwerfen". Oh ja, das können Sie - das nennt man einen "Prototyp". Dies kann ein wertvoller erster Schritt beim Starten eines neuen Systems sein.
sleske
Was ist Prototyping? Kein Flammenkrieg, er ist mir nur in den Kopf gesprungen. Ich verstehe, was ein Prototyp ist, aber vielleicht, weil ich aus einem anderen Bereich stamme, sehe ich es immer als: Anforderungen erfassen, in Anwendungsfälle verwandeln und gestalten. Wenn Sie Ihr D / B nicht festgenagelt haben, werden Sie viel zu viel unnötige Nacharbeit leisten, also sortieren Sie es zuerst und finden Sie dann heraus, wie Sie es manipulieren können (gemäß den Anforderungen). YMMV ... Fortsetzung ...
Mawg
Es ist wohl nicht schwarz-weiß, sonst wäre die Frage nicht gestellt worden, aber SEIEN Sie zuerst immer IMO. Tatsächlich mache ich das gerade auf diese Weise für Kunden, die nur ein vages, verschwommenes Gefühl anstelle von Anforderungen haben (ich hätte sie nie anfassen sollen, aber das ist eine ganz andere Geschichte :-)
Mawg
1
Nach meiner Erfahrung sollten die Benutzeranforderungen an erster Stelle stehen und die Architektur sollte folgen. Aber das hängt natürlich von den technischen Details ab, manche Dinge sind später in der Tat schwer zu ändern. Zumindest ist es wichtig, sich der Kompromisse bewusst zu sein.
sleske
Ich vermute, dass wir dasselbe auf unterschiedliche Weise sagen (+1)
Mawg