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

Verantwortungsvoller Umgang mit Software-Paketen

Verantwortungsvoller Umgang mit Software-Paketen

Talk auf der SymfonyLive am 04.05.2018

Matthias Pigulla

May 04, 2018
Tweet

Other Decks in Technology

Transcript

  1. Verantwortungsvoller Umgang
    mit So ware-Paketen
    Ma hias Pigulla – webfactory.de
    SymfonyLive, 4. Mai 2018

    View Slide

  2. webfactory.de/uncle-
    bob-papers

    View Slide

  3. Release/Reuse Equivalency Principle
    (REP)
    The granule of reuse is the granule of release.
    Only components that are released through a
    tracking system can effectively be reused.
    This granule is the package.
    — Robert C. Martin

    View Slide

  4. Release macht
    Code zum Produkt

    View Slide

  5. Zeitliche
    Entkopplung

    View Slide

  6. Schni stelle,
    nicht Implementierung

    View Slide

  7. X.Y.Z
    1.2.0, 2.17.47, ...
    semver.org

    View Slide

  8. !
    .
    "
    .

    View Slide

  9. @trigger_error(
    'Raider heißt jetzt Twix',
    E_USER_DEPRECATED
    );

    View Slide

  10. Schni stelle?

    View Slide

  11. Transitive Abhängigkeiten

    View Slide

  12. $client = $this->fetchAcmeApiClient();
    try {
    $client->addToCart(...);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
    ...
    }

    View Slide

  13. Strategisches
    Paketdesign

    View Slide

  14. Common Reuse Principle (CRP)
    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

    View Slide

  15. View Slide

  16. Common Closure Principle (CCP)
    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

    View Slide

  17. View Slide

  18. Acyclic Dependencies Principle (ADP)
    The dependency structure between packages must be a
    directed acyclic graph (DAG). That is, there must be no
    cycles in the dependency structure.
    — Robert C. Martin

    View Slide

  19. View Slide

  20. View Slide

  21. View Slide

  22. Tools!

    View Slide

  23. clue/graph-composer
    github.com/clue/graph-composer

    View Slide

  24. maglnet/ComposerRequireChecker
    github.com/maglnet/ComposerRequireChecker

    View Slide

  25. webfactory/baton
    github.com/webfactory/baton
    baton.test.webfactory.de

    View Slide

  26. ! "

    View Slide

  27. View Slide