Fallback Image

Clean Coding in Laravel

In einer fremden Umgebung findet man sich schwer zurecht – genauso ist es mit fremdem Code. Als IT-Entwicklungsdienstleister arbeiten bei uns aber immer Teams aus mehreren Expert:innen an unseren Projekten. Und daher muss unser Code jederzeit für alle nachvollziehbar und leicht zu überblicken sein. Die Prinzipien des Clean Codings helfen uns dabei.

Was ist Clean Coding?

Clean Coding bezeichnet Praktiken in der Softwareentwicklung, die darauf abzielen, den Code sauber, gut organisiert und leicht verständlich zu halten. Tools und Kernprinzipien helfen dabei, die Komplexität zu managen und die Wartbarkeit von Software zu erhöhen. Unsere Erfahrung zeigt, dass ein sauberer Code die Fehleranfälligkeit reduziert und die Effizienz der Entwicklungsprozesse steigert. Wir setzen auf Tools wie Larastan und Laravel Pint, um die Einhaltung dieser Praktiken zu unterstützen und sicherzustellen, dass unser Code nicht nur funktionell, sondern auch zukunftssicher ist. So entwickeln wir skalierbare und robuste Webanwendungen, die langfristig schnell und sicher funktionieren.  

2 Tool-Tipps unseres PHP-Teams

PHPStan/Larastan

PHPStan ist ein Code-Analyse-Tool, das die gesamte Codebasis scannt und mögliche Fehler durch Überprüfung von Rückgabetypen, Typ-Hinweisen usw. aufspürt. Larastan ist, wie der Name schon sagt, nichts mehr als eine Laravel-Implementierung oder besser gesagt ein Wrapper des PHPStan für Laravel.

Abbildung 1: Entwickler hat Fehler gemacht

Fallback Image

Abbildung 2: Erwarteter Output, wenn alles in Ordnung war

Fallback Image

Laravel Pint

Laravel Pint basiert auf PHP-CS-Fixer, ist jedoch speziell auf die Bedürfnisse und Konventionen von der Entwicklung mit Laravel zugeschnitten. Mit Pint wird Code automatisch einheitlich formatiert, was die Lesbarkeit und Wartbarkeit des Codes verbessert. 

Abbildung 3: Unformatierter Code, Pint noch nicht ausgeführt

Fallback Image

Abbildung 4: Formatierter Code, Pint wurde ausgeführt

Fallback Image

3 Grundlegende Prinzipien von Clean Coding

1. Einfachheit (Simplicity)

Wir halten Code so einfach und lesbar wie möglich, damit er leicht verständlich ist und reduzieren so die Fehleranfälligkeit. Das bedeutet, wir vermeiden Abstraktionen, schreiben kurze Funktionen und achten darauf, dass jede Code-Komponente nur eine klar definierte Aufgabe hat. Langfristig können wir, aber auch Dritte, so besser mit dem Code arbeiten. 

Abbildung 5: Eine Funktion, die bereits viel zu viel versucht. Sie sollte in 3 Teile umstrukturiert werden: 
1. Erstellung eines Unternehmens
2. Anlegen einer Adresse
3. Kontakt anlegen
Jeder dieser Teile sollte so einfach wie möglich gehalten werden, um Fehler leichter zu erkennen.

Fallback Image

Abbildung 6: Umgeschriebene Funktion von oben, bei der der CompanyService entscheidet, was mit der Anfrage zu tun ist, und die einfacher zu lesen ist als zuvor. Was mit Adressen, Kontakten usw. zu tun ist, ist Businesslogik und wird als solche von der Steuerung in die zugrunde liegenden Funktionen verlagert.

Fallback Image

2. Benennung (Naming)

Eine konsistente und durchdachte Benennung fördert die Verständlichkeit und erleichtert uns auch die Navigation und das Debugging innerhalb des Codes. Manchmal erscheint es auf den ersten Blick aufwendig, Variablen, Funktionen und Klassen aussagekräftig zu benennen. Aber gerade, wenn man wie wir langfristig mit einem Code arbeitet und Projekte weiterentwickelt, spürt man schnell die Vorteile einer guten Naming-Praxis.

Abbildung 7: Benannte Funktion, aber nicht gut genug. Beachte auch den „Fehler“ im Code. Er ist nicht so leicht zu erkennen, weil wir nicht wissen, was diese Funktion eigentlich berechnen muss :)

Fallback Image

Abbildung 8: Ein etwas besseres Beispiel, aber immer noch nicht gut genug.

Fallback Image

Abbildung 9: Bestes Beispiel, das auch den nächsten wichtigen Punkt der sauberen Codierung zeigt: Wiederverwendbarkeit. „Point“ kann auch in anderen Teilen des Codes verwendet werden.

Fallback Image

3. Wiederverwendbarkeit (Reusability)

Wir gestalten Softwarekomponenten so, dass sie in unterschiedlichen Kontexten oder Projekten ohne wesentliche Änderungen genutzt werden können. Laravel Contracts (Interfaces) und Dependency Injection helfen uns, die Businesslogik von den Controllern zu entkoppeln und dieselbe Logik bei Bedarf an mehreren Stellen wiederzuverwenden. Indem Entwickler:innen ihre Anwendungen auf diese Interfaces statt auf konkrete Implementierungen ausrichten, wird der Code entkoppelt und deutlich flexibler. Dies ermöglicht nicht nur eine einfachere Wartung und bessere Testbarkeit durch die Verwendung von Mock-Objekten in Testszenarien, sondern erhöht auch die Wiederverwendbarkeit des Codes. 

Durch die Verwendung von Laravel Contracts und Dependency Injection wird so eine robuste, flexible und modularisierte Softwarearchitektur gefördert, die eine breite Wiederverwendbarkeit und Austauschbarkeit der Komponenten ermöglicht.

Fazit

Clean Coding ist nicht nur eine Reihe von Techniken; es ist eine Philosophie, die das Fundament für die Entwicklung hochqualitativer Software legt. Bei byte5 hat sich dieser Ansatz als unerlässlich erwiesen, um die Herausforderungen moderner Webentwicklung effektiv zu meistern. Durch die konsequente Anwendung von Werkzeugen wie Larastan und Laravel Pint sowie die Einhaltung grundlegender Prinzipien wie Einfachheit, sorgfältige Benennung und Wiederverwendbarkeit, schaffen wir eine Codebasis, die nicht nur funktional stark und leicht wartbar ist, sondern auch die Zusammenarbeit in Teams und die Kommunikation mit Kunden vereinfacht. 

Dieser ganzheitliche Ansatz ermöglicht es uns, robuste und flexible Webanwendungen zu entwickeln, die auch zukünftigen Anforderungen standhalten können. Indem wir Clean Coding-Praktiken in den Mittelpunkt unserer Entwicklungsprozesse stellen, sichern wir langfristig die Qualität unserer Projekte und die Zufriedenheit unserer Kunden.

Klarheit und Ordnung in Ihrem Code?

Wir beraten Sie gern zur Optimierung Ihres Webprojekts.

Jetzt anfragen