$30 off During Our Annual Pro Sale. View Details »

Design Patterns In The Real World

Design Patterns In The Real World

Le slide del mio ultimo talk sui Design Pattern durante il Meetup di Marzo del PUG Catania.

Si tratta di alcuni case-study che mi è capitato di incontrare durante la “vita di tutti i giorni” (da sviluppatore ovviamente) e che ho trattato applicando uno dei pattern della GoF.

In particolare gli esempi all’interno delle slide parlano dei seguenti pattern:

- Adapter
- Decorator
- Factory Method
- Template Method
- Strategy

Seguirà il repository con gli esempi funzionanti

Sergio Sicari

March 25, 2020
Tweet

More Decks by Sergio Sicari

Other Decks in Programming

Transcript

  1. Design Patterns In The Real World
    case studies vol.1
    Sergio Sicari
    Senior Backend Developer / DevOps

    View Slide

  2. Design Pattern
    “Each pattern describes a problem which occurs over and
    over again in our environment, and then describes the core
    of the solution to that problem, in such a way that you can
    use this solution a million times over, without ever doing it
    the same way twice.”
    Christopher Alexander - Architect

    View Slide

  3. Design Pattern
    ● Design pattern is a general repeatable solution to a
    commonly occurring problem in software design.
    ● A design pattern isn't a finished design that can be
    transformed directly into code.
    ● It is a description or template for how to solve a problem
    that can be used in many different situations

    View Slide

  4. Adapter

    View Slide

  5. Adapter Pattern
    ● Converte l'interfaccia di una classe nell’interfaccia che il
    client si aspetta.
    ● Consente a classi con interfacce incompatibili di lavorare
    insieme
    ● Permette ad un “vecchio” componente di funzionare in un
    “nuovo” sistema

    View Slide

  6. Adapter Scenario

    View Slide

  7. Adapter
    Implementation
    ● implementa l’interfaccia
    “client”
    ● Inject dell’interfaccia da
    “adattare”

    View Slide

  8. Adapter Service
    Scenario
    Devo usare un servizio di terze
    parti (api) ma voglio garantire
    che in futuro si posso cambiare
    facilmente

    View Slide

  9. Decorator

    View Slide

  10. Decorator
    ● Permette di "attaccare" nuovi comportamenti ad un
    oggetto esistente
    ● Il componente da decorare racchiude la responsabile
    dell’aggiunta della funzionalità

    View Slide

  11. Decorator
    Scenario
    Voglio che in
    cartSummaryView venga
    considerato anche il calcolo
    delle tasse (iva)

    View Slide

  12. Decorator
    Solution
    “Inject” dell’interfaccia
    base
    Utilizzo della feature
    aggiuntiva
    Definizione della feature
    aggiuntiva

    View Slide

  13. Factory

    View Slide

  14. Factory
    “if creating the object is a complicated
    job you can do all of the work in the
    factory, instead of repeating it every time
    you want to create a new instance”

    View Slide

  15. Factory Method
    Il metodo Factory definisce un'interfaccia per la creazione di
    oggetti, ma delega alle sottoclassi la decisione sulle classi
    concrete da istanziare (GoF)
    La classe Factory dipende da una astrazione, non da una
    classe concreta (questa è la differenza sostanziale rispetto a
    Simple Factory).

    View Slide

  16. Simple Factory
    ● Spesso viene erroneamente
    confuso per il Factory Method.
    ● “Rompe” il principio DIP
    (Dependency Inversion
    Principle) di SOLID

    View Slide

  17. Factory Method
    Scenario
    ● Voglio processare un
    contenuto (stringa) con xslt
    (xml transformation language).
    ● potrei avere diverse tipologie
    di stringa in ingresso
    (html, xml, ecc ...)
    Spider
    xml html ...
    xslt
    Processor

    View Slide

  18. Factory Method - Implementazione I

    View Slide

  19. Factory Method - Implementazione II
    Concrete Creator
    ● Estende la classe astratta
    ● Definisce il metodo astratto
    ● Decide quale classe concreta
    instanziare

    View Slide

  20. Factory Method - Client Code

    View Slide

  21. Template Method

    View Slide

  22. Template Method
    ● Il Pattern Template Method permette alle sottoclassi di
    ridefinire alcuni step dell’algoritmo senza però cambiare la
    struttura dell’algoritmo
    ● La classe base definisce l’algoritmo con dei “placeholder”
    e le sottoclassi derivate implementano tali placeholders

    View Slide

  23. Template Method - Implementazione I
    parte standard
    “placeholders”

    View Slide

  24. Template Method - Implementazione II

    View Slide

  25. Template Method - Client Code

    View Slide

  26. Strategy

    View Slide

  27. Strategy Pattern
    ● Consente di incapsulare una famiglia di algoritmi in modo
    da renderli interscambiabili rispetto al client utilizzatore,
    mantenendo un’interfaccia generica
    ● La complessità dell’algoritmo viene nascosta al client
    ● L’algoritmo da utilizzare può essere scelto dinamicamente

    View Slide

  28. Strategy Pattern - Implementazione

    View Slide

  29. Design Pattern
    Relationship
    ● Strategy is like Template Method
    except in its granularity.
    ● Template Method uses inheritance to
    vary part of an algorithm. Strategy
    uses delegation to vary the entire
    algorithm.
    ● Strategy modifies the logic of
    individual objects. Template Method
    modifies the logic of an entire class.
    ● Factory Method is a specialization of
    Template Method.

    View Slide

  30. Riferimenti
    https://sourcemaking.com/
    https://refactoring.guru/
    https://designpatternsphp.readthedocs.io/en/latest/README.html
    https://www.simogrima.com/tag/design-pattern/

    View Slide

  31. Grazie!
    Sergio Sicari
    Senior Backend Developer / DevOps

    View Slide