SlideShare ist ein Scribd-Unternehmen logo
1 von 43
Paketmanagement
für Champions ;-)
Matthias Pigulla – webfactory GmbH – 16.07.2014
 (Foto wf)
Gestatten: webfactory.
War stories
wfLib
Systemweite (eigene) Bibliothek im include_path
Bugs/BC breaks
machen viel auf
einmal kaputt
Was einmal drin ist,
können wir nur noch
schwer ändern.
PEAR_DB vs.
Zend_DB
Branches in Sync?
Composer to the rescue!
Schrittweiser Umbau in Pakete
Composer-Repo selbstgeschrieben in 11/2011
Es geht schnell und
leicht, für irgendwas ein
Paket anzulegen.
Dank .lock-File können wir gut
weiterentwickeln.
Basics
Ganz wichtig.
Ceci n‘est pas un paquet.
Wiederverwendung
!= Ctrl-C, Ctrl-V
Release Reuse Equivalence
Principle
The granule of reuse is the granule of
release. Only components that are
released through a tracking system can
be effectively reused. This granule is the
package.
Robert C. Martin: Granularity (1997)
http://www.objectmentor.com/resources/articles/granularity.pdf
Was ist die
Schnittstelle
(m)eines Pakets?
Schnittstellen-Dokumentation
Upgrading-Notes
Changelog
Extension points
composer.json, ...
Versionsnummern
Normal-wichtig.
Semantical Versioning
semver.org
Fun fact: Zwei von drei Teilnehmern der Online-Umfrage haben
noch nie davon gehört.
X.Y.Z
Major.Minor.Bugfix
Beseitigt ein Problem, ohne
dass dafür Änderungen am
eigenen Code notwendig sind.
Bugfix
Geiler Scheiß, den andere
bestimmt auch gerne hätten.
Feature
Neue oder strengere
Abhängigkeiten.
Feature.
Feature?
Feature!
Alles, was Änderungen an
existierendem Code erforderlich
macht.
Schlechte Idee.
~X.Y
Release-Policy
So mittel-wichtig.
Welche Major/Minor pflegen
wir noch?
Wann bringe ich eine neue Version?
Sofort, regelmäßig, beim Launch,
wenn es sich lohnt...?
Prinzipien des Paketdesigns
Interessant.
Aller guten Dinge sind drei.
Common Reuse Principle
The classes in a package are reused
together. If you reuse one of the classes
in a package, you reuse them all.
Robert C. Martin: Granularity (1997)
http://www.objectmentor.com/resources/articles/granularity.pdf
Common Closure Principle
The classes in a package should be
closed together against the same kinds
of changes. A change that affects a
package affects all classes in that
package.
Robert C. Martin: Granularity (1997)
http://www.objectmentor.com/resources/articles/granularity.pdf
Stable Dependencies Principle
The dependencies between packages in
a design should be in the direction of the
stability of the packages. A package
should only depend upon packages that
are more stable than it is.
Robert C. Martin: Stability(1997)
http://www.objectmentor.com/resources/articles/stability.pdf
Stability
Schwer zu ändern
Wenig Anlass für Änderungen
Wann sollte das
Design erfolgen?
Tools rund um Composer
Praktisch.
clue/graph-composer
github.com/clue/graph-composer
Satis
github.com/composer/satis
Toran Proxy
toranproxy.com
(kommerziell)
track.wf
Follow @webfactory
Depending
„Depending is an online tool to monitor
your PHP project dependencies. It shows
your project dependencies status, right
away after you're commiting new code
into your Github repository.“
– depending.in
Security Advisories Checker
security.sensiolabs.org/check
„Gemnasium parses your projects
dependencies and notifies you when new
versions are released or need to
updated.“
– gemnasium.com
Kopfschmerzen, weil...
1. Schnittstelle aus Versehen geändert
2. Schnittstelle absichtlich geändert
3. SemVer falsch angewendet
4. Zu wenig Planung und bewusstes
Paketdesign
TL;DR
Danke!
Dipl. Wirt. Inf. Matthias Pigulla
webfactory GmbH, Bonn
mp@webfactory.de
@mpdude_de
github.com/mpdude
webfactory.de/blog

Weitere ähnliche Inhalte

Empfohlen

PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...DevGAMM Conference
 

Empfohlen (20)

Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 

Package management for champions

