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

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

8056261dc547c3cd14e07623bab18d48?s=128

Sergio Sicari

March 25, 2020
Tweet

Transcript

  1. Design Patterns In The Real World case studies vol.1 Sergio

    Sicari Senior Backend Developer / DevOps
  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
  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
  4. Adapter

  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
  6. Adapter Scenario

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

    “adattare”
  8. Adapter Service Scenario Devo usare un servizio di terze parti

    (api) ma voglio garantire che in futuro si posso cambiare facilmente
  9. Decorator

  10. Decorator • Permette di "attaccare" nuovi comportamenti ad un oggetto

    esistente • Il componente da decorare racchiude la responsabile dell’aggiunta della funzionalità
  11. Decorator Scenario Voglio che in cartSummaryView venga considerato anche il

    calcolo delle tasse (iva)
  12. Decorator Solution “Inject” dell’interfaccia base Utilizzo della feature aggiuntiva Definizione

    della feature aggiuntiva
  13. Factory

  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”
  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).
  16. Simple Factory • Spesso viene erroneamente confuso per il Factory

    Method. • “Rompe” il principio DIP (Dependency Inversion Principle) di SOLID
  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
  18. Factory Method - Implementazione I

  19. Factory Method - Implementazione II Concrete Creator • Estende la

    classe astratta • Definisce il metodo astratto • Decide quale classe concreta instanziare
  20. Factory Method - Client Code

  21. Template Method

  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
  23. Template Method - Implementazione I parte standard “placeholders”

  24. Template Method - Implementazione II

  25. Template Method - Client Code

  26. Strategy

  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
  28. Strategy Pattern - Implementazione

  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.
  30. Riferimenti https://sourcemaking.com/ https://refactoring.guru/ https://designpatternsphp.readthedocs.io/en/latest/README.html https://www.simogrima.com/tag/design-pattern/

  31. Grazie! Sergio Sicari Senior Backend Developer / DevOps