С точки зрения неэксперта, для меня есть две вещи, которые делают аргумент в пользу WF - одна уникальная для платформ рабочих процессов, другая, возможно, более удобная.
Удобная функцияэто способность создавать новые способы составления деятельности.Императивное программирование предоставляет только ограниченный набор композиционных примитивов: в основном секвенирование, if-else и циклы.WF позволяет вам создавать свои собственные операторы композиции, такие как чередованное выполнение, параллельное выполнение, сначала после поста и т. Д. И, конечно, в него встроен сложный механизм компоновки конечных автоматов.
Я говорю, что этоудобная функция, потому что вы можете построить все эти операторы на императивном языке, таком как C #: на самом деле это как вы строите операторы WF.Но WF упрощает использование и чтение пользовательских композиций, тогда как в C # вы быстро погружаетесь в градус лямбда-выражений.Поэтому, если у вас есть сложные требования к оркестровке, то есть если ваши действия сочетаются друг с другом сложнее, чем последовательности, if-else и циклы, то WF может сделать вашу программу проще для выражения и понимания.
Уникальная особенность долговечность .Отсюда начинается книга Шуклы и Шмидта, и она продолжает возвращаться.Императивная программа, написанная на C # или VB, может запускаться часами, днями, неделями, если повезет, может быть, даже месяцами ... но в конечном итоге IIS собирается циклически перемещать пул приложений или администраторы захотят установить последние обновления безопасностиили кто-то собирается споткнуться о шнур питания.Как ваша программа помнит: «Хорошо, я получил заказ на покупку от Unimaginative Company Names R Us, и я жду одобрения кредита от Bank of Breadheads Inc., и когда я получу его, я могу отправить подтверждениеemail "?
В обычной императивной программе, когда процесс умирает, состояние выполнения умирает вместе с ним.Вы можете начать новый процесс, но он начнется в начале программы.Конечно, вы можете создать базу данных и использовать ее для хранения флагов, таких как «получил заказ на покупку» и «получил одобрение кредита».Но теперь вам нужно написать специфичный для приложения код для сохранения и запроса состояния, а также вернуться в нужную точку программы в зависимости от этого состояния.И вам нужно спроектировать новую базу данных и новую логику сохранения / восстановления / перехода для каждого долго работающего приложения.
Надежный рабочий процесс направлен на решение этой проблемы.Если вы пишете свою программу как рабочий процесс действий, то WF позаботится о сохранении своего состояния, в том числе и того, где оно находится в процессе выполнения.Машина, на которой запущена программа, может загореться и сжечь ваш центр обработки данных, но когда придет ответ от банка, WF разбудит вашу программу в другом центре обработки данных и начнет работать в нужном месте и с нужнымdata.
Это для меня "сильный аргумент" в пользу WF.Во многих случаях вам это не нужно: приложения достаточно недолговечны, поэтому сбой не представляет серьезной проблемы, а перезапуск с нуля является жизнеспособной стратегией восстановления.Но для долгоживущих приложений, например, когда вы можете управлять внешними системами, для ответа которых могут потребоваться часы, или для бизнес-процессов, в которых участвуют люди, на реагирование которых могут уйти дни, устойчивость может быть убийственной функцией WF.
Отказ от ответственности: Я не программист WF и никогда не создавал реальную систему WF.Я пришел к этому из истории BizTalk и из того, что я читал о WF, так что эта оценка является довольно теоретической.Надеюсь, это все равно поможет!