Где используется Windows Workflow Foundation?
используется ли WF в пользовательском интерфейсе или на бизнес-уровне? Если на уровне пользовательского интерфейса, то кому-то кодирование в бизнес-слое даже нужно использовать или изучать его?
автор: Craig Stuntz
3 ответов
Крис предложил отличный ответ, поэтому я возьму другую тактику. Workflow-процесс на самом деле не то же самое, что логика. Рабочие процессы, как правило, являются составами логики, что делает их дополнительным вкладом в целое. Если бизнес-компонент хорошо инкапсулирует один элемент бизнес-правил или поведения, рабочий процесс составляет несколько бизнес-компонентов, правил и поведения для удовлетворения потребностей более крупных и длительных бизнес-процессов.
рабочие процессы могут приспосабливать везде, заполняя процесс нуждается в UI, бизнес и даже слои данных. Если вы в конечном итоге используете WF, я настоятельно рекомендую вам обучить свой общий персонал по развитию, чтобы были широкие знания и понимание. Несмотря на наличие визуального аспекта, WF по-прежнему требует некоторого низкоуровневого кодирования для создания библиотеки действий, и такие, что создатели рабочих процессов и сопровождающие будут использовать.
Что за процесс unsecapp exe в Windows 10 и Windows 11
Это зависит от вас, использовать его или нет. Как правило, WF используется более крупными проектами, потому что WF предлагает ценную отдачу от инвестиций. WF сложнее использовать, чем просто писать код. Существует довольно крутая кривая обучения, требует другого подхода к бизнес-проблемам и требует специальных навыков. Предоставление кода WF добавляет накладные расходы, так как вам нужно писать действия, которые могут использоваться в рабочих процессах, а также создавать сами рабочие процессы.
Если вы думаете, что использование WF для вашего небольшого проекта обеспечит ценную отдачу от инвестиций, то пойдите для он. Вам нужно будет как окупить первоначальные затраты на обучение, реализацию инфраструктуры и развертывание, так и обеспечить долгосрочную ощутимую экономию средств за счет простого написания кода для решения имеющихся проблем. Я бы сомневался, что WF предложит такой небольшой проект ROI. Для более крупных проектов или нескольких интегрированных проектов для одной крупной компании гораздо легче понять, что ROI, чем с меньшими проектами, поэтому платформы рабочих процессов, такие как WF, обычно только используется в таких масштабах.
автор: jrista
WF-это интерфейс к уровню занятости.
рабочие процессы-это декларативный способ написания программ путем связывания заранее определенных действий, а не императивная модель программирования написания строк кода. Кроме того, у вас есть много графических инструментов, которые позволяют записывать рабочие процессы. Шуч, как Черный жемчуг, K2 и sharepoint designer.
Они очень часто используются и стоят того, чтобы учиться. Я начал использовать тогда в sharepoint и ms crm. Я теперь всегда смотрю для решения моих общих проблем.
вот несколько ссылок: mirosoft msdn.microsoft.com/en-us/netframework/default.aspx Wkik:http://en.wikipedia.org/wiki/Windows_Workflow_Foundation
[HOW TO] Create a simple Windows WORKFLOW Foundation | Tagalog Tutorial | #howto #9
автор: Chris Jones
WF в основном понимается довольно императивно-последовательность хронологических событий.
однако, если вы копаете глубже, вы можете комбинировать действия по-разному. Хорошим примером являются рабочие процессы на основе состояний, которые обычно также отображаются при представлении WF. WF позволяет перевести рабочий процесс в режим ожидания: текущее состояние сохраняется и перезагружается один раз, например, происходит внешнее событие. Таким образом, рабочие процессы могут быть полезны при отслеживании длительных взаимодействий, когда система должна ждать, например, завершения какого-либо внешнего процесса или взаимодействия пользователя с системой.
Я бы сказал, что WF не будет ужасно полезен в контексте пользовательского интерфейса. Они лучше подходят в качестве модуля для экспресс процессы интеграции нескольких сервисов, которые имеют тенденцию к изменению во времени.
с моей точки зрения, однако, заметно, что WF является продуктом версии 1: есть ряд неудобных вещей, которые могут направлять вас в код, который трудно поддерживайте, части инфраструктуры довольно сложны для использования, вы можете найти некоторые несоответствия API здесь и там.
существует также руководство, что вы не должны делать, если вы когда-либо захотите перенести свои рабочие процессы на следующее поколение WF.
Источник: askdev.ru
Общие сведения о Windows Workflow
Рабочий процесс — это набор элементов, которые называются действиями , которые хранятся в виде модели, описывающей реальный процесс. Рабочие процессы позволяют описывать порядок выполнения этапов краткосрочных и долгосрочных работ, а также зависимости между этими этапами. Работа проходит по модели от начала и до конца, а действия могут выполняться как людьми, так и системными функциями.
Среда выполнения рабочих процессов
Каждый работающий экземпляр рабочего процесса создается и обслуживается внутрипроцессной подсистемой среды выполнения, с которой ведущий процесс взаимодействует с помощью одного из следующих инструментов:
- WorkflowInvoker, который вызывает рабочий процесс как метод.
- WorkflowApplication для явного управления выполнением одного экземпляра рабочего процесса.
- WorkflowServiceHost для взаимодействия с помощью сообщений в многоэкземплярных сценариях.
Каждый из этих классов является оболочкой для среды выполнения основной операции, представленной как объект ActivityInstance, ответственный за выполнение операции. В домене приложения может быть несколько объектов ActivityInstance, работающих параллельно.
Каждый из трех предыдущих объектов взаимодействия узлов создается из дерева операций, называемого программой рабочего процесса. используя эти типы или пользовательский узел, который является оболочкой ActivityInstance , рабочие процессы могут выполняться внутри любого Windows процесса, включая консольные приложения, приложения на основе форм, Windows службы, ASP.NET веб-сайты и Windows Communication Foundation служб (WCF).
Компоненты рабочего процесса в хост-процессе
Взаимодействие между компонентами рабочего процесса
На следующей диаграмме показано взаимодействие компонентов рабочего процесса.
На предыдущей диаграмме используется метод Invoke класса WorkflowInvoker для вызова нескольких экземпляров рабочего процесса. WorkflowInvoker используется для упрощенных рабочих процессов, не требующих управления с сервера. Рабочие же процессы, требующие управления с сервера (например, возобновление Bookmark), должны выполняться с помощью Run. Чтобы вызвать экземпляр рабочего процесса, не обязательно ждать завершения другого. Среда выполнения допускает одновременное выполнение нескольких экземпляров рабочего процесса. Вызываются следующие рабочие процессы:
- Действие Sequence, содержащее дочернее действие WriteLine. Переменная Variable родительского действия привязана к InArgument дочернего действия. Дополнительные сведения о переменных, аргументах и привязке см. в разделе переменные и аргументы.
- Настраиваемое действие ReadLine . OutArgument действия ReadLine возвращается в вызывающий метод Invoke.
- Настраиваемое действие, происходящее от абстрактного класса CodeActivity. CodeActivity может обращаться к возможностям среды выполнения (например, к отслеживанию и свойствам) с помощью CodeActivityContext, доступного в качестве параметра метода Execute. Дополнительные сведения об этих функциях времени выполнения см. в разделе Отслеживание рабочего процесса иСвойства выполнения рабочего процесса.
См. также раздел
Источник: learn.microsoft.com
Windows Workflow Foundation – для чего и в каких случаях применять
Помню, еще в университете перед реализацией любого алгоритма мы описывали его в виде блок схемы, и только после этого переходили непосредственно к кодированию. Workflow, как одна из парадигм программирования, на ряду с процедурным и объектно ориентированным подходами, как раз и позволяет нам визуально реализовать любой процесс, используя набор предопределенных функциональных блоков (Activity), при этом, избавляя от его последующего кодирования.
Библиотека WF, являясь одной из реализаций парадигмы Workflow, предоставляет следующие основные возможности:
— богатый набор функциональных блоков;
— расширение набора стандартных функциональных блоков пользовательскими;
— сохранение и возобновление экземпляров Workflow в процессе их исполнения;
— использование Workflow дизайнера в вашем приложении;
— интеграция с WCF;
— пошаговая диагностика непосредственно в Workflow дизайнере;
— и многое другое.
Критерии применения
Как известно, каждой технологии своя область применения. Для определения необходимости использования WF при реализации конкретного алгоритма/процесса я применяю 3 критерия:
1. Реализация алгоритма/процесса постоянно меняется.
В нашей компании мы разработали подсистему Workflow, которая является ядром всех продуктов. Имея, к примеру, десятки клиентов наших продуктов, у которых десятки процессов, получаем сотни разных изменяющихся процессов.
2. Процесс/алгоритм имеет длительный срок выполнения.
В наших продуктах жизненный цикл процессов исчисляется днями и неделями. При этом, в случае сбоя или перегрузки сервера, процессы должны корректно возобновить и продолжить выполнение.
3. Нужно предоставить возможность изменения алгоритма/процесса конечному пользователю без вмешательства программиста.
Мы разработали свой собственный дизайнер, чтобы максимально упростить и облегчить редактирование процессов конечному пользователю (бизнес-аналитику). Это позволяет снять нагрузку с разработчиков. А возможность видеть и самим с легкостью менять свои процессы очень привлекательна для клиентов.
Таким образом, если актуально хотя бы одно из выше перечисленных требований, следует рассмотреть WF как возможный вариант реализации алгоритма/процесса.
Ознакомительный пример
В качестве ознакомительного примера использования WF я как раз и реализую Workflow процесс, который ответит на вопрос о целесообразности использования WF.
1. Создаю новый проект IsWWFUsefullSample используя шаблон Blank Solution:
2. Добавляю новый проект IsWWFUsefullSample.Activities используя шаблон Activity Designer Library:
3. Удаляю сущеcтвующий файл ActivityDesigner1.xaml и добавляю новый элемент используя шаблон Activity:
4. Открываю Activity в дизайнере и добавляю необходимые параметры типа Boolean:
— три входящих параметра соответствующих нашим критериям: IsLongRunning, IsChangeable, IsDesignerNecessary;
— один исходящий параметр для возврата результата: Result.
Стоит упомянуть, что на данный момент для описания выражений и типов внутри Workflow Activity можно использовать только синтаксис VB.Net. Обещают добавить поддержку С#.
5. Для анализа входящих праметров использую три вложенных If Activities (Toolbox -> Control Flow -> If), хотя конечно можно обойтись и одним. Для присвоения результата использую Assign Activity (Toolbox -> Primitives -> Assign). В итоге получается следующий алгоритм:
6. Workflow процесс готов. Для его использования добавляю новое приложение IsWWFUsefullSample.TestClient на основании шаблона Workflow Console Application:
7. Удаляю файл Workflow1.xaml.
8. Добавляю ссылку на проект IsWWFUsefullSample.Activities.
9. Реализую Main метод. Он предлагает пользователю ответить на три вопроса, запускает процесс Workflow с полученными исходными данными и выводит результат вычисления.
namespace IsWWFUsefullSample.TestClient
using System;
using System.Activities;
using System.Collections.Generic;
using System.Linq;
using System.Text;
///
/// Console program class.
///
public class Program
///
/// Program starting point.
///
/// Program parameters.
public static void Main(string[] args)
// Question answers
const string Yes = «yes»;
const string No = «no»;
var answers = new List < Yes, No >;
// Create new activity instance
var activity = new IsWWFUsefull();
var parameters = new Dictionary();
do
Console.WriteLine(«Please, answer following questions to determine necessity of using WWF.»);
Console.WriteLine();
// Read activity input parameters
parameters[«IsLongRunning»] = ReadAnswer(«Is process/algorithm long running?», answers) == Yes;
parameters[«IsChangeable»] = ReadAnswer(«Is process/algorithm frequently changed?», answers) == Yes;
parameters[«IsDesignerNecessary»] =
ReadAnswer(«Do you need a visual designer for your process/algorithm?», answers) == Yes;
// Execute activity
var result = WorkflowInvoker.Invoke(activity, parameters);
// Show result
Console.WriteLine();
if ((bool)result[«Result»])
Console.WriteLine(«Use WWF!»);
>
else
Console.WriteLine(«You don’t need WWF but still can use it if you like it :).»);
>
Console.WriteLine(«———————————————————————«);
Console.WriteLine();
>
while (ReadAnswer(«Do you want to proceed?», answers) == Yes);
///
/// Read answer from console.
///
/// Question text.
/// A list of posible
/// Answer text.
private static string ReadAnswer(string question, IList answers)
// Prepare answers prompting string
var answersString = new StringBuilder();
for (var i = 0; i < answers.Count; i++)
answersString.AppendFormat(i == 0 ? «» : «/», answers[i]);
>
// Read and validate the answer
var text = string.Empty;
var answer = string.Empty;
do
if (!string.IsNullOrEmpty(text))
Console.WriteLine(
string.Format(«» doesn’t belong to list of posible answers: ».», text, answersString));
>
Console.Write(string.Format(» (): «, question, answersString));
text = Console.ReadLine();
answer = answers.Where(a => a == text.ToLower()).FirstOrDefault();
>
while (answer == null);
10. Запускаю и тестирую приложение:
Исходники проекта можно загрузить здесь.
Всем удачных архитектурных решений и приятного кодирования!
Источник: habr.com
Обзор Windows Workflow Foundation на примере построения системы электронного документооборота
Windows Workflow Foundation (WF) — уже не новая технология компании Microsoft, разработанная для создания и выполнения потоков работ (Workflow). Однако на данный момент она используется не очень активно, а многие разработчики вообще не слышали про нее. И мое знакомство с ней произошло относительно недавно. Тогда как применение WF при реализации некоторых категорий задач может быть более чем оправданным. В связи с этим хочу рассказать о самой технологии, области ее применения и рассмотреть пример ее использования при реализации конкретного проекта.
Ключевым понятием в WF является Активность (Activity) — класс выполняющий единицу работы в среде выполнения WF. Термины Поток работ и Активность являются синонимами в контексте WF. Каждая Активность выполняет какое-либо действие — буквально программный код (например, на языке C#). Активности имеют входные и выходные параметры, переменные.
Активность может представлять собой композицию из нескольких дочерних Активностей, в таком случае в процессе работы родительская Активность управляет запуском своих дочерних элементов в среде выполнения в соответствии со своей внутренней логикой. Например, Активность Parallel из базовой библиотеки Активностей (входит в поставку .NET Framework) запускает дочерние элементы параллельно. А поток работ If, как не сложно догадаться из названия, запускает один из двух дочерних элементов в зависимости от результата проверки заданного условия.
Таким образом, в конечном итоге создание потока работ обычно сводится к составлению в дизайнере блок-схемы на основе Активностей базовой библиотеки в сочетании с Активностями собственной разработки. Поток работ, построенный в дизайнере, кодируется на языке XAML (расширение XML). Внешний вид дизайнера представлен на рисунке.
“Хорошо, но для чего это мне? — спросите вы. — Я лучше напишу килограмм кода, чем буду копаться с блоками и стрелками”.
Действительно, не с этого стоило начинать. Мы, разработчики, привыкли писать и читать код, хорошо это делаем и любим это делать. Код — компактнее. В коде мы можем оставлять комментарии. Изменения в коде легче отслеживать в системе контроля версий. Можно придумать еще 100500 аргументов, наверное.
Но, оказывается, технология WF обладает следующими замечательными свойствами.
Во-первых, алгоритм, выраженный в виде схемы WF, может автоматически сохранять и восстанавливать свое состояние. Это не только освобождает нас от работы, но и открывает большие возможности по масштабированию нашего приложения. Лучше это показать на следующей картинке.
В момент А на первом компьютере поток работ доходит до точки, когда для продолжения работы требуются входные данные. Далее, происходит сохранение состояния (значений всех переменных, аргументов в указанной точке). Затем, спустя какой-то промежуток времени, поступают требуемые входные данные, и в момент Б происходит восстановление состояния, продолжение работы алгоритма с сохраненной точки на другом компьютере. Было бы замечательно, если бы таким свойством обладал любой код на C#, не правда ли?
Сейчас принято разделять логику на независимые участки кода. В частности, и для того, чтоб обеспечить масштабируемость. Для примера рассмотрим два метода: LogOn и GetData. Пока очевидно, что вначале вызывается метод LogOn, за ним — GetData.
Но когда таких методов становится много, нам бывает сложно разобраться в логике (она может быть “размазана” по всему приложению) и порядке их выполнения. Использование WF снимает данную проблему: мы имеем разделенные задачи, которые связывает нить общего потока работ, отображаемого в виде простой для понимания блок-схемы, что даже неопытный разработчик сможет быстро разобраться в правилах запуска.
Следующая совсем уже прикладная особенность WF, которую не стоило бы обходить вниманием — это возможность вынести программную логику в область конфигурации системы, если необходима такая гибкость. То есть, из компонентов стандартной поставки .NET Framework можно собрать дизайнер в рамках своего программного продукта.
На этапе настройки системы происходит модификация потоков работ, управление их свойствами (например, условиями запуска). Далее, при эксплуатации в нужных точках выполняется не “хард-код”, а созданные ранее Активности. Таким образом, WF в сочетании с Dynamic LINQ является мощным инструментом для придания системе такого качества, как настраиваемость. Но, конечно, нельзя сказать, что для настройки такой системы вообще не потребуются навыки .NET программирования.
Важно, чтобы применение какого-либо фреймворка было действительно оправдано. Классический пример анти-паттерна необоснованного применения технологии я наблюдаю в текущем проекте в приложении, реализованном стороной заказчика своими силами. В нем используется схема WF фактически в качестве замены коду на C#, которая в итоге к тому же сильно деградировала вследствие незнания технологии всеми разработчиками, производившими модификацию. Но надо сказать, что получившийся “франкенштейн” неспешно, но все же выполняет возложенные на него обязанности 1 .
Нельзя применять WF без использования указанных выше преимуществ. В таком случае мы эксплуатируем недостатки технологии, несмотря и, может быть не понимая, достоинств. Это часто бывает при изучении новой технологии, но как многие думают, дополнительная строчка в резюме стоит трудозатрат работодателя на поддержку неуместного кода. Но, справедливости ради хочу сказать, что в таком случае польза от полученных знаний и навыков будет не очень велика, как мне кажется.
Когда к нам в команду поступила задача реализовать User Store типа: “Как директор, я хочу, чтобы в системе заявления на отпуск сотрудников согласовывались у непосредственного руководителя, затем поступали в отдел кадров для составления приказа, а приказ, после моей подписи, уходил бухгалтерию для начисления отпускных, чтобы исключить ошибки и задержки, уменьшить затраты”, — оказалось, что технология WF идеально подходит для ее реализации. При этом могут быть использованы все описанные выше возможности.
В следующей части рассмотрим практическую иллюстрацию применения WF на данном примере.
1 В проекте используется устаревший WF 3.0. Известно, что в рамках .NET Framework 4.0 WF был полностью переписан Microsoft в новом пространстве имен. Оптимизация производительности — одно из улучшений.
Источник: savepearlharbor.com
Каков ваш опыт работы с Windows Workflow Foundation?
Я оцениваю использование WF в бизнес-приложениях в Интернете, и мне хотелось бы услышать несколько недавних рассказов об этой технологии из первых рук.
Мой главный интерес здесь заключается в улучшении ремонтопригодности проектов и, возможно, в повышении производительности разработчиков при работе со сложными процессами, которые часто меняются.
Мне очень нравится идея WF, однако она кажется относительно неизвестной, и во многих старых комментариях, которые я встречал, упоминается, что она чрезвычайно сложна, когда вы в нее попадаете.
Если он чрезмерно спроектирован до такой степени, что непригоден (или плохой компромисс) для небольшого или среднего проекта, это то, что мне нужно знать.
Конечно, он вышел с конца 2006 года, так что, возможно, он созрел. Если это так, то это еще одна информация, которая будет очень полезна!
22.09.2008 18:26
Получить данные из формы с помощью JS очень просто: вы запрашиваете элемент формы, передаете его конструктору new FormData() и, наконец, получаете.
Если вы хотите создать свое собственное правило валидации, Laravel предоставляет возможность сделать это. Создайте правило с помощью следующей.
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно.
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату.
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно.
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей.
Перейти к ответу Данный вопрос помечен как решенный
Ответы 12
Это действительно зависит от того, что вы хотите с ним делать. Я использовал его лишь немного, но по сравнению с более зрелыми продуктами, такими как MetaStorm (я знаю, что технически это BPM, но все еще есть компонент рабочего процесса), Process Choriographer и рабочий процесс IBM MQ, здесь нет сравнения. Это просто недостаточно зрело.
С другой стороны, это бесплатно там, где нет других, и, вероятно, может выполнить свою работу. Я не знаю, поставлю ли я на него многомиллионную операцию, но с меньшими операциями я бы сделал еще один шанс. Настоящее препятствие, с которым вы столкнетесь, — это изменение мыслительного процесса, которого это требует. Если у вас нет разработчиков, которые раньше работали с государственными системами, это может стать настоящим препятствием.
22.09.2008 18:32
Мы использовали WF в большом приложении SharePoint, и я могу сказать, что это нормально. Он обладает большой мощностью и гибкостью. и, как упоминает Кевин, как только вы разберетесь с основными концепциями рабочих процессов, вы сможете делать с ними практически все, что захотите.
С другой стороны, у него есть действительно серьезные проблемы, такие как отсутствие управления версиями, что может серьезно повредить вашему приложению в будущем. Нам пришлось развернуть до 3 параллельных версий одного и того же рабочего процесса с именами xxx-v1, xxx-v2 и xxx-v3, чтобы старые экземпляры работали, а новые экземпляры использовали обновленные версии. Настоящая заноза в заднице. Да, и там также есть несколько действительно неинтуитивных концепций (токены корреляции, черт возьми ??)
Спасибо за ответ! Параллельные версии — имеет ли это отношение к «процессу регидратации»? Как это работает?
Прямо сейчас в SharePoint есть мощные средства управления версиями для рабочих процессов. Конечно, сейчас это две версии, но я подумал, что обновлю.
Это было исправлено в WF 4.5 (теперь можно запускать несколько версий одновременно), добавлена новая функция карты, которая позволяет системному администратору переносить существующие экземпляры WF в новую версию (с некоторыми ограничениями на то, что можно перенести, конечно).
22.09.2008 18:51
Я рассматриваю MS WF как низкоуровневую библиотеку рабочих процессов, а не как полноценный продукт для корпоративных рабочих процессов, такой как K2. Это позволит вам создать приложение с поддержкой рабочего процесса, но само по себе не является приложением рабочего процесса. Мой опыт работы с ним в этом качестве был положительным, хотя нам пришлось построить вокруг него большую часть нашей собственной инфраструктуры (паб-фреймворк, менеджер жизненного цикла рабочего процесса и т. д.). Большая часть документации довольно упрощена и не охватывает создание корпоративного приложения рабочего процесса на основе MS WF.
22.09.2008 19:15
Брайан, я не могу ответить на ваш комментарий, но в любом случае под управлением версиями я имею в виду внесение изменений в базовый код рабочего процесса без нарушения работы уже запущенных экземпляров и постепенное применение обновлений к существующим рабочим процессам. Я не уверен насчет «стандартного» WF, но, по крайней мере, в среде SharePoint нет концепции версий рабочего процесса, поэтому новые версии должны развертываться как совершенно другие рабочие процессы, что становится кошмаром обслуживания. Это не имеет ничего общего с «регидратацией», регидратация — это процесс, с помощью которого вы возвращаете «спящий» рабочий процесс к активности после некоторого события или изменения состояния. Это прозрачно обрабатывается средой выполнения рабочего процесса.
22.09.2008 19:19
WF интегрирован в SharePoint (WSS 3.0), и я создал довольно много рабочих процессов для различных веб-сайтов SharePoint, так что я могу рассказать о своем опыте использования WF в SharePoint. По сравнению с другими фреймворками рабочих процессов WF показывает хорошие результаты. Он стабилен (у меня не было загадочных ошибок), рабочие процессы довольно легко проектировать (спасибо конструктору рабочих процессов в Visual Studio), и вы можете использовать не только последовательные, но и рабочие процессы с конечным автоматом.
Это, конечно, не идеально, и разработчику определенно понадобится время, чтобы понять концепцию (т.е. модель деятельности); но он определенно пригоден — даже для «небольших задач».
22.09.2008 19:26
- You have a long-running process.
- You have a process that changes frequently.
- You want a visual model of the process.
Итак, если у вас есть такие требования, то WF — хороший кандидат. Конечно, это относительно сложно, но отметьте, что проблемы, которые пытаются решить, также являются сложными (а иногда и очень сложными). IMHO, это очень сложно, например, для обезвоживания / регидратации объектов, к которым прикреплены обработчики событий (с событиями, которые могут запускаться, когда объект не находится в памяти).
Я не могу судить, что вы имеете в виду под «малым и средним проектом», но в целом я бы сказал, что если ваш проект имеет хотя бы два требования из приведенного выше списка, то вы можете рассматривать WF как решение.
22.09.2008 19:38
Ответ принят как подходящий
Windows Workflow Foundation — очень эффективный продукт, но все еще очень в своей 1-й версии 🙁
К основным причинам использования можно отнести:
- Визуальное моделирование бизнес-требований.
- Отделение бизнес-логики от бизнес-правил и вынесение правил в виде файлов XML.
- Отделение вашего бизнес-потока от вашего приложения за счет экстернализации ваших рабочих процессов в виде файлов XML.
- Создание длительных процессов с автоматической возможностью реагирования, если в течение длительного периода времени ничего не происходит. Например, счет не оплачивается.
- Автоматическое сохранение длительных рабочих процессов для снижения использования ресурсов и возможности перезапуска процесса и / или машины.
- Автоматическое отслеживание рабочих процессов в соответствии с бизнес-требованиями.
WF поставляется как библиотека / фреймворк, поэтому большую часть времени вам нужно написать хост, который создает экземпляр среды выполнения WF. Тем не менее, использование WCF, размещенного в IIS, является жизнеспособным решением и экономит много работы. Однако связь WCF / WF далеко не идеальна и требует серьезной работы. Подробнее см.
Здесь http://msmvps.com/blogs/theproblemsolver/archive/2008/08/06/using-a-transactionscopeactivity-with-a-wcf-receiveactivity.aspx. Ожидайте довольно много изменений / улучшений в следующей версии.
WF (и WCF) занимают центральное место во многих новостях Microsoft. Вы можете ожидать интересных анонсов во время PDC.
Кстати, поддержание нескольких версий рабочего процесса требует немного работы, но это в основном стандартный .NET. Я только что написал серию сообщений в блоге на эту тему, начиная с здесь: http://msmvps.com/blogs/theproblemsolver/archive/2008/09/10/versioning-long-running-workfows.aspx
О визуальном моделировании бизнес-требований. Теоретически это хорошо работает с разделением намерения и реализации. Однако на практике вы отбросите довольно много дополнительных действий в рабочем процессе чисто по техническим причинам, и такого рода поражение не приведет к цели, поскольку вы должны сказать бизнес-аналитику, чтобы он игнорировал половину форм и линий.
Не думаете ли вы об обновлении этого ответа, раз уж мы сейчас на версии 4? 🙂
22.09.2008 20:01
Никогда не пробовал WFF, но я помню, как читал эта статья о WFF от Леона Бамбрика, где он в основном говорит, что весь жанр инструментов разработки программного обеспечения — ерунда. Может помочь вам решить, так или иначе.
В некоторой степени вводит в заблуждение и не имеет отношения к WF, учитывая, что автор заявляет в комментарии: «Biztalk — это не тот продукт, который я имел в виду, когда писал это, и на самом деле Windows WF тоже не является. Это некоторые из предложений сторонних производителей ( и особенно то, как они «продаются»), что меня раздражает ».
22.09.2008 20:44
У нас был проект, в котором я участвовал, используя рабочие процессы. Идея (от руководства) заключалась в том, что мы, программисты, напишем действия рабочего процесса вместе с «движком» и фреймворком. Затем непрограммисты позаботятся обо всем остальном, скомпилировав свои собственные рабочие процессы в библиотеки DLL, которые движок загрузит автоматически.
Руководство было продано этой идее непрограммистов, использующих Workflow для помощи в разработке программного обеспечения, и это было в значительной степени пустой тратой времени. Проблема, которую мы пытались решить с помощью этого проекта, была относительно сложной, и мы с самого начала знали, что программное обеспечение придется модифицировать почти постоянно (его расчеты зависели от других компаний и правительств).
Конечным результатом было то, что мы не смогли сделать модули рабочего процесса достаточно универсальными, чтобы их мог использовать кто-то другой. Таким образом, программисты были теми, кто был вынужден работать с рабочими процессами, и все рабочие процессы мешали нам.
/ Полностью согласен. Мы внедрили WF, чтобы пользователи могли изменять бизнес-правила, но в результате разделения правила стали настолько сложными, что даже программисты начали бороться.
03.10.2008 22:30
В прошлом году мы завершили работу над приложением с WF, которое сейчас используется в качестве основы невероятно огромной системы, которая используется очень крупным банком для его ипотечного процесса. Процесс pe состоит из множества этапов, от заявки клиента до утверждения кредита.
Хотя это был успех, на пути было столько проблем и кризисов. И это не стоит усилий для небольших проектов.
Не уверен, что следил за Orkun — значит, вы использовали Agile для этого, и это не сработало? И вы также не рекомендуете agile для небольших проектов?
Нет, Брайан, я говорил о WWF. Извините за недопонимание.
23.01.2009 16:40
Я использую Workflow 4.0 в течение последних нескольких месяцев и, хотя в основном впечатлен, мне было чрезвычайно трудно научиться.
Для самой последней версии (которая поставляется с .NET 4.0 RC) практически нет документации в Интернете, в каких-либо книгах или нет доступных учебных курсов. Я нашел только статьи, относящиеся к ныне несуществующей версии 3.0. Даже документация MSDN поверхностна.
Дизайнер рабочего процесса не настолько интуитивно понятен, как должен быть, поэтому учиться очень сложно. Мне приходилось полагаться на ответы одного человека на StackOverflow (кстати, спасибо, Морис!) — и без его помощи я был бы нафарширован.
Итак, в общем, я думаю, что у него есть потенциал, но вы были бы безумны, если бы его изучили — подождите, пока не появятся дополнительные тренинги, документация и книги, иначе вы начнете заниматься этим вслепую!
Спасибо за обновление — я впервые слышу о Workflow 4.0.
07.04.2010 17:32
Трудно научиться. Довольно гибкий. Не путать с визуальным инструментом для конечных пользователей, только для программистов. Не уверен, нравится ли мне подход на основе свойств зависимости.
07.04.2010 17:45
Другие вопросы по теме
Как предотвратить создание промежуточных объектов в каскадных операторах?
Как привязать результат DataTable.Select () к элементу управления ListBox?
Разброс / сбор асинхронного ввода-вывода сокетов в .NET
Самый простой способ иметь файл конфигурации в приложении Windows Forms C#
Можно ли отправить набор идентификаторов в качестве параметра SQL ADO.NET?
HTML-тег ClientID в проекте .NET
Злоупотребление XmlReader ReadSubtree ()
Мониторинг запущенных приложений .net
Загрузка DLL из каталога / bin
Обновление ссылки на используемую переменную-член
Похожие вопросы
Стресс-тестирование ASP.NET/IIS с WCAT
Добавление собственных заголовков
ASP.NET: как создать переключатели и привязать их к DetailsView?
Скрыть строку gridView в asp.net
HTML-тег ClientID в проекте .NET
Есть ли какие-нибудь утилиты, которые помогут мне реорганизовать CSS?
Исключение HTTP, созданное при проверке состояния просмотра
Как я могу поделиться значением переменной между классическим asp, .NET и javascript?
Как перечислить определенные изображения в какой-либо папке на веб-сервере?
Загрузка DLL из каталога / bin
Правовая информация
Находите ответы на сложные технические вопросы по программированию, с которыми сталкиваются инженеры по всему миру в своей ежедневной практике на сайте RedDeveloper.
Источник: reddeveloper.ru