SymfonyWorld Online 2020
100% online
30+ talks + workshops
Live + Replay watch talks later

Stap 2: Inleiding van het project

5.0 version
Maintained

Inleiding van het project

We hebben een project nodig om aan te werken. Dat is een hele uitdaging, omdat we een project moeten vinden dat groot genoeg is om Symfony grondig te behandelen, maar tegelijkertijd klein genoeg is dat je je niet verveelt door telkens dezelfde functionaliteit te moeten implementeren.

Onthulling van het project

Omdat het boek moet worden uitgebracht tijdens SymfonyCon Amsterdam, zou het leuk zijn als het project op de een of andere manier gerelateerd is aan Symfony en conferenties. Is een gastenboek een idee? Een “livre d’or”, zoals we in het Frans zeggen. Ik hou van het ouderwetse en verouderde gevoel van het ontwikkelen van een gastenboek in 2019!

We hebben het. Het project draait om het krijgen van feedback op conferenties: een lijst met conferenties op de homepage, een pagina voor elke conferentie, vol met leuke opmerkingen. Een opmerking bestaat uit een kleine tekst en een optionele foto die tijdens de conferentie is gemaakt. Ik geloof dat ik net alle specificaties heb opgeschreven die we nodig hebben om te beginnen.

Het project zal verschillende toepassingen bevatten. Een traditionele webapplicatie met een HTML-frontend, een API en een SPA voor mobiele telefoons. Klinkt goed toch?

Leren is doen

Leren is doen. Punt uit. Het lezen van een boek over Symfony is leuk. Het bouwen van een applicatie op jouw computer tijdens het lezen van een boek over Symfony is nog beter. Dit boek is heel bijzonder, omdat er alles aan is gedaan om je mee te laten doen, te coderen en er zeker van te zijn dat je dezelfde resultaten krijgt als ik lokaal op mijn machine had toen ik het in eerste instantie codeerde.

Het boek bevat alle code die je dient te schrijven en alle commando’s die uitgevoerd moeten worden om het eindresultaat te krijgen. Er ontbreekt geen code. Alle commando’s zijn opgeschreven. Dit is mogelijk omdat moderne Symfony-toepassingen zeer weinig “boilerplate code” hebben. Het grootste deel van de code die we samen zullen schrijven gaat over de bedrijfslogica van het project. Al het andere is grotendeels geautomatiseerd of wordt automatisch voor ons gegenereerd.

Een blik op het uiteindelijke infrastructuurdiagram

Ook al lijkt het projectidee eenvoudig, we gaan geen “Hello World”-achtig project bouwen. We gebruiken niet alleen PHP en een database.

Het doel is om een project te creëren met een aantal van de complexiteiten die je in het echte leven zou kunnen vinden. Wil je bewijs? Bekijk de uiteindelijke infrastructuur van het project:

../_images/infrastructure.svg

Eén van de grote voordelen van het gebruik van een framework is de kleine hoeveelheid code die nodig is om een dergelijk project te ontwikkelen:

  • 20 PHP-classes onder src/ voor de website;
  • 550 PHP Logical Lines of Code (LLOC) zoals gerapporteerd door PHPLOC ;
  • 40 regels zijn aangepast in 3 configuratiebestanden (via annotations en YAML), voornamelijk om de backend te configureren;
  • 20 regels voor de configuratie van de ontwikkelingsinfrastructuur (Docker);
  • 100 regels voor de configuratie van de productie-infrastructuur (SymfonyCloud);
  • 5 expliciete omgevingsvariabelen.

Klaar voor de uitdaging?

De broncode van het project verkrijgen

Om verder te gaan met het ouderwetse thema had ik een CD kunnen maken met de broncode, toch? Maar in plaats daarvan, wat dacht je van een Git-repository?

Clone het gastenboek ergens op jouw lokale machine:

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

Deze repository bevat alle code van het boek.

Let wel dat we symfony new gebruiken in plaats van git clone, omdat dat laatste commando niets meer doet dan alleen het klonen van de repository (gehost op Github onder de the-fast-track-organisatie: https://github.com/the-fast-track/book-5.0-4 ). Het start ook de webserver, de containers, migreert de database, laadt de fixtures, … Na het uitvoeren van het commando zou de website operationeel moeten zijn, klaar voor gebruik.

De code is 100% gegarandeerd synchroon met de code in het boek (gebruik de exacte repository-URL zoals hierboven vermeld). Proberen om handmatig wijzigingen uit het boek te synchroniseren met de broncode in de repository is bijna onmogelijk. Ik heb het in het verleden geprobeerd. Ik heb gefaald. Het is simpelweg onmogelijk. Zeker voor het soort boeken dat ik schrijf: boeken die een verhaal vertellen over het ontwikkelen van een website. Aangezien elk hoofdstuk afhankelijk is van de vorige, kan een wijziging gevolgen hebben voor alle volgende hoofdstukken.

Het goede nieuws is dat de Git-repository voor dit boek automatisch gegenereerd wordt op basis van de inhoud van het boek. Dat heb je goed gelezen. Ik hou ervan om alles te automatiseren, dus er is een script dat als taak heeft om het boek te lezen en de Git repository te maken. Dat geeft een leuk neveneffect: bij het bijwerken van het boek zal het script falen als de wijzigingen niet consistent zijn, of als ik vergeet een aantal instructies bij te werken. Dat noemen we BDD, Book Driven Development!


  • « Previous Stap 1: Jouw werkomgeving controleren
  • Next » Stap 3: Van nul naar productie

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