2008-09-19 9 views
139

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

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

+1

Кажется, стоит отметить, что полностью переписано для выпуска 4.0, которое появилось после этих ответов. – sclarson 2015-01-12 16:48:55

ответ

117

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

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

Для получения более подробной информации см пост Пола Эндрю: What to use Windows Workflow Foundation for?

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

+3

Что такое измерительный блок для длительного процесса? – ivorykoder 2013-04-20 03:25:29

+5

@ivorykoder «процессы» (действительно * workflows *), которые могут пережить перезагрузки сервера, на котором он размещен. – lobsterism 2013-07-15 01:18:43

+0

Если бы у меня были требования, которые удовлетворяли только # 1, этого было бы недостаточно для выбора WF. Однако, если требования включали # 2 и/или # 3, это было бы более сильным аргументом в пользу использования WF. – Mick 2014-09-04 08:18:05

47

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

+2

Аминь. См. Мой ответ. – 2011-12-21 18:10:51

11

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

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

23

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

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

2

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

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

6

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

67

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

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

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

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

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

1

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

34

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

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

Преимущества

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

Недостатки

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

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

0

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

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

Смежные вопросы