Para fluxo de trabalho ou não para fluxo de trabalho?

122

Sou responsável por uma equipe de desenvolvedores que estão prestes a iniciar o desenvolvimento de um sistema de reivindicações de seguro leve. O sistema envolve muitas tarefas manuais e fluxos de trabalho de negócios e estamos analisando o uso do Windows Workflow (.NET 4.0).

Um exemplo do domínio comercial é o seguinte: Um tomador de seguro liga para o contact center para apresentar uma reclamação. Esse "evento" dispara duas subtarefas que são acionadas manualmente em paralelo e podem levar um longo tempo para serem concluídas;

  1. Verificar se há fraude no cliente - Um processo manual pelo qual um operador chama várias empresas de crédito para verificar e avaliar o potencial de um cliente fraudulento. A partir daqui, a subtarefa pode inserir um número de subestados (verificação em andamento, verificação de referência com falha, verificação de referência aprovada, etc.)
  2. Enviar item ao centro de reparos - Um processo manual em que o item para o qual o tomador do seguro apresentou a solicitação é enviado ao centro de reparos a ser consertado. A partir daqui, a subtarefa pode inserir um número de subestados (Aguardando reparo, Em andamento, Reparado, Publicado, etc). A reivindicação só pode prosseguir quando o status de cada subtarefa atingir um status predefinido (com base nas regras de negócios).

Aparentemente, o Workflow é realmente a melhor opção tecnológica; no entanto, tenho algumas preocupações ao usar o WF 4.0.

  1. Conjunto de habilidades - Observando o conjunto de habilidades médio do desenvolvedor, não vejo muitos desenvolvedores que entendem ou conhecem o Workflow.
  2. Manutenção - Parece haver pouco apoio dentro da comunidade para projetos do WF 4.0 e isso, juntamente com a falta de conjunto de habilidades, suscita preocupações em relação à manutenção.
  3. Barreira à entrada - Sinto que o Windows Workflow tem uma curva de aprendizado acentuada e nem sempre é fácil assimilá-lo.
  4. Novo produto - Como o fluxo de trabalho foi completamente reescrito para o .NET 4.0, vejo o produto como um produto de primeira geração e talvez não tenha a estabilidade necessária.
  5. Reputação - As versões anteriores do Workflow não foram bem recebidas, consideradas difíceis de desenvolver e resultaram em má aceitação dos negócios.

Portanto, minha pergunta é: devemos usar o Windows Workflow (WF) 4.0 para essa situação ou existe uma tecnologia alternativa (por exemplo, Simple State Machine , etc.) ou mesmo um mecanismo de fluxo de trabalho melhor para usar?

Kane
fonte
10
Vários upvotes e nenhuma resposta ... parece que estamos todos no mesmo barco ...;)
CJM
1
Hehehe ... talvez a falta de respostas seja por causa do Friday-itis?
Kane
2
Para os lotes de grandes recursos na WF4 confira endpoint.tv
Ron Jacobs
4
Não, eu decidi contra o WF4 e estou feliz por ter feito - simplesmente não há pessoas suficientes com conhecimento sobre o WF4, além disso, os negócios mudaram de idéia; muitas vezes, usar o WF4 tornaria o sistema incrivelmente difícil de manter e dar suporte.
Kane
10
@Kane - você deixa de fora um detalhe interessante: o que você acabou fazendo ao invés do WF4? :)
Peter Lillevold 1/11

Respostas:

51

Eu fiz vários projetos WF4, então vamos ver se posso adicionar informações úteis para as outras respostas.

A partir da descrição do seu problema comercial, parece que o WF4 é uma boa combinação, portanto não há problemas.

Em relação às suas preocupações, você está certo. Basicamente, o WF4 é um produto novo e carece de alguns recursos importantes e possui algumas arestas. Há uma curva de aprendizado, você precisa fazer algumas coisas de maneira diferente. O ponto principal é a execução longa e a serialização, algo que o desenvolvedor comum não está acostumado e que requer um certo raciocínio, pois ouço com muita frequência que as pessoas têm problemas para serializar o contexto de dados da estrutura de uma entidade.