Hinweis der Redaktion

  1. Wir helfen unseren Kunden dabei, individuelle Anwendungen zu entwickeln und langfristig erfolgreich zu betreiben. Das sind derzeit über 50 Kunden, teilweise mit eigenen Entwicklungsabteilungen, teils ganz ohne. Dabei stellen sich für uns natürlich einige praktische Probleme. Im Dezember durfte ich hier schon einen Vortrag dazu halten, wie sich Altanwendungen schrittweise auf Symfony2 migrieren lassen. Heute geht es um die Frage, wie wir eigenen Code langfristig wiederverwenden können.
  2. Branches: Nichts vergessen? Kein Cherry Picking möglich, wenn DB-Spezifisch API hängt davon ab, welche Version man nutzt
  3. Wofür packen wir Code in Pakete? Abstraktionsmechanismus, um Systeme auf größerer Ebene zerlegen und verstehen zu können
  4. Letztlich das Ziel der OOP Copy != Reuse, weil: Selbst für fixes verantwortlich Sei es nur, fixes von upstream zu kopieren Divergierende Änderungen? -> Endgültig eigener Code Am Anfang billig, langfristig (maintenance) teuer
  5. Nur Pakete, die einem kontrollierten Release-Prozess unterliegen, lassen sich sinnvoll wiederverwenden Wir können sehen, wenn neue Versionen verfügbar sind und diese in unser Produkt integrieren, wenn wir es für angemessen halten (oder für den Moment bei der alten Version bleiben) Damit das geht, müssen die einzelnen Versionen „offiziell“ sein und Versionsnummern o. ä. haben Release auf Ebene von Klassen nicht praktikabel -> Paket-Ebene.
  6. Wir müssen uns auf die Schnittstelle des Pakets verlassen können, nicht die Implementierung Wenn wir für jede neue Version die Implementierung betrachten müssen (oder sich die Schnittstellen ändern), werden wir nicht regelmäßig aktualisieren können -> kein echter Reuse. Generell: Alles, was meine Klienten wissen bzw. worauf sie sich verlassen Nicht relevant: Wie das Paket implementiert ist, d. h. welche anderen Pakete es evtl. „hinter den Kulissen“ nutzt Natürlich nur, wenn das nicht „nach außen“ leaked Also? „klassische“ API (Methodensignaturen, Klassennamen, ...) Alles? Nur @api? Protected-Methoden? Symfony-Controller: Namen der Parameter Bundles: Konfigurationsparameter, -defaults HTML-Struktur? Datenbank-Schema? Auch, wenn es Migrations gibt? Lizenzmodell? Sonstige Systemanforderungen oder Abhängigkeiten? Kann ein Upgrade oder eine Installation in Verbindung mit anderen Paketen ggf. unmöglich machen...
  7. Wir müssen uns auf die Schnittstelle des Pakets verlassen können, nicht die Implementierung Wenn wir für jede neue Version die Implementierung betrachten müssen (oder sich die Schnittstellen ändern), werden wir nicht regelmäßig aktualisieren können -> kein echter Reuse. Generell: Alles, was meine Klienten wissen bzw. worauf sie sich verlassen Nicht relevant: Wie das Paket implementiert ist, d. h. welche anderen Pakete es evtl. „hinter den Kulissen“ nutzt Natürlich nur, wenn das nicht „nach außen“ leaked Also? „klassische“ API (Methodensignaturen, Klassennamen, ...) Alles? Nur @api? Protected-Methoden? Symfony-Controller: Namen der Parameter Bundles: Konfigurationsparameter, -defaults HTML-Struktur? Datenbank-Schema? Auch, wenn es Migrations gibt? Lizenzmodell? Sonstige Systemanforderungen oder Abhängigkeiten? Kann ein Upgrade oder eine Installation in Verbindung mit anderen Paketen ggf. unmöglich machen...
  8. Ziel: Potenziellen Re-usern einen Überblick darüber verschaffen, Welche neuen Möglichkeiten/Bugfixes etc. sie bekommen Auf welche neuen Voraussetzungen sie sich einstellen müssen Welchen Änderungen/Anpassungen kommen mit einer neuen Version auf sie zu? Auf welche Erweiterungen wird der Maintainer Rücksicht nehmen, was sollte man besser nicht tun? Composer.json: z. B. PHP-Extensions Entscheidung  Lohnt sich ein Upgrade und wann machen wir es am besten?
  9. Lektion gelernt: Es spielt keine Rolle, ob das ein open source oder internes Paket ist, die Schmerzen bei Mißachtung sind die gleichen
  10. Wenn Versionsnummern willkürlich vergeben werden, muss ich für jede einzelne Version prüfen, ob/wie ich sie benutzen kann Sehr enge Vorgabe in composer.json, kleiner Lösungsraum für Solver Problem bei transitiven Deps: Wenn eine Version mal „zu offen“ war, geht Composer u. U. auf diese zurück, um dann eine inkompatible aktuelle Version der Dep zu installieren
  11. Lest das Dokument, ist einfach und schnell gelesen Erster Gedanke: „Was ist daran so neu/toll“? Nicht selbstverständlich. Also bei fremden Paketen prüfen, ob es eingehalten wird. Bei eigenen ausdrücklich dokumentieren, falls ja.
  12. Inkrement setzt nachfolgende Teile auf 0 zurück X = 0 „unstable“
  13. Beispiele: Neue Klassen/Teilsysteme Neue Konfigurationseinstellungen ...
  14. Gerade bei internen Pakten/Projekten: Es ist praktisch nie die Zeit/das Geld da, um ein laufendes Projekt „mal eben so“ auf eine neue Major zu heben, also macht man es nicht Damit behalten wir potenziell sehr lange Klienten auf alten Branches Damit wächst die Bereitschaft, sogar noch neue Features für alte Majors zu liefern Features u. U. nicht so einfach auf die neue Major zu übertragen -> passiert nicht -> Problem verschärft sich
  15. Beispiele: Neue Klassen/Teilsysteme Neue Konfigurationseinstellungen ...
  16. Gerade bei internen Pakten/Projekten: Es ist praktisch nie die Zeit/das Geld da, um ein laufendes Projekt „mal eben so“ auf eine neue Major zu heben, also macht man es nicht Damit behalten wir potenziell sehr lange Klienten auf alten Branches Damit wächst die Bereitschaft, sogar noch neue Features für alte Majors zu liefern Features u. U. nicht so einfach auf die neue Major zu übertragen -> passiert nicht -> Problem verschärft sich
  17. -
  18. Problem: Jede noch offene Version ist ein Branch Wo bringen wir Bugfixes an? Je mehr Branches, desto aufwändiger zu entscheiden Evtl. Bugfixes nicht einfach vorwärts zu portieren Jeden Branch muss man für ein Release einzeln betrachten, testen etc. Für wen mache ich das? Kenne ich meine Klienten? (Deptrack...?) Falls nein: Release Document o. ä. macht deutlich, was man erwarten darf. Empfehlung: Nur *Bugfix* auf begrenzter Anzahl alter Branches; neue Features immer nur auf dem *neuesten* Branch; Major Releases um jeden Preis vermeiden?
  19. Je schneller/öfter, desto mehr Branches potenziell (längerfristig) zu warten Wie lange muss ich mit @dev-Deps leben? Kann ich mich drauf verlassen, zum go-live eine „stable“-Version zu haben? Webfactory: Teils immer „sofort“; teils bei Entwicklung mit @dev arbeiten und dann zum Release taggen.
  20. Herausfinden, was wirklich funktioniert Reuse-Kandidat? API stabil?
  21. Wir wollen von so wenig wie möglich, davon aber so maximal wie möglich abhängen Zusammen gehört: Enge Kopplung Reuse (oft) zusammen
  22. Unhandlich (muss mehrere Deps verwalten) Schwierige Updates, wenn cross-package Version constraints
  23. Sind die Teile isoliert sinnvoll nutzbar? -> Aufteilen. Ungenutzte Klasse Evtl. neue Version (=Arbeit), die mich gar nicht interessiert Kann Release Cycles entkoppeln Kann Major-breaks begrenzen Aufteilung: Schlecht im Nachhinein machbar
  24. Wir wollen von so wenig wie möglich, davon aber so maximal wie möglich abhängen Zusammen gehört: Enge Kopplung Reuse (oft) zusammen
  25. Strategische Überlegung: Was ändert sich zusammen? Release-Aufwand begrenzen, der voraussichtlich durch eine Änderung verursacht wird Cross-Package-Upgrades/Deps vermeiden