Schritt 2: Vorstellung des Projekts

5.0 version
Maintained

Vorstellung des Projekts

Wir müssen ein Projekt finden, an dem wir arbeiten können. Es ist eine ziemliche Herausforderung, da wir ein Projekt finden müssen, das groß genug ist, um Symfony vollständig abzudecken, aber gleichzeitig auch klein genug sein sollte; ich möchte nicht, dass du dich langweilst während du ähnliche Funktionen mehrfach implementierst.

Enthüllung des Projekts

Da das Buch während der SymfonyCon Amsterdam veröffentlicht werden muss, wäre es schön, wenn das Projekt irgendwie mit Symfony und Konferenzen zu tun hat. Wie wäre es mit einem Gästebuch? Ein Livre d’or, wie wir auf Französisch sagen. Ich mag das altmodische und veraltete Gefühl, ein Gästebuch im Jahr 2019 zu entwickeln!

Wir haben es. Bei dem Projekt geht es darum, Feedback zu Konferenzen zu erhalten: eine Liste der Konferenzen auf der Homepage, eine Seite für jede Konferenz, voller schöner Kommentare. Ein Kommentar besteht aus einem kleinen Text und einem optionalen Foto, das während der Konferenz aufgenommen wurde. Ich schätze, ich habe gerade alle Spezifikationen aufgeschrieben, die wir brauchen, um loszulegen.

Das Projekt wird mehrere Anwendungen umfassen. Eine traditionelle Webanwendung mit einem HTML-Frontend, einer API und einem SPA für Mobiltelefone. Wie klingt das?

Lernen durch Handeln

Lernen durch Handeln. Punkt. Ein Buch über Symfony zu lesen ist schön. Noch besser ist es, eine Anwendung auf Deinem PC zu programmieren und gleichzeitig ein Buch über Symfony zu lesen. Das besondere an diesem Buch ist, dass alles getan wurde, damit Du es mitverfolgen, nachprogrammieren und sicher sein kannst, die gleichen Ergebnisse zu erzielen, die ich lokal auf meiner Maschine hatte, als ich es anfangs entwickelte.

Das Buch enthält allen Code, den Du schreiben, und alle Befehle, die Du ausführen musst, um das Endergebnis zu erhalten. Es fehlt kein Code. Alle Befehle stehen in diesem Buch. Dies ist möglich, da moderne Symfony-Anwendungen nur sehr wenig Boilerplate-Code haben. Der größte Teil des Codes, den wir zusammen schreiben werden betrifft die Geschäftslogik des Projekts. Alles andere ist weitgehend automatisiert oder wird für uns automatisch generiert.

Blick auf das endgültige Infrastrukturdiagramm

Auch wenn die Projektidee einfach erscheint, werden wir kein „Hello World“-ähnliches Projekt bauen. Außerdem werden wir nicht nur PHP und eine Datenbank verwenden.

Ziel ist es, ein Projekt mit einigen der Komplexitäten zu erstellen, die Du in auch der Praxis finden kannst. Du willst einen Beweis? Dann wirf einen Blick auf die endgültige Infrastruktur des Projekts:

../_images/infrastructure.svg

Einer der großen Vorteile der Verwendung eines Frameworks ist die geringe Menge an Code, die für die Entwicklung eines solchen Projekts benötigt wird:

  • 20 PHP-Klassen unter src/ für die Website;
  • 550 PHP Logical Lines of Code (LLOC) gemäß PHPLOC;
  • 40 Zeilen Konfigurationsanpassungen in 3 Dateien (über Annotations und YAML), hauptsächlich für das Design des Backends;
  • 20 Zeilen Konfiguration der Entwicklungsinfrastruktur (Docker);
  • 100 Zeilen Konfiguration der Produktivinfrastruktur (SymfonyCloud);
  • 5 explizite Environment-Variablen (Umgebungsvariablen).

Bereit für die Herausforderung?

Holen des Projekt-Quellcodes

Um auf altmodische Art und Weise fortzufahren, hätte ich einfach eine CD mit dem Quellcode erstellen können, oder? Wie wäre es aber stattdessen mit einem begleitenden Git-Repository?

Klone das Gästebuch-Repository irgendwo auf Deinem lokalen Rechner:

1
$ symfony new --version=5.0-4 --book guestbook

Dieses Repository enthält den gesamten Code aus diesem Buch.

Beachte, dass wir anstelle von git clone den Befehl symfony new verwenden, weil der Befehl mehr macht als einfach nur das Repository zu klonen (gehostet auf Github unter der the-fast-track Organisation: https://github.com/the-fast-track/book-5.0-4). Er startet auch den Webserver, die Container, migriert die Datenbank und lädt die Fixtures. Nach dem Ausführen des Befehls sollte die Website betriebs- und einsatzbereit sein.

Der Code ist zu 100% mit dem Code im Buch synchronisiert (verwende dafür die genaue Repository-URL, die oben aufgeführt ist). Der Versuch, Änderungen aus dem Buch manuell mit dem Quellcode im Repository zu synchronisieren, ist fast unmöglich. Ich habe es in der Vergangenheit versucht und dabei versagt. Es ist einfach unmöglich. Besonders für Bücher wie die, die ich schreibe: Solche, die Dir eine Geschichte über die Entwicklung einer Website erzählen. Da jedes Kapitel von den vorherigen abhängt, kann eine Änderung in allen folgenden Kapiteln Konsequenzen haben.

Die gute Nachricht ist, dass das Git-Repository für dieses Buch automatisch aus dem Buchinhalt generiert wird. Ja, Du hast richtig gelesen. Ich automatisiere gerne alles, deshalb gibt es ein Skript, dessen Aufgabe es ist, das Buch zu lesen und das Git-Repository zu erstellen. Dadurch entsteht ein schöner Nebeneffekt: Beim Aktualisieren des Buches schlägt das Skript fehl, wenn die Änderungen inkonsistent sind oder wenn ich es vergesse, irgendwelche Anweisungen zu aktualisieren. Das ist BDD, Book Driven Development!


  • « Previous Schritt 1: Prüfe Deine Arbeitsumgebung
  • Next » Schritt 3: Vom Nichts zum Produktivbetrieb

This work, including the code samples, is licensed under a Creative Commons BY-NC-SA 4.0 license.