Na maioria das vezes, o uso de serviços de fluxo de trabalho hospedados no IIS / WAS é a melhor rota para executar esses tipos de fluxos de trabalho de longa duração. Isso dificulta a solução do problema de controle de versão, basta que a primeira mensagem retorne a versão do fluxo de trabalho e faça disso parte de cada mensagem subsequente. Em seguida, coloque o roteador WCF entre as rotas da mensagem para o terminal correto com base na versão. O básico é nunca alterar um fluxo de trabalho existente, sempre criar um novo.

Então, qual é o meu conselho para você? Não faça uma grande aposta em uma peça de tecnologia desconhecida e para você não comprovada. Faça um pequeno pedaço não crítico do aplicativo usando o WF4. Dessa forma, se funcionar, você poderá expandi-lo, mas se falhar, poderá removê-lo e substituí-lo pelo código .NET mais tradicional. Dessa forma, você obtém experiência real com o WF4 em vez de ter que basear uma decisão em informações de segunda mão e aprende uma nova e poderosa tecnologia no processo. Se possível, faça um curso no WF4, pois você economizará muito tempo para se atualizar (vergonhoso auto plug aqui ).

Sobre a Simple State Machine. Eu não o usei, mas fiquei com a impressão de que era para máquinas de estado de execução curta, na memória,. Um dos principais benefícios do WF4 são os aspectos de longo prazo.

Maurice
fonte
2
Eu concordo, o WF4 derreteu completamente meu cérebro. Lamento a decisão (não minha) de usá-lo no momento e deveríamos ter esperado pelo .NET 4.5. Se você cometer um erro no fluxo de trabalho e surgirem erros, após corrigir o erro no design do WF, não será possível correlacionar facilmente novamente com os fluxos de trabalho persistentes de execução longa. Você basicamente tem que começar de novo. 3.5 tinham DynamicUpdates, embora o deixassem de 4.0. A atualização dinâmica e a versão lado a lado na 4.5 são fundamentais para o sucesso de uma solução Windows WF na minha experiência. Isso é apenas uma pequena parte da imagem.
Stephen York
17

Cheguei a esse dilema algumas vezes e decidi não usar a base do Work Flow. Algumas considerações (semelhantes às suas) foram

  1. Os fluxos de trabalho envolvidos eram muito mais simples (uma combinação de máquina de estado e ações seqüenciais) e fazê-lo no WF parece exagerar nos esforços envolvidos.
  2. A curva de aprendizado para os desenvolvedores entenderem e usarem o WF efetivamente foi considerada alta. A tabela de transição de status, descrevendo transições válidas e ações a serem tomadas, é usada para flexibilidade adicional e os desenvolvedores se sentem confortáveis ​​com ela, entendendo facilmente o conceito e a finalidade.
  3. As chances de alterações nos processos de negócios foram reduzidas e mudanças rudimentares foram facilmente possíveis com a ajuda da tabela de transição. Uma mudança na transição significaria um script de banco de dados, enquanto a mudança nas ações resultaria em uma nova versão / patch. No entanto, a probabilidade de tal ocorrência foi considerada baixa.

Olhando para trás depois de 13 a 14 meses, ainda acho que a decisão de não usar o WF estava correta. Na IMO, o WF faz sentido onde há uma forte probabilidade de que o fluxo de trabalho possa mudar e / ou as regras de negócios possam mudar. O WF permite isolar o fluxo de trabalho em um arquivo separado e, portanto, torná-lo configurável pelos usuários será mais simples.

VinayC
fonte
15

Temos usado o WF 4.0 nos últimos dois meses. Devo dizer que é um desafio pensar da maneira do fluxo de trabalho. No entanto, posso lhe dizer que vale a pena. Sabíamos muito pouco quando começamos. Compramos um livro para iniciantes e profissional para o WF 4.0 que ajudou. Eu próprio assisti a vários vídeos on-line e acompanhei o PDC 2009 pelas notícias de última hora sobre o WF 4.0 e como ele é diferente das versões anteriores um tanto ruins. Uma coisa importante para a qual tivemos que propor uma solução é a maneira como podemos lidar com In / Our Arguments em um fluxo de trabalho sem limitar nossas atividades personalizadas a certos tipos de dados e como passar parâmetros entre as atividades. Eu criei uma boa solução para isso, e a experiência do fluxo de trabalho que temos até agora não é ruim. Na realidade, temos um aplicativo intensivo em fluxo de trabalho que está ficando cada vez maior e realmente não consigo me imaginar resolvendo-o em um ambiente diferente. Adoro o efeito visual que ele tem: mantém-me longe dos detalhes da construção if / else etc e torna as regras de negócios aparentes de uma maneira que não obriga a mergulhar nas linhas de código para saber o que está acontecendo ou como consertar algum bug. A propósito, o projeto em que trabalhamos é muito semelhante ao que você descreveu e é um projeto de tamanho médio. Você pode dizer pelas minhas palavras que eu gosto e recomendo, embora incorpore alguns riscos, pois é uma nova tecnologia e você tem que ter algumas idéias inovadoras. isso me afasta dos detalhes das construções if / else etc e torna as regras de negócios aparentes de uma maneira que não o obrigam a mergulhar nas linhas de código para saber o que está acontecendo ou como corrigir algum bug. A propósito, o projeto em que trabalhamos é muito semelhante ao que você descreveu e é um projeto de tamanho médio. Você pode dizer pelas minhas palavras que eu gosto e recomendo, embora incorpore alguns riscos, pois é uma nova tecnologia e você tem que ter algumas idéias inovadoras. isso me afasta dos detalhes das construções if / else etc e torna as regras de negócios aparentes de uma maneira que não o obrigam a mergulhar nas linhas de código para saber o que está acontecendo ou como corrigir algum bug. A propósito, o projeto em que trabalhamos é muito semelhante ao que você descreveu e é um projeto de tamanho médio. Você pode dizer pelas minhas palavras que eu gosto e recomendo, embora incorpore alguns riscos, pois é uma nova tecnologia e você tem que ter algumas idéias inovadoras.

meus 2 centavos ...

Derar
fonte
2
Gostaria de saber sobre sua solução para lidar com a passagem de parâmetros entre as atividades. Eu tenho brincado com o WF dentro e fora e essa é uma área que me parece um pouco estranha, mas essa poderia ser apenas a minha falta de entendimento.
21410 Chris
Eu acho que é um lugar onde eles precisam trabalhar mais. De qualquer forma, usamos um grande repositório "global hashtable", onde adicionamos variáveis ​​tipográficas. A convenção de nomenclatura para essas variáveis ​​incorpora seu tipo, nome e atividade pai. Isso realmente nos ajudou em nossa implementação. Sei que pode haver maneiras melhores de fazer isso, mas isso funciona muito bem e você pode utilizá-lo de maneiras diferentes quando cria o fluxo de trabalho. Por exemplo, a atividade GerCustomer pode ter um punhado de argumentos de entrada e dois argumentos de saída: GetCustomer.str_customerID e GetCustomer.int_premium. Espero que isso ajude ..
Derar 08/09/10
9

Eu fiz três projetos no WF 3.5 e devo dizer que não é fácil. Isso força você a pensar de uma maneira totalmente nova, especialmente quando a persistência é usada. Atualizar o aplicativo que contém centenas de fluxos de trabalho persistentes incompletos é um desafio. Uma única mudança na serialização trava todos eles. É comum a introdução de várias versões da mesma biblioteca para suportar fluxos de trabalho em execução novos e antigos. Foi um desafio.

Ainda não experimentei o WF 4.0, mas com base na experiência do BizTalk e WF 3.5, acho que será semelhante.

De qualquer forma, a melhor abordagem que você pode adotar é fazer a Prova de conceito. Pegue um WF único de seus requisitos e tente implementá-lo no WF 4.0. Você passará algum tempo com ele, mas irá provar se é capaz de fazer isso no WF 4.0 e se existem benefícios visíveis.

Se você decidir usar o WF 4.0, insisto que verifique a possibilidade de executar o WF como serviço WCF hospedado no Windows AppFabric. O AppFabric fornece algumas funcionalidades prontas para hospedar WFs.

Ladislav Mrnka
fonte
4
Quando eu estava pensando em usar o WF para mecanismo de estado no meu aplicativo, o problema de persistência era sempre incômodo. A própria idéia de WF serializável para todos os casos abertos era horrível por vários motivos, incluindo versionamento. Portanto, meu esboço era que, sempre que o gatilho acontece, escolha a entidade comercial, crie um novo fluxo de trabalho e anexe a entidade a esse fluxo de trabalho e, em seguida, o fluxo de trabalho faria o trabalho com base na máquina de estado projetada. Depois de concluído, lance o fluxo de trabalho e salve a entidade comercial suja de volta no banco de dados. Mas é claro que, no final, decidi não usar o WF.
VinayC
2
Eu esqueci completamente o versionamento - isso por si só pode ser uma boa razão para NÃO usá-lo.
Kane
3
@ Kane, isso não é necessariamente verdade. Você sempre pode externalizar seu estado. Portanto, em vez de "desserializar um fluxo de trabalho e, em seguida, retomá-lo", você criará uma instância de fluxo de trabalho, anexará o estado externo e executará o fluxo de trabalho. Isso pode eliminar a necessidade de serializar e versão do fluxo de trabalho.
VinayC
Oi VinayC, você tem uma amostra simples disso? "você criará uma instância de fluxo de trabalho, anexando o estado externo e, em seguida, executando o fluxo de trabalho", isso soa muito parecido com algo que eu quero PoC, mas eu realmente não sei o WF4 para tentar uma máquina de estado como essa, por favor.
Jportelas 18/09/12
9

Acho que atualmente não faz sentido falar sobre o Workflow no WF4 como uma opção de tecnologia para esse tipo de problema. O que é realmente apropriado, como mencionado por Ladislav Mrnka acima, é o WCF WF Services hospedado no AppFabric.

Minha experiência com isso é que ele paga grandes dividendos e é muito agradável, mas surgem problemas no começo porque não é bem entendido que, para muitos programadores, essa é uma mudança de metodologia mais do que uma mudança de tecnologia. Por outro lado, os generalistas e aqueles com uma mentalidade de resolução de problemas viram o WCF WF AppFabric como um conjunto de oportunidades interessantes. Portanto, se a mistura de pessoas no projeto for devs C # razoavelmente conservadoras anexadas ao conjunto diário de OO e padrões, será difícil introduzir. Se a equipe for mais inovadora, a adoção será muito mais fácil, porque o potencial e as novas portas se multiplicam a cada descoberta.

Dois problemas conceituais principais que os programadores tiveram em mudar para essa tecnologia foram: a) Correlação de mensagens e padrões de troca de mensagens b) Fluxos de trabalho e teste de unidade Em sistemas padrão em C #, por exemplo, um fluxo de trabalho raramente é explícito e, portanto, raramente é testado em unidade. O fluxo de trabalho geral é deixado para teste em cenários de aceitação ou integração. Apresente um WF explícito como um artefato de software e, de repente, os desenvolvedores padrão querem tentar fazer o teste de unidade, o que geralmente não vale a pena.

O aspecto da correlação de mensagens é um pouco de mudança de mentalidade para aqueles que não estão familiarizados com os padrões de troca de mensagens. A maioria dos desenvolvedores lidou com chamadas remotas e em processo, serviço da web e SOAP, e geralmente se concentra em uma ou duas delas. Abstrair acima de tudo e trabalhar com um sistema geral baseado em mensagens pode ser confuso a princípio.

No lado positivo, porém, o resultado final é algo que economiza muito tempo e cria muitas oportunidades. Uma coisa principal é que o worfklow, se visualmente claro, é algo que pode ser trabalhado pelo usuário final, desenvolvedor e analista juntos, eliminando etapas desnecessárias no ciclo de vida do desenvolvimento e concentrando as partes em um artefato. Além disso, desencoraja ilhas de funcionalidade em aplicativos dedicados, com camadas de cola dedicadas, incentivando um conjunto de processos de negócios no WF por domínio de negócios. Além disso, com o AppFabric, o encanamento para persistência, registro e ativação de atividades agendadas é feito para você. O desempenho do WF4 também é excelente.

