Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Meine ehrliche Symfony-Anwendung

Meine ehrliche Symfony-Anwendung

Du hast die letzten Jahre bei verschiedenen Talks viel über Architektur, Testing, Komponenten und Pattern gehört. Natürlich hast du auch viel über Symfony gelernt und die Buzzwords sind in Schwärmen an dir vorbei in ferne Länder gezogen. Aber was bleibt übrig, wenn man wieder im Büro ohne Hypes und gestylte Slides eine Symfony-Anwendung hochziehen muss? Über die letzten Jahre habe ich viele Projekte und Teams kennengelernt und unterschiedlichste Ansätze, Probleme und Lösungen gesehen. In diesem Talk will ich euch meinen Weg Symfony-Anwendungen zu bauen zeigen. Es wird leider nicht so shiny und fancy, sondern realistisch und pragmatisch. Nehmt die Sonnenbrille ab und holt den Notizblock raus.

Christopher Hertel

September 26, 2019
Tweet

More Decks by Christopher Hertel

Other Decks in Programming

Transcript

  1. @el_stoffel SymfonyLive Berlin 2019 Was bedeutet "ehrliche Anwendung"? Realismus Hype-Driven-Development

    Komplexität Pragmatismus Flexibilität Stabilität Wartbarkeit vermeiden maßvolle
  2. @el_stoffel SymfonyLive Berlin 2019 Christopher Hertel Consultant & Trainer @

    SensioLabs in Berlin Symfony & Twig Certified Developer iSAQB Certified Software Architect @el_stoffel Symfony User Group Berlin
  3. @el_stoffel SymfonyLive Berlin 2019 • 4 Jahre • 10 PHP-/Symfony-Projekte

    • 800.000 LLOC • 40 Trainings & Workshops • 75 + 300 Entwickler*innen
  4. @el_stoffel SymfonyLive Berlin 2019 Konzept Umsetzung Prozess Team Software Entwicklung

    Software Architektur Workshops OOP & Clean Code Best Practices Pair Programming Testing Dokumentation Code Review Trainings Wissenstransfer Continuous Deployment Turnover Onboarding
  5. @el_stoffel SymfonyLive Berlin 2019 Was bedeutet "ehrliche Anwendung"? Realismus Hype-Driven-Development

    Komplexität Pragmatismus Flexibilität Stabilität Wartbarkeit vermeiden maßvolle
  6. @el_stoffel SymfonyLive Berlin 2019 Agenda • Struktur der Anwendung •

    Software Architektur • Testing • Prozess Typische Fallstricke Best Practices
  7. @el_stoffel SymfonyLive Berlin 2019 Konzept Umsetzung Prozess Team Software Entwicklung

    Software Architektur Workshops OOP & Clean Code Best Practices Pair Programming Testing Dokumentation Code Review Trainings Wissenstransfer Continuous Deployment Turnover Onboarding
  8. @el_stoffel SymfonyLive Berlin 2019 Struktur der Anwendung application docker lib-x

    lib-y project Repository Repository Repository Repository Repositories
  9. @el_stoffel SymfonyLive Berlin 2019 Struktur der Anwendung application docker lib-x

    lib-y project Repository Go Monorepo.org Repositories
  10. @el_stoffel SymfonyLive Berlin 2019 Struktur der Anwendung • Versionierung &

    Autorisierung • keine Trennung von Anwendungsteilen • vermeidet Git-Puzzles • Go Monorepo Developer Experience Repositories
  11. @el_stoffel SymfonyLive Berlin 2019 Struktur der Anwendung ApiBundle CoreBundle ExportBundle

    InfrastructureBundle src PaymentBundle • Symfony Extension Point • keine Domain-Trennung benutzt Namespaces Go Mono-Bundle oder Bundleless Bundles
  12. @el_stoffel SymfonyLive Berlin 2019 Struktur der Anwendung ApiBundle CoreBundle ExportBundle

    InfrastructureBundle src PaymentBundle CoreBundle Api Export Infrastructure src Payment ApiBundle CoreBundle ExportBundle InfrastructureBundle PaymentBundle Bundles Mono-Bundle
  13. @el_stoffel SymfonyLive Berlin 2019 Struktur der Anwendung ApiBundle CoreBundle ExportBundle

    InfrastructureBundle src PaymentBundle Api Export Infrastructure src Payment ApiBundle CoreBundle ExportBundle InfrastructureBundle PaymentBundle Kernel.php Bundles Bundleless
  14. @el_stoffel SymfonyLive Berlin 2019 Struktur der Anwendung ApiBundle CoreBundle ExportBundle

    InfrastructureBundle src PaymentBundle Command Export Controller src Api … Bundles Controller & Commands
  15. @el_stoffel SymfonyLive Berlin 2019 Struktur der Anwendung Namespaces src Command

    Controller Entity Form Helper Service Twig Utils Symfony Acme Service CartService.php ImportService.php ProductService.php UserService.php 10K LLOC
  16. @el_stoffel SymfonyLive Berlin 2019 Struktur der Anwendung Namespaces src Command

    Controller Entity Form Helper Service Twig Utils Symfony Acme Service CartService.php ImportService.php ProductService.php UserService.php
  17. @el_stoffel SymfonyLive Berlin 2019 Struktur der Anwendung Namespaces src Command

    Controller Entity Form Helper Service Twig Utils Symfony Acme Service User Product Import Cart
  18. @el_stoffel SymfonyLive Berlin 2019 Struktur der Anwendung Namespaces src Command

    Controller Entity Form Helper Service Twig Utils Symfony Acme Service User Factory.php Registration.php Removal.php Product Import Cart
  19. @el_stoffel SymfonyLive Berlin 2019 Struktur der Anwendung Namespaces src Command

    Controller Domain Entity Form Helper Twig Utils Symfony Acme Domain User Factory.php Registration.php Removal.php Product Import Cart
  20. @el_stoffel SymfonyLive Berlin 2019 Struktur der Anwendung • prominente Symfony

    Namespaces 1st-Level • splittet mächtige Service-Klassen • vermeidet generische strukturelle Namespaces Namespaces bessere Wartbarkeit bessere Orientierung
  21. @el_stoffel SymfonyLive Berlin 2019 Konzept Umsetzung Prozess Team Software Entwicklung

    Software Architektur Workshops OOP & Clean Code Best Practices Pair Programming Testing Dokumentation Code Review Trainings Wissenstransfer Continuous Deployment Turnover Onboarding
  22. @el_stoffel SymfonyLive Berlin 2019 Software Architektur • Online Transactional Processing

    • abgeschlossene kleine Transaktionen • Transaktion / Request • viele Requests & viele Nutzer OLTP Häufiger Usecase bei Webseiten
  23. @el_stoffel SymfonyLive Berlin 2019 Software Architektur • Online Analytical Processing

    • aufwändigere Queries über viele Datensätze • Reporting • wenige Nutzer OLAP Meistens nachgelagert
  24. @el_stoffel SymfonyLive Berlin 2019 HTTP-Request View Controller Domain Use Case

    Entity Services Services Persistence Transaktion Software Architektur
  25. @el_stoffel SymfonyLive Berlin 2019 HTTP-Request View Controller Domain Use Case

    Entity Services Services Persistence Software Architektur
  26. @el_stoffel SymfonyLive Berlin 2019 Software Architektur Controller OrderCreatedEvent SubmitCheckoutHandler SubmitCheckoutCommand

    OrderCreatedListener ClaimStockCommand ClaimStockHandler StockClaimedEvent StockClaimedListener ChargePaymentCommand ChargePaymentHandler …
  27. @el_stoffel SymfonyLive Berlin 2019 Software Architektur • 1-zu-1-Kopplung an Controller

    / Command • zentralisiert Ausführung der Operationen • Integration-Layer • Transaktionssteuerung Use Case
  28. @el_stoffel SymfonyLive Berlin 2019 Software Architektur • Fokus auf strukturierten

    Daten • einfach implementiert oder generiert • keine (kaum) Logik • potentiell invalide Anemic Domain Models
  29. @el_stoffel SymfonyLive Berlin 2019 Software Architektur • Fokus auf strukturierten

    Daten • einfach implementiert oder generiert • keine (kaum) Logik • potentiell invalide Anemic Domain Models
  30. @el_stoffel SymfonyLive Berlin 2019 Software Architektur • strukturierten Daten und

    Logik • immer valider Zustand • definieren State-Transitionen • sehr gut testbar Rich Domain Models
  31. @el_stoffel SymfonyLive Berlin 2019 Software Architektur • strukturierten Daten und

    Logik • immer valider Zustand • definieren State-Transitionen • sehr gut testbar Rich Domain Models
  32. @el_stoffel SymfonyLive Berlin 2019 Konzept Umsetzung Prozess Team Software Entwicklung

    Software Architektur Workshops OOP & Clean Code Best Practices Pair Programming Testing Dokumentation Code Review Trainings Wissenstransfer Continuous Deployment Turnover Onboarding
  33. @el_stoffel SymfonyLive Berlin 2019 Testing Unit Tests Service Tests UI

    Tests billig & schnell langsam & teuer Isolation Integration
  34. @el_stoffel SymfonyLive Berlin 2019 Testing Unit Tests Service Tests UI

    Tests Domain Services Services Persistence Controller Use Case Entity Logik möglichst tief in Domain + Unit Tests
  35. @el_stoffel SymfonyLive Berlin 2019 Konzept Umsetzung Prozess Team Software Entwicklung

    Software Architektur Workshops OOP & Clean Code Best Practices Pair Programming Testing Dokumentation Code Review Trainings Wissenstransfer Continuous Deployment Turnover Onboarding
  36. @el_stoffel SymfonyLive Berlin 2019 Prozess Entwicklung • Klar definierter Scope

    • Abgestimmte Umsetzung • Pair Programming • Boy-Scout-Rule
  37. @el_stoffel SymfonyLive Berlin 2019 Prozess Entwicklung Pull Request • Zuerst

    selbst reviewen • reviewbare PRs – klein oder Commit-Splittung • gebt Kontext
  38. @el_stoffel SymfonyLive Berlin 2019 Prozess Entwicklung Pull Request Pipeline •

    Linting & Validation • Code Style • Statische Analysen • Tests
  39. @el_stoffel SymfonyLive Berlin 2019 Prozess Entwicklung Pull Request Pipeline •

    Linting & Validation • Code Style • Statische Analysen • Tests
  40. @el_stoffel SymfonyLive Berlin 2019 Prozess Entwicklung Pull Request Pipeline Review

    • ihr seid ein Team • Software-Qualität im Fokus • redet drüber • lernt voneinander
  41. @el_stoffel SymfonyLive Berlin 2019 Prozess Entwicklung Pull Request Pipeline Review

    • schneller Durchfluss muss möglich sein • Vorbedingung für Continuous [D|I] • Kopplung von Prozess, Produktivität und Frustration
  42. @el_stoffel SymfonyLive Berlin 2019 Struktur der Anwendung • erkennbare Symfony-Struktur

    • Kapselung der Domain nach Use Cases • Logik möglichst tief in Domain-Objekten • Unit-Testing der Domain-Objekte • Pipeline und Reviews im Entwicklungsprozess Recap