Когда использовать Windows Workflow Foundation?

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

В каких ситуациях это хорошая идея использовать WF, и когда это усложнит ситуацию, то они должны быть? Каковы преимущества и недостатки/стоимость WF по сравнению с кодированием вручную?

Ответ 1

Вам может понадобиться WF, только если выполнено одно из следующих условий:

  • У вас долгий процесс.
  • У вас есть процесс, который часто меняется.
  • Вам нужна визуальная модель процесса.

Подробнее см. статью Paul Andrew: Что использовать Windows Workflow Foundation для?

Пожалуйста, не путайте и не связывайте WF с визуальным программированием любого типа. Это неправильно и может привести к очень плохим архитектурным и дизайнерским решениям.

Ответ 2

Никогда. Вы, вероятно, пожалеете об этом.

Почему? Простой,

  • Крутая кривая обучения
  • Сложно отлаживать
  • Трудно поддерживать
  • Не обеспечивает достаточную мощность, гибкость или прирост производительности, чтобы оправдать его использование.
  • Может и будет повреждать состояние приложения, которое невозможно восстановить

Единственный раз, когда я когда-либо мог задуматься о использовании WF, - это то, что я хочу разместить конструктора для конечного пользователя и, возможно, даже не тогда.

Поверьте мне, ничто никогда не будет таким простым, мощным или гибким, как код, который вы пишете, чтобы делать именно то, что вам нужно. Держитесь подальше от WF.

Конечно, это только мое мнение, но я считаю это чертовски хорошим.:)

Ответ 3

Код, созданный WF, неприятен. Значение, которое приносит WF, находится в визуальном представлении системы, хотя я все еще ничего не вижу (6-7 проектов на работе с WF, с которыми я связан), где я бы не предпочел более простой проект с ручной кодировкой.

Ответ 4

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

Вот преимущества и недостатки Workflow Foundation, которые я собрал из своего опыта:

<сильные > Преимущества

  • Стойкость: если у вас будет много длительных процессов (думаю, дни, недели, месяцы), то Workflows отлично подходят для этого. Неработающие экземпляры рабочего процесса сохраняются в базе данных, поэтому они не используют память.
  • Отслеживание: WF предоставляет механизм отслеживания каждого действия, выполняемого в рабочем процессе.
  • * Visual Designer: я помещаю это как *, потому что я думаю, что это действительно полезно только для маркетинговых целей. Как разработчик, я предпочитаю писать код, а не фотографировать вещи визуально. И когда у вас есть не-разработчик, создающий рабочие процессы, вы часто оказываетесь в огромном запутанном беспорядке.

Недостатки

  • Модель программирования: вы действительно ограничены в функциях программирования. Подумайте обо всех замечательных функциях, которые у вас есть на С#, а затем забудьте о них. Простые одно или два строковых оператора в С# становятся довольно крупными блочными действиями. Это особенно больно для проверки ввода. Сказав это, если вы действительно стараетесь хранить только логику высокого уровня в рабочих процессах и все остальное на С#, то это может быть не проблема.
  • Производительность: рабочие процессы используют большой объем памяти. Если вы развертываете множество рабочих процессов на сервере, убедитесь, что у вас много памяти. Также имейте в виду, что рабочие процессы намного медленнее, чем обычный код С#.
  • Крутая кривая обучения, которую трудно отлаживать: Как уже упоминалось выше. Вы собираетесь потратить много времени на выяснение того, как заставить вещи работать, и выяснить, как лучше всего что-то сделать.
  • Версия рабочего процесса Несовместимость. Если вы развертываете рабочий процесс с сохранением, и вам нужно сделать обновления для рабочего процесса, старые экземпляры рабочих процессов больше не совместимы. Предположительно это исправлено в .NET 4.5.
  • Вы должны использовать выражения VB (.NET 4.5 допускает выражения С#).
  • Не является гибким: если вам нужна специальная или специальная функциональность, не предоставленная Workflow Foundation, подготовьтесь к болью. В некоторых случаях это может быть даже невозможно. Кто знает, пока не попробуешь? Здесь много риска.
  • Услуги WCF XAML без интерфейсов: Обычно с услугами WCF вы развиваетесь против интерфейса. С помощью служб WCF XAML вы не можете гарантировать, что служба WCF XAML реализовала все в интерфейсе. Вам даже не нужно определять интерфейс. (насколько я знаю...)

Ответ 5

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

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

Ответ 6

Лично я не продаюсь на WF. Это полезность для меня не столь очевидна, как другие новые технологии MS, такие как WPF или WCF.

Я думаю, что WF будет в значительной степени использоваться в бизнес-приложениях в будущем, но я не планирую использовать его, потому что он не кажется правильным инструментом для работы для моих проектов.

Ответ 7

Компания, в которой я сейчас работаю, создала Windows Workflow Foundation (WF) и причины, по которым они решили использовать ее, заключалась в том, что правила часто менялись, и это заставляло бы их перекомпилировать различные DLL и т.д. поэтому их решение заключалось в том, чтобы размещать правила в БД и называть их оттуда. Таким образом, они могут изменять правила и не перекомпилировать и перераспределять dll и т.д.

Ответ 9

Рабочие процессы Windows соблазняют некодирующие ИТ-менеджеры, BAs и т.п., как и его двоюродный брат BizTalk, но на практике модульное тестирование, отладка и покрытие кода - всего лишь три из многих ошибок. Вы можете преодолеть некоторые из них, но вам нужно вкладывать значительные средства в достижение этого, тогда как с простым кодом вы просто получите это. Если у вас действительно есть долговременное требование, вам, вероятно, нужно что-то более сложное. Я слышал аргумент о возможности вывода новых файлов xaml в производство без повторной компиляции DLL, но, честно говоря, время, которое Workflows будет потреблять, может быть лучше использовано для улучшения вашей непрерывной интеграции до такой степени, когда скомпилированные развертывания не являются проблемой.

Ответ 10

Я бы использовал его в любой среде, где мне нужно работать с рабочим процессом, однако при использовании его в сочетании с K2 или даже SharePoint 2007 мощь платформы действительно полезна. При разработке бизнес-приложений с BI-специалистом рекомендуется использовать платформу, и это, как правило, будет иметь значение только для оптимизации и улучшения бизнес-процессов.

Для записи WF был разработан совместно с командой разработчиков K2, а новый K2 Blackpearl построен поверх WF, а также с механизмами Workflow MOSS 2007 и WSS 3.0.

Ответ 11

Если вы не хотите вручную записывать все эти коды для поддержания визуального интерфейса, отслеживания и сохранения, это разумный выбор для голосования за WF. ​​