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"

7602f2751868682b296171f58589c851?s=128

Grégoire Pineau

April 07, 2016
Tweet

Transcript

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

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

  3. L’Histoire du composant workflow 3

  4. La genèse 4

  5. blackfire.io 5 Hiver 2013

  6. blackfire.io 6

  7. blackfire.io On open source ? 7

  8. blackfire.io Oui 8

  9. blackfire.io Dans Symfony ? 9

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

  11. blackfire.io 11

  12. blackfire.io 12

  13. blackfire.io Comme d’habitude 13

  14. blackfire.io Septembre 2014 14

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

  16. blackfire.io Février 2016 16

  17. blackfire.io On s’y remet 17

  18. Mais c’est quoi ? 18

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

  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.
  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
  22. blackfire.io Hello workflow ! Le composant a pour but de

    garantir que l’ article passe bien par toutes les étapes de validations. 22
  23. Workflow : Une machine à états 23

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

    T1
  25. blackfire.io Graphe orienté 25 A B C D E T1

    T2 T3 T4 T5
  26. On se replonge dans la PR 26

  27. blackfire.io On relit le code 27

  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
  29. blackfire.io Exemple 29

  30. blackfire.io Constat : Une machine à états n’est pas adaptée

    30 Faut-il un réseau de Petri ?
  31. blackfire.io On lit de la doc 31

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

  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
  34. On migre le code du workflow sur le modèle “Workflow

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

  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.
  37. blackfire.io Places / Transitions 37 Transition T1 place A place

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

  39. blackfire.io Tokens ! 39

  40. blackfire.io 40

  41. blackfire.io Marking 41

  42. Quelques exemples de workflows 42

  43. blackfire.io Tout droit 43

  44. blackfire.io En Boucle 44

  45. blackfire.io Ou 45

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

  47. blackfire.io WHAT ? 47

  48. On implémente 48

  49. blackfire.io Le diff 49

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

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

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

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

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

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

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

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

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

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

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

  61. blackfire.io Le Graphviz dumper 61

  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
  63. blackfire.io Plus un autre: le Guard Event 63

  64. Et dans Symfony ? 64

  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
  66. blackfire.io La définition - En YML 66

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

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

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

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

  71. blackfire.io Une Vue 71

  72. blackfire.io Une Vue 72

  73. blackfire.io Un controlleur 73

  74. blackfire.io Et notre guard ? 74

  75. blackfire.io Et notre guard ? 75

  76. blackfire.io Et notre guard ? 76

  77. Une petite démo ? 77

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

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

  80. Merci Questions ? 80