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

Le reveil du Workflow

Le reveil du Workflow

Il est courant de gérer des statuts ou états de produits, dans des sites e-commerce ou éditoriaux. Pour ce faire, il est possible d'agir de façon classique, c'est-à-dire manuellement, ou d'avoir recours à des librairies qui proposent déjà des bases de code.

Pour cette présentation, nous aborderons la notion de machine à état et sa définition avant d'envisager, son application, en examinant les librairies open sources existantes. Enfin, à la lumière de Symfony, nous étudierons le nouveau composant "Workflow"

Grégoire Pineau

April 07, 2016
Tweet

More Decks by Grégoire Pineau

Other Decks in Technology

Transcript

  1. Le réveil du workflow
    Grégoire Pineau
    1

    View full-size slide

  2. blackfire.io
    Grégoire Pineau
    Devops @Blackfire @sensiolabs
    @lyrixx
    2

    View full-size slide

  3. L’Histoire du composant workflow
    3

    View full-size slide

  4. blackfire.io
    5
    Hiver 2013

    View full-size slide

  5. blackfire.io
    6

    View full-size slide

  6. blackfire.io
    On open source ?
    7

    View full-size slide

  7. blackfire.io
    Oui
    8

    View full-size slide

  8. blackfire.io
    Dans Symfony ?
    9

    View full-size slide

  9. blackfire.io
    OK,
    mais tu fais la PR
    10

    View full-size slide

  10. blackfire.io
    11

    View full-size slide

  11. blackfire.io
    12

    View full-size slide

  12. blackfire.io
    Comme d’habitude
    13

    View full-size slide

  13. blackfire.io
    Septembre 2014
    14

    View full-size slide

  14. blackfire.io
    15
    Manque de temps pour y travailler

    View full-size slide

  15. blackfire.io
    Février 2016
    16

    View full-size slide

  16. blackfire.io
    On s’y remet
    17

    View full-size slide

  17. Mais c’est quoi ?
    18

    View full-size slide

  18. 19
    Quels problèmes doit-il résoudre ?

    View full-size slide

  19. blackfire.io
    Contexte
    20
    Sur un site de presse, il y a beaucoup d’
    acteurs différents. Des pigistes, des
    journalistes, un rédacteur en chef, des
    correcteurs, un directeur de publication, …
    Un article n’est pas publié aussi facilement.

    View full-size slide

  20. blackfire.io
    Il y a des règles
    Par exemple, un article doit être validé par
    un journaliste et par un correcteur.
    Si c’est le cas, alors l’article peut être mis
    en ligne.
    21

    View full-size slide

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

    View full-size slide

  22. Workflow : Une machine à états
    23

    View full-size slide

  23. blackfire.io
    États / Transitions
    24
    état A état B
    Transition T1

    View full-size slide

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

    View full-size slide

  25. On se replonge dans la PR
    26

    View full-size slide

  26. blackfire.io
    On relit le code
    27

    View full-size slide

  27. blackfire.io
    On définit ce qu’on veut
    28
    ● Pouvoir gérer la publication d’un article
    ● Il y a une série d’étapes qui doivent être
    respectées
    ● Seuls certains utilisateurs peuvent franchir
    certaines étapes
    ● Certaines étapes peuvent être faites en
    parallèle

    View full-size slide

  28. blackfire.io
    Exemple
    29

    View full-size slide

  29. blackfire.io
    Constat : Une machine à états n’est pas adaptée
    30
    Faut-il un réseau de Petri ?

    View full-size slide

  30. blackfire.io
    On lit de la doc
    31

    View full-size slide

  31. blackfire.io
    On regarde ce qui existe déjà
    32

    View full-size slide

  32. blackfire.io
    Petit état de l’art
    33
    ● State machine:
    ○ https://github.com/yohang/Finite
    ○ https://github.com/winzou/state-machine
    ● Petrinet
    ○ https://github.com/florianv/petrinet
    ○ https://github.com/alterway/component-workflow
    ● Autre
    ○ https://github.com/vespolina/workflow

    View full-size slide

  33. On migre le code du workflow sur le modèle
    “Workflow net”
    34

    View full-size slide

  34. Qu’est-ce que c’est ?
    35

    View full-size slide

  35. blackfire.io
    Workflow Net
    36
    ● C’est une extension des réseaux de
    Petri
    ● Ça ressemble aux machines à états
    ● Mais avec plus de features
    Note: le composant Workflow de Symfony n'implémente pas
    toutes les spécifications.

    View full-size slide

  36. blackfire.io
    Places / Transitions
    37
    Transition T1
    place A place B

    View full-size slide

  37. blackfire.io
    Plusieurs Entrées Sorties
    38
    Transition
    place
    place
    place
    place

    View full-size slide

  38. blackfire.io
    Tokens !
    39

    View full-size slide

  39. blackfire.io
    40

    View full-size slide

  40. blackfire.io
    Marking
    41

    View full-size slide

  41. Quelques exemples de workflows
    42

    View full-size slide

  42. blackfire.io
    Tout droit
    43

    View full-size slide

  43. blackfire.io
    En Boucle
    44

    View full-size slide

  44. blackfire.io
    Ou
    45

    View full-size slide

  45. blackfire.io
    Et / Tâches en parallèle
    46

    View full-size slide

  46. blackfire.io
    WHAT ?
    47

    View full-size slide

  47. On implémente
    48

    View full-size slide

  48. blackfire.io
    Le diff
    49

    View full-size slide

  49. blackfire.io
    La classe Workflow :: can()
    50

    View full-size slide

  50. blackfire.io
    Workflow::Can - Exemple
    51

    View full-size slide

  51. blackfire.io
    La classe Workflow :: apply()
    52

    View full-size slide

  52. blackfire.io
    Workflow::Apply - Exemple - Avant
    53

    View full-size slide

  53. blackfire.io
    Workflow::Apply - Exemple - Après
    54

    View full-size slide

  54. blackfire.io
    La classe Workflow :: getAvailableTransitions()
    55

    View full-size slide

  55. blackfire.io
    La class Definition : Les places
    56

    View full-size slide

  56. blackfire.io
    La class Definition : Les Transitions
    57

    View full-size slide

  57. blackfire.io
    La class Definition : Les Transitions
    58

    View full-size slide

  58. blackfire.io
    La class Definition : Les Transitions
    59

    View full-size slide

  59. blackfire.io
    La class Definition : Les Transitions
    60

    View full-size slide

  60. blackfire.io
    Le Graphviz dumper
    61

    View full-size slide

  61. blackfire.io
    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
    62

    View full-size slide

  62. blackfire.io
    Plus un autre: le Guard Event
    63

    View full-size slide

  63. Et dans Symfony ?
    64

    View full-size slide

  64. blackfire.io
    La définition - A la main
    Il est toujours fortement recommandé de
    faire son workflow sur papier pour essayer
    de le valider avant.
    65

    View full-size slide

  65. blackfire.io
    La définition - En YML
    66

    View full-size slide

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

    View full-size slide

  67. blackfire.io
    La définition - En YML - Places
    68

    View full-size slide

  68. blackfire.io
    La définition - En YML - Transitions
    69

    View full-size slide

  69. blackfire.io
    Ça ressemble à quoi ?
    70

    View full-size slide

  70. blackfire.io
    Une Vue
    71

    View full-size slide

  71. blackfire.io
    Une Vue
    72

    View full-size slide

  72. blackfire.io
    Un controlleur
    73

    View full-size slide

  73. blackfire.io
    Et notre guard ?
    74

    View full-size slide

  74. blackfire.io
    Et notre guard ?
    75

    View full-size slide

  75. blackfire.io
    Et notre guard ?
    76

    View full-size slide

  76. Une petite démo ?
    77

    View full-size slide

  77. Avant dernière étape :
    On fait les slides ;)
    78

    View full-size slide

  78. Dernière étape :
    On présente le composant workflow
    79

    View full-size slide

  79. Merci
    Questions ?
    80

    View full-size slide