A la découverte de Symfony/Workflow - AFUP 2018

A la découverte de Symfony/Workflow - AFUP 2018

7602f2751868682b296171f58589c851?s=128

Grégoire Pineau

May 28, 2018
Tweet

Transcript

  1. Symfony/workflow PHP Tour 2018 - Montpellier 1

  2. 2

  3. Grégoire Pineau / @lyrixx DevOps @JoliCode Core Contributeur @symfony 3

  4. Quand ? 4

  5. Contexte 5 La publication d’un article sur un site de

    presse ne se fait pas en un clin d’oeil. L’article transite par différents acteurs, qui produisent, relisent, valident. Il y a un workflow précis.
  6. Garantir la qualité Chacune des étapes est nécessaire et garantit

    la qualité de l’article (véracité du propos, sourcing, soin de l’écriture et de la formulation…) Ce circuit de production et de publication est une analogie efficace de ce que l’on peut retrouver dans le code 6
  7. 7 Pourquoi ?

  8. 8

  9. 9 Hello Workflow ! • Sépare la logique business du

    modèle • Rend le code plus : ◦ Réutilisable ◦ Maintenable ◦ Lisible
  10. Hello Workflow ! Le composant a pour but de garantir

    que l’article passe bien par toutes les étapes de validation. 10
  11. Symfony/workflow 11

  12. 12 machine à État

  13. États / Transitions 13 état a état b Transition T1

  14. Graphe orienté 14 A B C D E T1 T2

    T3 T4 T5
  15. Définition 15

  16. 16 Un simple graphe

  17. 17 Définition

  18. GraphViz Dumper 18

  19. 19 Graphviz Dumper

  20. La classe workflow 20

  21. La méthode Workflow :: can() 21

  22. 22 La méthode Workflow :: can()

  23. La méthode Workflow :: apply() 23

  24. 24 La méthode Workflow :: apply()

  25. Workflow :: getEnabledTransitions() 25

  26. 26 Workflow :: getEnabledTransitions()

  27. Twig 27

  28. Twig 28

  29. Les events ? 29

  30. Les events On a mis l’Event Dispatcher dans le Workflow

    ! Un event à chaque : • Sortie de place • Passage dans une transition • Arrivée dans une place • Activation d’une transition 30
  31. 31

  32. Plus un autre : le Guard Event 32

  33. Un réseau de Pétri 33

  34. What ? “Un réseau de Petri est une machine à

    état sous stéroïde” - Quelqu’un, un jour “Une machine à état est un subset des réseaux de Petri” - Carl Adam Petri, 1962 34
  35. Places / Transitions 35 Transition T1 place A place B

  36. Plusieurs Entrées Sorties 36 Transition place place place place

  37. Tokens ! 37

  38. 38 Le chat de Schrödinger

  39. Quelques exemples de workflow 39

  40. Tout droit 40

  41. En Boucle 41

  42. Ou 42

  43. Et / Tâches en parallèle 43

  44. WHAT ? 44

  45. Appliqué à un Article 45

  46. Modélisation du flow d’un article 46

  47. Le MArking 47

  48. Le marking 48 Il représente “l’état” d’un objet dans le

    workflow. C’est-à-dire toutes les places où il y a des tokens.
  49. Marking / Avant 49

  50. Marking / Après 50

  51. Demo ? 51

  52. Le marking Store 52

  53. Le marking store 53 Le marking store est l’interface entre

    le Composant Workflow et un POPO. Il convertit le marking en quelque chose de compréhensible par le POPO et vice versa.
  54. Deux implémentations 54 • Single State Marking Store scalar column

    in DB • Multiple State Marking Store “array” column in DB
  55. Les metadata 55

  56. Les métadonnées 56

  57. Et dans Symfony ? 57

  58. La définition - En YAML 58

  59. La définition - En YAML - Places 59

  60. La définition - En YAML - Transitions 60

  61. La définition - En YAML - Le reste 61

  62. Ça ressemble à quoi ? 62

  63. Une vue 63

  64. Un contrôleur 64

  65. Et notre guard ? 65

  66. Merci Questions ? 66