banderos120
@banderos120
Играю на балалайке

Что и зачем «Symfony Workflow Component»?

Здравствуйте !

Вот в дайджесте по PHP в комментариях проскочила информация о Symfony Workflow компоненте. В описании компонента довольно мало информации, чтобы человеку, впервые сталкивающемуся с таким понятием, понять что же это такое. В комментариях на хабре было еще прикреплено видео с докладом о Sf Workflow, однако из доклада я ничего не понял, кроме красивых выражений о графах, абстракциях и таких же примерах, в принципе ничего и не вынес.
Вопрос: как и зачем это [Workflow] в общем, и [SF Workflow Component] в частности, нужно применять ? Прошу тех, кто знаком с данной темой, помочь обьяснениями.

Заранее спасибо !
  • Вопрос задан
  • 3350 просмотров
Решения вопроса 1
riky
@riky
Laravel
о компоненте узнал из вашего вопроса, довольно интересный.

добавляет стейт машину в симфони. будет удобно когда сущности имеют некие состояния, например задача и ее состояния (открыта, выполняется, требуется проверка, закрыта и тд). этот компонент добавляет возможность в конфиге прописать все состояния и возможные переходы между ними, то есть из какого в какое можно перейти. то же самое будет полезно например для статусов заказов в магазине, приемка к публикации статьи.

также компонент позволяет вешать на смену статусов свои обработчики (через общий event manager). и добавляет в твиг удобные функции хелперы для проверки текущих статусов и возможности их смены. в статье например показан кейс - вывести кнопки для смены статусов у статьи, выводятся только те кнопки смены статусов, переход на которые разрешен в конфиге. раньше все это руками приходилось делать.

полистав пример тестового приложения понял что статусы хранятся в поле marking у сущности https://github.com/lyrixx/SFLive-Paris2016-Workflo...
поле имеет тип json_array. надо бы запустить этот тестовый проект, погонять. например для меня пока не очевидно как сделать фильтрацию сущностей по этому статусу, неужели отдельное поле/я добавлять и в подписчиках его менять.

также можно полистать исходники самого бандла, вот например метод для смены статуса https://github.com/symfony/workflow/blob/master/Wo...
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Добавлю к ответу Юрий:

Одна из основных вкусняшек Workflow в подобных компонентах/фреймворках/системах - это инверсия контроля над сущностями и прочими моделями. Клиент не изменяет статус сущности через условный сеттер setStatus('approved') с дополнительными сайд-эффектами, а осуществляет переход (действие, процесс) apply('approve'), одним из сайд-эффектов которого является изменение статуса. Вроде бы разница незначительная с технической точки зрения, но бизнес-заказчики обычно оперируют процессами, в которых задействованы сущности, а не операциями самих сущностей, они говорят "в результате подписания договора ему присваивается статус "действующий"", а не "присвоение договору статуса "действующий" означает что договор подписан". Когда их требование меняется на "в результате подписания договора ему присваивается статус "подписан" (которого раньше не было), а "действующий" присваивается когда менеджер его утвердит", то нам, разработчикам, значительно меньше приходится менять и чаще всего не код даже, а конфиги, код только дописывается, но не меняется, ну или меняется значительно в меньшей степени.
Ответ написан
Комментировать
@dizzy7
В таких случаях обычно действует простое правило - если вы не понимаете зачем вам это нужно, значит оно вам не нужно =) В видео всё очень подробно и наглядно рассказано где это можно применять, если вам непонятно - значит у вас просто не было таких задач.

Когда-то у меня например была задача по обработке заявок. Около семи статусов со сложными условиями и возможностью перехода из статуса в статус - это как раз кейс для workflow.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы