К рабочему процессу или не к рабочему процессу?


Я отвечаю за команду разработчиков, которые вот-вот приступят к разработке облегченной системы страховых выплат. Система включает в себя множество ручных задач и бизнес-процессов, и мы рассматриваем использование Windows Workflow (.NET 4.0).

пример бизнес-доменов: Владелец полиса звонит в контактный центр для подачи заявления. Это "событие" запускает две подзадачи, которые выполняются вручную параллельно и могут занять длительное время полный;

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

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

  1. набор навыков-глядя на средний набор навыков разработчика я не вижу многих разработчиков, которые понимать или знать рабочий процесс.
  2. ремонтопригодность-кажется, что в сообществе мало поддержки для проектов WF 4.0, и это в сочетании с отсутствием набора навыков вызывает озабоченность по поводу ремонтопригодности.
  3. барьер для входа - у меня есть ощущение, что рабочий процесс Windows имеет крутую кривую обучения, и это не всегда так легко подобрать.
  4. новый продукт - поскольку рабочий процесс был полностью переписан для .NET 4.0, я вижу продукт как продукт первого поколения и может не иметь необходимой стабильности.
  5. репутация-предыдущие версии рабочего процесса не были хорошо приняты, считались трудными для разработки и привели к плохому пониманию бизнеса.

поэтому мой вопрос заключается в том, должны ли мы использовать Windows Workflow (WF) 4.0 для этой ситуации или есть альтернативная технология (например, Простая Государственная Машина и т. д.) или даже лучше движок использовать?

9 113

9 ответов:

Я сделал несколько проектов WF4, поэтому давайте посмотрим, могу ли я добавить какую-либо полезную информацию к другим ответам.

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

Что касается ваших проблем, вы правы. В основном WF4 является новым продуктом и не имеет некоторых важных функций и имеет некоторые шероховатости. Существует кривая обучения, вы должны сделать некоторые вещи по-другому. Главное-это длительная работа и сериализация, это то, к чему средний разработчик не привык и требует некоторой мысли, чтобы получить право, поскольку я слишком часто слышу, что у людей есть проблемы с сериализацией контекста данных entities framework.

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

Так что же я вам советую? Не принимайте большую ставку на неизвестную, и для вас недоказанную, часть технологии. Сделайте небольшую, некритическую часть приложения, используя WF4. Таким образом, если он работает, вы можете расширить его, но если он не работает, вы можете вырвать его и заменить его более традиционным .NET код. Таким образом, вы получаете реальный опыт работы с WF4 вместо того, чтобы основывать решение на информации из вторых рук, и вы узнаете новую и мощную технологию в этом процессе. Если возможно, возьмите курс на WF4, так как это сэкономит вам много времени в получении до скорости (бесстыдный self plug здесь).

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

Я пришел к этой дилемме пару раз, и я решил не использовать фонд рабочего потока. Некоторые соображения (похожие на ваши) были

  1. задействованные рабочие потоки были намного проще (комбинация государственной машины и последовательных действий), и выполнение этого в WF кажется чрезмерным для вовлеченных усилий.
  2. кривая обучения для разработчиков, чтобы понять и эффективно использовать WF считалась высокой. Таблица переходов состояния, описывающая допустимые переходы и действия, которые необходимо предпринять, используются для дополнительной гибкости, и разработчики были довольны этим, легко понимая концепцию и цель.
  3. шансы изменения бизнес-процессов были невелики и рудиментарные изменения были легко возможны с помощью таблицы переходов. Изменение перехода будет означать сценарий базы данных, а изменение действий приведет к новому выпуску/исправлению. Однако вероятность такого события была признана низкой.

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

мы используем WF 4.0 последние пару месяцев. Я должен сказать, что это сложно думать о рабочем процессе. Тем не менее, я могу сказать вам, что это того стоит. Мы очень мало знали, когда начинали. Мы купили начинающую и профессиональную книгу для WF 4.0, которая помогла. Я сам смотрел много видео в интернете и следил за PDC 2009 за их последними новостями о WF 4.0 и о том, как он отличается от предыдущих несколько отстойных версий. Одна важная вещь, для которой мы должны были предложить решение, - это то, как мы может работать с аргументами In / Our в рабочем процессе, не ограничивая наши пользовательские действия определенными типами данных и как передавать параметры между действиями. Я придумал хорошее решение для этого, и опыт рабочего процесса, который у нас есть до сих пор, совсем не плох. На самом деле, у нас есть приложение с интенсивным рабочим процессом, которое становится все больше и больше, и я действительно не могу представить себе, что решаю его в другой среде. Мне нравится визуальный эффект, который он имеет: он держит меня подальше от деталей если / else etc создает и делает бизнес-правила очевидными таким образом, что не заставляет вас погружаться в строки кода, чтобы знать, что происходит или как исправить какую-либо ошибку. Кстати, проект, над которым мы работали очень похож на то, что вы описали и средних проектов. Вы можете сказать из моих слов, что мне это нравится, и я рекомендую его, Хотя это включает в себя некоторые риски, поскольку это новая технология, и вы должны придумать некоторые инновационные идеи.

мой 2 центы...

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

Я еще не пробовал WF 4.0, но на основе опыт работы с BizTalk и WF 3.5 я думаю, что это будет похоже.

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

Если вы решили использовать WF 4.0, я настаиваю, чтобы вы проверили возможность запуска WF в качестве службы WCF, размещенной в Windows AppFabric. AppFabric предоставляет некоторые из функциональности коробки для размещения WFs.

Я думаю, что сегодня не имеет смысла говорить о рабочем процессе в WF4 как о технологическом выборе для такого рода проблем. Что действительно уместно, как упоминал Ладислав Мрнка выше, это Службы WCF WF, размещенные в AppFabric.

две основные концептуальные проблемы программисты имели в переходе к этому технология: a) корреляция сообщений и шаблоны обмена сообщениями б) рабочие процессы и модульное тестирование Например, в стандартных системах на C# рабочий процесс редко является явным и поэтому редко тестируется на единицу. Общий рабочий процесс остается для тестирования сценариями принятия или интеграции. Представьте явный WF как программный артефакт, и внезапно стандартные разработчики захотят попробовать и протестировать его, что обычно не стоит делать.

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

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

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

для того, чтобы сделать систему страховых претензий любой сложности, которая включает в себя роли и "подзадачи" вам действительно нужно решение BPM, а не только рабочий процесс. Workflow Foundation 4.0 является гладким, но он действительно не приближается к функциональным возможностям продукта BPM.

решения БПМ, как Метасторм БПМ, Глобал360, и K2.NET обеспечьте ориентированный на человека рабочий процесс, задачи, роли и системную интеграцию, которые могут моделировать и оптимизировать бизнес-процессы, такие как ваш страховой иск система. Использовать ASP.NET для построения интерфейса, который интегрируется с рабочим процессом двигателя bpm как их строили в дизайнеры, как правило, ограничены и заставить вас использовать свой собственный встроенный веб-контроль, который обычно не столь полнофункциональный как веб-контроль ASP.NET .

идите с технологией, которую ваша команда знает и чувствует себя комфортно. Workflow Foundation - это не продукт, который вы можете использовать сразу , а скорее набор элементов, которые вы можете встроить в свое приложение для создания системы рабочих процессов. IMHO логика рабочего процесса-это наименее важная часть технологии, прежде всего вам нужно сосредоточиться на графическом интерфейсе, потому что владельцы бизнеса не увидят ничего, кроме графического интерфейса. Но если ваша система успешна, то вы должны быть готовы к бесконечности таким образом, вы должны реализовать свою бизнес-логику, чтобы ее было легко изменить и легко разделить на отдельные процессы в соответствии с различными потребностями пользователей (иногда противоречащими). BPM помогает в этой задаче, поскольку позволяет иметь отдельные, несколько версий бизнес-процессов, удовлетворяющих различным бизнес-потребностям. Для этого вам не нужен полноценный движок BPM, но полезно закодировать свою бизнес-логику, чтобы ее можно было версировать и разделять на отдельные бизнес-процессы-самое худшее, что нужно иметь, - это необъяснимый и запутанный blob кода, который обрабатывает " все " и который никто не может понять. Есть много идей для этого-государственные машины, DSLs (доменные языки), скрипты и т. д. - Вы решаете, какой должна быть реализация. Но вы всегда должны думать в терминах бизнес-процессов и организовывать свою логику соответствующим образом, чтобы она отражала эти процессы. И будьте готовы к сосуществованию множества вариантов бизнес-логики и структуры данных-это самая сложная задача проектирования имхо.

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

проблема в том, что у нас нет большого количества ресурсов для настройки/обслуживания системы и затрат на лицензию, если это не является довольно основным для нашего бизнеса. О рабочем процессе Azure / Window не могло быть и речи. Мы также пробовал довольно много больших наборов BPM, которые там есть, и столкнулся с большим количеством проблем: они предлагают вам довольно nerf-ed визуальный опыт программирования. Программирование просто не может быть полностью сделано в визуальной среде. Вы можете увидеть список не-BPM программного обеспечения это действительно нас заинтересовало. Такие инструменты, какDecisions.com и IFTTT аккуратны. На самом деле решений может быть хорошо подходят для вас, так как он интегрируется с продуктами Microsoft, как я понял.

конец из истории следует, что мы свернули наше собственное программное обеспечение как для предпринимательской авантюры, так и для внутреннего использования. Рабочие процессы могут быть написаны и интегрированы с любым API, а также человеческие процессы непосредственно с формами. Например, мы интегрируем рабочие процессы для включения новых разработчиков, которые вытаскивают/обновляют много другого программного обеспечения. Это довольно зеленый, но чрезвычайно мощный в сценариях рабочего процесса. Вы можете оформить заказ Nebri здесь. Поскольку основанный на правилах подход срабатывает на событиях, архитектура совершенно разный. Это уменьшает количество кода, который вы должны написать, и имеет компромисс скорости. Но он может обрабатывать такие вещи, как комплексная обработка событий легко, так как Python находится в вашем распоряжении.

Я нахожусь в ситуации, когда мне нужно использовать 4.0, поскольку .NET 4.5 еще не аккредитован для использования в нашей среде prod. У меня было большое понимание боли в целом, как получить длительные рабочие процессы, которые будут соответствовать нашим бизнес-потребностям, но в конечном итоге нашли элегантное решение. Это не то, что просто кто-то приходит позже, чтобы поддержать может просто забрать с легкостью, потому что есть так много, чтобы думать, но я верю в WF как инструмент для управления состояниями рабочего процесса.

одна большая вещь, которую я беру проблема с WF 4.0, хотя это комментарий Мориса:

основное никогда не менять существующий рабочий процесс, всегда создавать новый

Это здорово, если вы просто хотите новую версию, но что, если у вас есть 50 000 сохраненных рабочих процессов и в какой-то момент понимаете, что в рабочем процессе есть ошибка? Вы должны иметь возможность обновлять xamlx и по-прежнему быть связаны с существующими экземплярами. Я попытался распаковать различные столбцы метаданных в SQL Server таблица экземпляров, чтобы найти что-то, что связывает экземпляр с определением рабочего процесса без каких-либо успехов.

Я написал приложение синхронизации для импорта данных из старой системы в наш новый WF 4.0 driven one. Мы в основном загружаем данные в систему, а затем запускаем процесс, который автоматически вызывает шаги рабочего процесса и вызывает методы проверки, по сути, издеваясь над взаимодействием с пользователем. Это только действительно хорошо работало с нами из-за архитектуры мы реализовано для доступа к узлу службы рабочих процессов. Это здорово, как один, где после запуска вы можете пройти и сделать проверки, чтобы обеспечить согласованность процесса миграции данных, но необходимость использовать этот подход для потенциально сотен тысяч случаев, когда система находится в прямом эфире, на самом деле не является подходом, который прививает уверенность и перегружает процесс интеграции простыми исправлениями ошибок.

моя рекомендация заключается в том, что вы полностью избегаете WF 4.0 и просто переходите прямо к 4.5 если вы окружение поддерживает его. Динамические обновления и бок о бок версии он обеспечивает обслуживает для исправления ошибок и WF версии все из коробки. Мне еще предстоит выяснить, как именно as 4.5 все еще не аккредитован для использования нашим клиентом, но с нетерпением ждет этой возможности.

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

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