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 Slide

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

    View Slide

  3. L’Histoire du composant workflow
    3

    View Slide

  4. La genèse
    4

    View Slide

  5. blackfire.io
    5
    Hiver 2013

    View Slide

  6. blackfire.io
    6

    View Slide

  7. blackfire.io
    On open source ?
    7

    View Slide

  8. blackfire.io
    Oui
    8

    View Slide

  9. blackfire.io
    Dans Symfony ?
    9

    View Slide

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

    View Slide

  11. blackfire.io
    11

    View Slide

  12. blackfire.io
    12

    View Slide

  13. blackfire.io
    Comme d’habitude
    13

    View Slide

  14. blackfire.io
    Septembre 2014
    14

    View Slide

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

    View Slide

  16. blackfire.io
    Février 2016
    16

    View Slide

  17. blackfire.io
    On s’y remet
    17

    View Slide

  18. Mais c’est quoi ?
    18

    View Slide

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

    View Slide

  20. 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 Slide

  21. 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 Slide

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

    View Slide

  23. Workflow : Une machine à états
    23

    View Slide

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

    View Slide

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

    View Slide

  26. On se replonge dans la PR
    26

    View Slide

  27. blackfire.io
    On relit le code
    27

    View Slide

  28. 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 Slide

  29. blackfire.io
    Exemple
    29

    View Slide

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

    View Slide

  31. blackfire.io
    On lit de la doc
    31

    View Slide

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

    View Slide

  33. 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 Slide

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

    View Slide

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

    View Slide

  36. 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 Slide

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

    View Slide

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

    View Slide

  39. blackfire.io
    Tokens !
    39

    View Slide

  40. blackfire.io
    40

    View Slide

  41. blackfire.io
    Marking
    41

    View Slide

  42. Quelques exemples de workflows
    42

    View Slide

  43. blackfire.io
    Tout droit
    43

    View Slide

  44. blackfire.io
    En Boucle
    44

    View Slide

  45. blackfire.io
    Ou
    45

    View Slide

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

    View Slide

  47. blackfire.io
    WHAT ?
    47

    View Slide

  48. On implémente
    48

    View Slide

  49. blackfire.io
    Le diff
    49

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  61. blackfire.io
    Le Graphviz dumper
    61

    View Slide

  62. 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 Slide

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

    View Slide

  64. Et dans Symfony ?
    64

    View Slide

  65. 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  71. blackfire.io
    Une Vue
    71

    View Slide

  72. blackfire.io
    Une Vue
    72

    View Slide

  73. blackfire.io
    Un controlleur
    73

    View Slide

  74. blackfire.io
    Et notre guard ?
    74

    View Slide

  75. blackfire.io
    Et notre guard ?
    75

    View Slide

  76. blackfire.io
    Et notre guard ?
    76

    View Slide

  77. Une petite démo ?
    77

    View Slide

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

    View Slide

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

    View Slide

  80. Merci
    Questions ?
    80

    View Slide