Wer viele PHP-Projekte entwickelt, kennt die Situation sicherlich: Es gibt verschiedene Features, die in fast jedem Projekt benötigt werden. Sei es das simple Kontaktformular, der Versand von E-Mails, der Einbau eines Cookie-Banners oder die Ausgabe eines Menüs. Beim Start eines neuen Projekts verfällt der Entwickler gerne in das typische Muster, sich schnell alles zusammenzukopieren und so lange anzupassen, bis es passt. Bei zwei oder drei zu betreuenden Projekten ist das noch überschaubar. Aber bei 20, 30 oder gar 100? Wie kann ich den Spamschutz des Kontaktformulars in Dutzenden Projekten verbessern, ohne jedes Projekt einzeln individuell anpassen zu müssen? Die Lösung liegt auf der Hand: wir bauen uns ein Modul, das simpel mit Composer in jedes Projekt gebracht werden kann. Mit Git können wir Releases taggen und somit unterschiedliche Versionen des Moduls bereitstellen. Automatisierte Tests helfen uns beim Sicherstellen der Funktionalitäten. Tolle Sache! Doch manchmal möchten wir Formulare auch mal im Browser anschauen und die HTML-Ausgabe anpassen. Dabei helfen Module, die eine kleine Mini-Anwendung mit sich bringen, die im Browser gestartet werden kann. Wie wir so etwas umsetzen können, zeigt dieser Vortrag.
4. 4 / 70
Wie entwickele ich ein
Wie entwickele ich ein
komplettes Modul*,
komplettes Modul*,
das in 20+ Websites
das in 20+ Websites
eingesetzt wird?
eingesetzt wird?
6. 6 / 70
Dies ist eine Geschichte
Dies ist eine Geschichte
voller Missverständnisse…
voller Missverständnisse…
Jede Ähnlichkeit mit real existierenden Projekten ist rein zufällig.
Jede Ähnlichkeit mit real existierenden Projekten ist rein zufällig.
17. 17 / 70
Und weiter
Bau noch mal zwei weitere
Kontaktformulare, die
funktionieren klasse!
18. 18 / 70
Ok, aber...
Beim letzten Mal gab es
Probleme beim Kopieren
der einzelnen Dateien. Ich
lagere das Formular in ein
Modul aus, das lässt sich
besser kopieren.
19. 19 / 70
Ergebnis
2x diverse Formular
Dateien in ein Modul
zusammenfassen.
Danach 2x Module
kopieren und anpassen.
21. 21 / 70
Und weiter
Ein neuer Kunde braucht
auch ein Kontaktformular!
Die Anfragen müssen aber
in einer Datenbank
gespeichert werden.
Los schnell! Zeit ist Geld!
22. 22 / 70
Ähm
Ich kopiere das Modul und
passe es für den Kunden
an. Nur welches Modul soll
ich nehmen?
25. 25 / 70
Noch weiter
Wir brauchen für unsere
eigenes Kontaktformular
nun auch das Datenbank
Dingsbums.
Los mach! Sofort!
26. 26 / 70
Idee!
Ich lagere das Modul in ein
Git Repository aus und
baue eine Konfiguration,
um Formularelemente und
Features konfigurieren zu
können.
27. 27 / 70
Ergebnis
Schon besser. Nun haben
wir nur noch ein Modul,
das individuell konfiguriert
und per Composer
installiert werden kann.
29. 29 / 70
Kein Ende
Wir bekommen viel zu viel
Spam über die Formulare.
Bau mal Spamschutz ein!
30. 30 / 70
Hah!
Ich passe das Modul im
Vendor Ordner an und
kopiere die Änderungen in
das Modul Repository.
Danach aktualisiere ich die
Projekte per Composer.
Was soll da schief gehen?
31. 31 / 70
Achtung
Bitte zuhause nicht
nachmachen! Jedes Mal,
wenn du im Vendor Ordner
herum pfuscht, stirbt ein
kleines Katzenbaby.
Jedes. Verdammte. Mal.
Lass das sein!
33. 33 / 70
Usw. usf.
Wir müssen die beiden
Kundenprojekte schnell
auf Bootstrap 5 umstellen!
Der Rest bleibt auf
Bootstrap 4. Das ist doch
kein Problem oder?
34. 34 / 70
WTF!
Ok, ich gebe auf und ziehe
nach Helgoland und züchte
Erdbeeren.
36. 36 / 70
Was ist hier
Was ist hier
passiert?
passiert?
37. 37 / 70
Clash of
Clash of
Gegensätze
Gegensätze
Nachhaltige
Nachhaltige
Entwicklung
Entwicklung
Kosten-/
Kosten-/
Zeitdruck
Zeitdruck
38. 38 / 70
»Premature optimization
is the root of all evil.«
– Donald Knuth –
»Don't repeat yourself!«
DRY-Prinzip
– Andy Hunt & Dave Thomas –
Clash of Principles
Clash of Principles