1. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
Code Quality
webconia Technology Conference
Vortrag von: Nico Flemming
2. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
1. Was ist Code Quality und wozu ist das gut?
2. Best practices
3. SOLID principle
4. Ausblick
Inhalt
22.10.2019 1
3. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 2
80% der Lebenszeit einer Software entfällt auf Wartung
• Leichte Wartbarkeit, Änderungen weniger aufwändig
• Unkompliziert
• Gleichbleibende Qualität
• Unabhängig davon, wer den Code geschrieben hat
• Leichte Einarbeitung neuer Entwickler
• Weniger Fehleranfällig
• Erweiterbarkeit
• Skalierbarkeit
• Portierbarkeit
Warum ist Code Quality wichtig?
4. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 3
Guter Sourcecode:
• Spart Zeit (beim Debugging, in der Wartung)
• Spart dadurch Geld
• Spart Nerven (Fehler werden schneller gefunden)
• Ist schön anzusehen
Warum ist Code Quality wichtig?
5. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 4
• Syntaktisch korrekt
• Perfekt strukturiert
• Verständlich kommentiert
• Konsistent
• Sinnolle Namensgebung bei Properties, Methoden, Klassen
• Nutzung von Designpattern
• Vermeidung von Fehlern durch schlechtes Design
Woran erkenne ich guten Code
6. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 5
Best practice: Nomen est Omen
Was ist an dem Namen dieser Konstante problematisch?
7. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 6
Best practice: Nomen est Omen
• Obergrenze oder Untergrenze?
• Max 14?
• Oder 15 erlaubt, aber nicht 16?
• MIN/MAX immer inkl.
8. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 7
Best practice: Konstanten nutzen
Was ist an diesem Ausdruck problematisch?
9. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 8
Best practice: Konstanten nutzen
• Niemand weiß, was „2“ bedeutet
• Konstante spiegelt die Bedeutung wider, nicht den Wert
• Single Source (“2“ kann geändert werden)
10. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 9
Best practice: Konstanten nutzen
Was ist an diesem Beispiel
problematisch?
Wie könnte man es besser
machen?
11. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 10
Best practice: Konstanten nutzen
• Lesbarer (Feldnamen
könnten c1, c2, c3 sein)
• Single Source (Feldnamen
könnten sich ändern)
• Wartbarer
12. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 11
• Spezifikation der Datentypen in Methodensignaturen
• Typensicherheit
• Vermeidung von Typisierungsfehlern
• Ungarische Notation überflüssig (oOrder, iAmount, aShippingMethods)
Best practice: Type Hints
13. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 12
• Spezifikation der Return-Datentypen
• Typensicherheit für Aufrufer
• Vermeidung von Typisierungsfehlern
• Verantwortung für Abfangen von
Fehlern in Klasse durch Exceptions
• Entweder Klasse liefert Page zurück
• Oder wirft eine Exception
Best practice: Explicit Return Types
14. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 13
• Was ist Codestyle
• Lesbarkeit und Wartbarkeit
• Maximierung von Verständlichkeit und Wartbarkeit von Sourcecode
• Codestrukturen sehen einheitlich aus
• Codestrukturen sehen ordentlich aus
• Zurechtfinden auch in fremden Sourcecode
Best practice: Warum Codestyle
15. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 14
Best practice: Keep it simple
• Hohe zyklomatische Komplexität
• Tiefe Verschachtelung
• Redunante action (“return null“)
• Unübersichtlich
• Fehleranfällig
16. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 15
Best practice: Keep it simple
Early Exit:
• Nur eine Verschachtelungsebene
• Übersichtlicher
• Nachvollziehbarer
17. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 16
Best practice: Keep it simple
Early Exit:
• Redundanzvermeidung
• Kurz
• Funktion sofort ersichtlich
18. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 17
Bad practice: Auskommentieren von Code
• Unübersichtlich
• Fehlerträchtig
• Relevante Änderungen nur a einkommentierten
Code gemacht
• Jemand könnte Code wieder einkommentieren
• Oft Indikator dafür, das Funktion unklare
logische Fehler verbirgt
• Unnötig
• Git History
• Funktion sofort ersichtlich
19. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 18
Bad practice: Verdächtige Tastaturgeräusche
Tastaturgeräusche über Zeiträume von mehr als 30 Sekunden, die sich
rhythmisch wiederholen
• von Hand erledigt, was durch ein Script erledigt würde
• Verursacher weiß elementares nicht, z.B. wie man in einer IDE mehrere
Zeilen auf einmal auskommentiert
Besser: Script schreiben, Massenfunktionen des Editors nutzen
20. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 19
• Sammlung Prinzipien objektorientierten Designs
• Von Robert C. Martin (Clean Code Bewegung)
• gutes objektorientiertes Design
1. Single Responsibility
2. Open-Closed
3. Liskov Substitution
4. Interface Segregation
5. Dependency Inversion
• Z.b. Bestandteil der Magento2 Development Guidelines
SOLID Principle
21. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 20
• Eine Klasse soll nur eine einzige Verantwortung haben
SOLID: Single Responsibility Prinzip
22. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 21
• Offen für Extensions, geschlossen für Modifications
SOLID: Open - Closed
23. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 22
SOLID: Liskov Substitution Principle
• Parent Klassen durch deren Child
substituierbar
• Programmcode soll weiterhin
funktionieren
• Schema für gute Klassenstrukturen
24. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 23
• Vermeidung zu großer Interfaces
• Entstehen oft im Laufe der Zeit
• Alle Klassen müssen sämtliche Methode implementieren, auch unnötige
• Zu Allgemein
• Interface “CoffeeMachine“ implementiert durch FilterCoffeeMachine
• Methode „Mache Kaffee“
• Ergänzung einer EspressoCoffeeMachine
• Ergänzung Methode „Mache Espresso“ in Interface und Klasse
• Alle CoffeeMachines müssen „Mache Espresso“ implementieren
• Besser neues Interface EspressoMachine welches von CoffeeMachine erbt
SOLID: Interface Segregation Principle
25. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 24
• Kopplungsfreie Klassenmodell
• Implementieren gegen Interfaces statt gegen konkrete
Implementierungen
SOLID: Dependency Inversion Principle
27. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 26
• Lasst uns alle versuchen, guten Sourcecode zu schreiben
• bei Codereview auf Anwendung Design Principles
• Über bestmögliche Variante nachdenken
Ausblick
28. Click to edit Master title style
Click to edit Master subtitle style
webconia Technology Conference
Nico Flemming
22.10.2019 27
Vielen Dank!
Editor's Notes
Sinnvoll kommentiert, Code never lies
Unlesbar
Abhängig vom Interface – wenn sich Feldnamen ändern muss Sourcecode geändert werden
Fehleranfällig (Reihenfolge)
Nur eine Verantwortung, nicht um mehrere Aufgaben kümmern
Vermeidung von hoher Kopplung zwischen den einzelnen Methoden
Klasse soll erweitert werden können
Core Teil darf in Vererbungen nicht verändert werden
Controller hat wissen über Implementieren (Ausgabemedium File)
Anderer Logger htte zum Beispiel Methde „writeToDatabase“
Logger nicht austauschbar ihne Controller zu ändern