Minha recomendação seria encontrar o membro da equipe mais inovador ou explorador que fizesse o exame inicial para descobrir as partes complicadas, colocar as funções principais em funcionamento e fazer com que essa pessoa inicial fosse responsável por compartimentar o restante do trabalho.

Sentinela
fonte
5

Para executar um sistema de reivindicação de seguro de qualquer complexidade que envolva funções e "subtarefas", você realmente precisa de uma solução de BPM, não apenas de fluxo de trabalho. O Workflow Foundation 4.0 é liso, mas realmente não chega nem perto das funcionalidades de um produto BPM.

As soluções de BPM, como Metastorm BPM, Global360 e K2.NET, fornecem fluxo de trabalho, tarefas, funções e integração de sistemas centrados no ser humano, que podem modelar e otimizar os processos de negócios, como o seu sistema de reivindicação de seguro. Use o ASP.NET para criar a interface que se integra ao mecanismo de fluxo de trabalho BPM, já que seus designers internos geralmente são limitados e forçam você a usar o controle da Web personalizado, que geralmente não é tão completo quanto os controles da Web do ASP.NET.

Stephen Cao
fonte
que tal usar o WF 4.0 com atividades personalizadas?
John Saunders
3
Eu discordo respeitosamente. O K2 adiciona uma camada de funcionalidade (como autorização, bloqueio e relatório) ao WF, mas uma equipe experiente pode desenvolver esses recursos. O WF 4 traz muito para a mesa. As soluções de BPM tendem a ser caras e "empreendedoras".
TrueWill 21/02
4

Vá com a tecnologia que sua equipe conhece e se sente à vontade. O Workflow Foundation não é um produto que você possa usar imediatamente - é um conjunto de peças que você pode incorporar ao seu aplicativo para criar um sistema de fluxo de trabalho. IMHO, a lógica do fluxo de trabalho é a parte menos importante da tecnologia. Antes de tudo, você precisa se concentrar na GUI, porque os empresários não verão nada além da GUI. Mas se o seu sistema for bem-sucedido, você deverá estar preparado para solicitações de mudança sem fim e novos requisitos, para implementar sua lógica de negócios, para que seja fácil mudar e dividir em processos separados para atender às diferentes necessidades dos usuários (às vezes contraditórios) . O BPM ajuda nessa tarefa porque permite que você tenha várias versões separadas de processos de negócios, atendendo a várias necessidades de negócios. Você não Não é necessário um mecanismo completo de BPM para isso, mas é útil codificar sua lógica de negócios para que ela possa ser versionada e dividida em processos de negócios individuais - a pior coisa a ter é um blob de código inatingível e entrelaçado que lida com 'tudo' e que não alguém pode entender. Existem muitas idéias para isso - máquinas de estado, DSLs (linguagens específicas de domínio), scripts etc. - você decide qual deve ser a implementação. Mas você deve sempre pensar em termos de processos de negócios e organizar sua lógica de acordo para refletir esses processos. E esteja preparado para a coexistência de muitas variantes da lógica de negócios e estruturas de dados - essa é a tarefa de design mais difícil. É útil codificar sua lógica de negócios para que ela possa ser versionada e dividida em processos de negócios individuais - a pior coisa a ter é um blob de código inatingível e entrelaçado que lida com 'tudo' e que ninguém consegue entender. Existem muitas idéias para isso - máquinas de estado, DSLs (linguagens específicas de domínio), scripts etc. - você decide qual deve ser a implementação. Mas você deve sempre pensar em termos de processos de negócios e organizar sua lógica de acordo para refletir esses processos. E esteja preparado para a coexistência de muitas variantes da lógica de negócios e estruturas de dados - essa é a tarefa de design mais difícil. É útil codificar sua lógica de negócios para que ela possa ser versionada e dividida em processos de negócios individuais - a pior coisa a ter é um blob de código inatingível e entrelaçado que lida com 'tudo' e que ninguém consegue entender. Existem muitas idéias para isso - máquinas de estado, DSLs (linguagens específicas de domínio), scripts etc. - você decide qual deve ser a implementação. Mas você deve sempre pensar em termos de processos de negócios e organizar sua lógica de acordo para refletir esses processos. E esteja preparado para a coexistência de muitas variantes da lógica de negócios e estruturas de dados - essa é a tarefa de design mais difícil. DSLs (idiomas específicos do domínio), scripts etc. - você decide qual deve ser a implementação. Mas você deve sempre pensar em termos de processos de negócios e organizar sua lógica de acordo para refletir esses processos. E esteja preparado para a coexistência de muitas variantes da lógica de negócios e estruturas de dados - essa é a tarefa de design mais difícil. DSLs (idiomas específicos do domínio), scripts etc. - você decide qual deve ser a implementação. Mas você deve sempre pensar em termos de processos de negócios e organizar sua lógica de acordo para refletir esses processos. E esteja preparado para a coexistência de muitas variantes da lógica de negócios e estruturas de dados - essa é a tarefa de design mais difícil.

