Windows Workflow Foundation (Intro – lesson 1)
Опубликовал whitenie на Июнь 26, 2008
Как разработчиков наша задача состоит в том чтобы решать рельные бизнесс-задачи, но независимо от сложности задачи, даже комплексности, мы решаем их единообразно – большая зазача разбивается на более простые, те в свою очередь на еще более простые и т.д. … Врезультате мы получаем множество задач, но множество простых задач, которые гораздо легче осмыслить, выполнить и протестировать.
В традиционной на данный момент модели программирования мы реализуем решение задачи жестко зашивая его в програмный код. Наш код определяет «что делать» вместе с тем «как это делать» (осуществлять контроль над тем что делать). Мы также жестко кодируем правила поведения кода базирующиеся на значениях какихто параметров, срабатывания событий и текущего состояния приложения.
Workflow это просто упорядоченные серии шагов которые достигают некоторой предопределенной цели согласно некому набору правил …
Windows Workflow Foundation это платформа созданная компанией Microsoft для управления бизнесс-процессами – т.е. потоками работ. Фактически это же мы делаем ежедневно руками. Мы так же разбиваем задачи на более простые и решаем их по отлельности. В виде Workflow Foundation компания Microsoft предоставила програмную модель для автоматизации и декларизации этого непосильного ручного труда J
WF предоставляет объектную модель и средства разработки приложений основанных на принципах рабочих потоков и может использоваться в самом широком спектре сценариев — от взаимодействия с пользователем до управления распределенными бизнес-процессами …
Если посмотреть на данную схему
можно увидеть, что Workflow не является приложением которое мы можем взять и запустить, жизнью и деятельностью Workflow управляет Workflow Runtime который умеет запускать, останавливать Workflow а также сообщать о событиях происходящих внутри Workflow.
Для того чтобы воркфлоу всетаки заставить выполняться необходимо еще одно приложение которое служило бы ему хостом и через Workflow Runtime управляло бы безопасностью жизнедеятельности Workflow. Workflow Runtime отвечает за хранение состояния, загрузку и активацию Workflow. В роли хост прилоежения могут служить все существующие на сегодня виды приложений.
Другими словами, Workflow – это набор действий координирующих работу программы.
Примеры действий:
· направить работу руководителю
Workflow представляется в виде процесса:
- как блоксхема (sequential workflow):
- как диаграмма состояний (state machine workflow (конечный автомат)):

Рассмотрим виды workflow более подробно:
· Sequential Workflow (последовательній работопоток) имееет последователььную структуру которая и определяет его порядок исполнения «Шаг1->Шаг2->Шаг3». Такие сценарии имеют четко определенные начало и конец, но тем не менее не лишены и гибкости полнейшего зацикливания.
· State Machine Workflow (конечный астомат операций) имеет вид графа с иногда болтающимися вершинами, последовательностью выполнения управляют внешние события, вследствие чего система переходит из одного состояния в другое.
… выполнение и тех и других воркфлоу может регламентироваться небором правил «правило1 – шаг1, правило 2 – шаг2»
Зачем же это все нужно ? … Workflow даёт нам ускорение в разработке в нескольно раз !
Workflow также имеет ряд дополнительной функциональности:
· Поддержка длительных процессов с сохранением состояния. Т.е. если, к примеру, работа Workflow в определенный момент требует какого нить внешнего событися – то на время ожидания состояние Workflow может быть сохранено в базу данных а затем по наступлению этого желаемого события быть реактивировано для дальнейшего выполнения с восстановлением предъидущего состояния.
· Гибкая и легко изменяемая последовательность шагов. Т.е. в Workflow состояшего из набора шагов эти шаги можно переставлять не меняя ни строчки кода.
· Прозрачность исполнения. – т.е. Workflow можно дебажить прямо в дизайнере, так же каждый шаг в Workflow может оповещать о ходе своего выполнения.
· Инфраструктура для логов и трассировки. Т.е. каждое действие в Workflow может быть залогировано и отслежено его выполнение в удобной для разработчика форме.
· Персистентность имеет родственность с пунктом первым, состоит в автоматическом сбрасывании состояния в базу данных и затем восстановления из нее когда нужно.
В результате можем сделать вывод о ключевых концепциях и составных частях Windows Workflow Foundation.
К основным концепциям относится то что Workflow это набор действый, что Workflowы могут исполняться только в хост-процессе (любом приложении), а также то что разработчики, т.е. мы, можем создавать свои собственные библиотеки действий (custom activities).
К основным компонентам Workflow относятся: базовая библиотека действий, среда исполнения , сервисы (как стандартные так и кастом) … а также визуальный дизайнер являющийся одной из основных фиче Workflow.
Обработчики выполнения вызываемые планировциком … это просто методы операций … поэтому любой из них может возбудить исключение и если оно не обрабатывается то Workflow просто заканчивает своё выполнение. Необработанное исключение не всплывает в хост приложение, однако вытащить его там всетаки можно через свойство Exception аргументов события Terminated. Исключение не всплывет в хост-приложение т.к. в Windows Workflow исключения распространяются асинхронно, соответственно и обрабатываться должны тоже асинхронно – для этого всего компания Microsoft придумала такое состояние активити как Faulting – когда работа (операция) валится (в ней возникает исключение) то она переходит в состояние Faulting, другие операции выполняющиеся в этом Workflow в этот же момент отменяются переходя срочно в состояние Canceling, для поимки исключение в композитных работах (операциях могущих иметь подопереции) предусмотрен режим Fault Handler в который мы можем добавлять хендлеры (это такие стандартные активити для поимки исключений) которые будут ловить конкретные виды иссключений … далее можно выполнить какието восстановительные работы и/или транслировать иссключение в хост-приложение.
Подберемся ближе к непосредственной разработке в терминах Workflow …
Workflow могут быть созданы в трех ипостасях:
· только разметка (XAML)
· разметка + код
· только код
Разметка в Workflow определяет структуру Workflow, а соответственно определяться должна структурой бизнес-логики, когда же разметка объеденяется с кодом то разметка XAML определяет структуру Workflow, а код логику, если же Workflow представлен в виде только кода тогда Workflow создается в конструкторе основного класса, но концептуально это никакого отличия не вносит. Обычно компилятор генерирует Workflow как код + разметка …
Когда Workflow готов к работе то при запуске компилятором Workflow wcf.exe он переводится в обычный C# код (третий вариант создания) а затем джаст ин таймом в CIL …
Как итог обзора хотелось бы дать небольшую сравнительную характеристику подхода к разработке бизнесс-логики с Workflow и без него.
Надеюсь данная вольно написанная статья помогла вам получить хоть частичную иллюзию понимания Windows Workflow Foundation J.
