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

Symfony Workflow - AFUP 2017

Symfony Workflow - AFUP 2017

Grégoire Pineau

March 10, 2017
Tweet

More Decks by Grégoire Pineau

Other Decks in Programming

Transcript

  1. Symfony/workflow
    Grégoire Pineau
    1

    View full-size slide

  2. blackfire.io
    Grégoire Pineau / @lyrixx
    Devops @Blackfire @sensiolabs
    Core Contributeur @symfony
    2

    View full-size slide

  3. blackfire.io
    Contexte
    4
    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.

    View full-size slide

  4. blackfire.io
    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
    5

    View full-size slide

  5. blackfire.io
    7

    View full-size slide

  6. blackfire.io
    8
    Hello Workflow !
    ● Sépare la logique business du modèle
    ● Rend le code plus:
    ○ Réutilisable
    ○ Maintenable
    ○ Lisible

    View full-size slide

  7. blackfire.io
    Hello Workflow !
    Le composant a pour but de garantir que
    l’article passe bien par toutes les étapes de
    validations.
    9

    View full-size slide

  8. Théorie des graphs
    10

    View full-size slide

  9. blackfire.io
    11

    View full-size slide

  10. blackfire.io
    12

    View full-size slide

  11. blackfire.io
    13

    View full-size slide

  12. blackfire.io
    14

    View full-size slide

  13. blackfire.io
    15

    View full-size slide

  14. Symfony/workflow
    16

    View full-size slide

  15. 17
    machine à État
    NEW !

    View full-size slide

  16. blackfire.io
    États / Transitions
    18
    état a état b
    Transition T1

    View full-size slide

  17. blackfire.io
    Graphe orienté
    19
    A B
    C
    D
    E
    T1
    T2
    T3
    T4
    T5

    View full-size slide

  18. Definition
    20

    View full-size slide

  19. blackfire.io
    21
    Un simple graphe

    View full-size slide

  20. blackfire.io
    22
    Definition

    View full-size slide

  21. GraphViz Dumper
    23

    View full-size slide

  22. blackfire.io
    24
    Graphiz Dumper

    View full-size slide

  23. Definition Builder
    25
    NEW !

    View full-size slide

  24. blackfire.io
    Definition Builder
    26

    View full-size slide

  25. La classe workflow
    27

    View full-size slide

  26. blackfire.io
    La classe Workflow :: can()
    28

    View full-size slide

  27. blackfire.io
    29
    La classe Workflow :: can()

    View full-size slide

  28. blackfire.io
    La classe Workflow :: apply()
    30

    View full-size slide

  29. blackfire.io
    31
    La classe Workflow :: apply()

    View full-size slide

  30. blackfire.io
    Workflow :: getEnabledTransitions()
    32

    View full-size slide

  31. blackfire.io
    33
    Workflow :: getEnabledTransitions()

    View full-size slide

  32. blackfire.io
    Twig
    35
    NEW !

    View full-size slide

  33. Les events ?
    36

    View full-size slide

  34. blackfire.io
    Les events
    On a mis l’Event Dispatcher dans le
    Workflow !
    Un event à chaque:
    ● Sortie de place
    ● Passage dans une transition
    ● Arrive dans une place
    ● Quand une transition est activée
    37
    NEW !

    View full-size slide

  35. blackfire.io
    38
    NEW !

    View full-size slide

  36. blackfire.io
    Plus un autre: le Guard Event
    39

    View full-size slide

  37. Un réseau de Pétri
    40

    View full-size slide

  38. blackfire.io
    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 pétri”
    - Carl Adam Petri, 1962
    41

    View full-size slide

  39. blackfire.io
    Places / Transitions
    42
    Transition
    T1
    place
    A
    place B

    View full-size slide

  40. blackfire.io
    Plusieurs Entrées Sorties
    43
    Transition
    place
    place
    place
    place

    View full-size slide

  41. blackfire.io
    Tokens !
    44

    View full-size slide

  42. blackfire.io
    45

    View full-size slide

  43. Quelques exemples de workflows
    46

    View full-size slide

  44. blackfire.io
    Tout droit
    47

    View full-size slide

  45. blackfire.io
    En Boucle
    48

    View full-size slide

  46. blackfire.io
    Ou
    49

    View full-size slide

  47. blackfire.io
    Et / Tâches en parallèle
    50

    View full-size slide

  48. blackfire.io
    WHAT ?
    51

    View full-size slide

  49. Appliqué à un Article
    52

    View full-size slide

  50. blackfire.io
    Modélisation du flow d’un article
    53

    View full-size slide

  51. Le MArking
    54

    View full-size slide

  52. blackfire.io
    Le marking
    55
    Il représente “l’état” d’un objet dans le
    workflow.
    C’est-à-dire toutes les places où il y a des
    tokens

    View full-size slide

  53. blackfire.io
    Le marking
    56

    View full-size slide

  54. blackfire.io
    Marking / Avant
    57

    View full-size slide

  55. blackfire.io
    Marking / Après
    58

    View full-size slide

  56. Le marking Store
    59

    View full-size slide

  57. blackfire.io
    Le marking store
    60
    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

    View full-size slide

  58. blackfire.io
    Le marking store
    61

    View full-size slide

  59. blackfire.io
    Deux implémentations
    62
    • Single State Marking Store
    This store deals with a "single state" Marking. It
    means a subject can be in one and only one state
    at the same time. => scalar column in DB
    • Multiple State Marking Store
    This store deals with a "multiple state" Marking. It
    means a subject can be in many states at the same
    time. => “array” column in DB

    View full-size slide

  60. Et dans Symfony ?
    63

    View full-size slide

  61. blackfire.io
    La définition - En YML
    64

    View full-size slide

  62. blackfire.io
    La définition - En YML - Places
    65

    View full-size slide

  63. blackfire.io
    La définition - En YML - Transitions
    66

    View full-size slide

  64. blackfire.io
    La définition - En YML - Supports
    67

    View full-size slide

  65. blackfire.io
    Ça ressemble à quoi ?
    68

    View full-size slide

  66. blackfire.io
    Une Vue
    69

    View full-size slide

  67. blackfire.io
    Un controlleur
    70

    View full-size slide

  68. blackfire.io
    Et notre guard ?
    71

    View full-size slide

  69. blackfire.io
    Et notre guard ?
    72

    View full-size slide

  70. blackfire.io
    Et notre guard ?
    73

    View full-size slide

  71. Nouveautés ?
    74
    NEW !

    View full-size slide

  72. blackfire.io
    Audit Trail
    75

    View full-size slide

  73. blackfire.io
    Guard
    76

    View full-size slide

  74. Merci
    Questions ?
    77

    View full-size slide