vigília noturna
fonte
3

Estou em uma situação em que tenho que usar o 4.0, pois o .NET 4.5 ainda não está credenciado para uso em nosso ambiente de produção. Tive muita dificuldade em entender como obter fluxos de trabalho de longa duração para atender às nossas necessidades comerciais, mas finalmente encontrei uma solução elegante. Não é algo que qualquer pessoa que venha a apoiar mais tarde possa entender com facilidade porque há muito em que pensar, mas acredito no WF como uma ferramenta para gerenciar estados de fluxo de trabalho.

Uma grande coisa que eu discordo do WF 4.0 é o comentário de Maurice:

O básico é nunca alterar um fluxo de trabalho existente, sempre criar um novo

Isso é ótimo se você quiser apenas uma nova versão, mas e se você tiver 50.000 fluxos de trabalho persistentes e perceber que, em algum momento, há um bug no fluxo de trabalho? Você precisa poder atualizar o xamlx e ainda assim estar acoplado às instâncias existentes. Tentei descompactar as várias colunas de metadados na tabela de instâncias do SQL Server para encontrar algo que vincule a instância à definição de fluxo de trabalho sem sorte.

Escrevi um aplicativo de sincronização para importar dados de um sistema antigo para o nosso novo WF 4.0. Basicamente, carregamos os dados no sistema e, em seguida, executamos o processo que invoca automaticamente as etapas do fluxo de trabalho e chama os métodos de validação, basicamente zombando da interação do usuário. Isso realmente funcionou bem conosco devido à arquitetura que implementamos para acessar o host do serviço de fluxo de trabalho. É ótimo, pois, após a execução, você pode passar e fazer verificações para garantir a consistência do processo de migração de dados, mas ter que usar essa abordagem para potencialmente centenas de milhares de casos, quando o sistema estiver ativo, não é realmente uma abordagem. que gera confiança e sobrecarrega o processo de integração de correções simples de erros.

Minha recomendação é que você evite o WF 4.0 completamente e vá direto para o 4.5, se o seu ambiente o suportar. As Atualizações dinâmicas e versões lado a lado oferecem soluções para correção de erros e versões WF prontas para uso. Ainda estou para investigar exatamente como o 4.5 ainda não está credenciado para uso por nosso cliente, mas aguardo ansiosamente esta oportunidade.

O que espero desesperadamente é que nosso cliente não solicite alterações na política (e, portanto, ajustes no fluxo de trabalho) e que os fluxos de trabalho atuais sejam mantidos sem erros. Esta última é uma esperança vã e vazia, pois os bugs sempre aparecem.

Eu realmente não consigo entender o que estava passando pela cabeça da equipe de desenvolvedores do WF para lançar um sistema em que você não pode consertar bugs facilmente. Eles deveriam ter desenvolvido uma técnica para vincular novamente uma instância ao novo xamlx.

Stephen York
fonte