Windows Workflow Foundation: Onde usar no mundo real?

Quando eu li rapidamente sobre o Windows Workflow Foundation eu fiquei impressionado. A interface gráfica, a facilidade, a similaridade com o Biztalk, a produtividade, tudo me chamou a atenção. Mas logo no minuto seguinte eu me perguntei: "Pra quê? Por que eu usuaria o Windows Workflow Foundation ao invés de utilizar uma solução customizada?".

Este post tem o objetivo de apresentar benefícios que o WF (Workflow Foundation) pode trazer às aplicações reais, assim como uma demonstração básica (mas real) da utilização de um workflow e os benefícios aqui apresentados.

Qualquer tipo de projeto é baseado em regras de negócios. Estas regras baseiam-se em definições e operações para atingir um determinado objetivo. Todas as regras são formadas pelo what e pelo how (veja http://en.wikipedia.org/wiki/Business_rules).

QUALQUER regra de negócio pode ser definida em um workflow.

Outro ponto importante sobre regras de negócio é que, no nosso mundo da tecnologia, as regras de negócio mudam. Infelizmente não temos como definir uma regra de negócio e simplesmente assumir que esta regra será desta maneira e pronto. As regras de negócio mudam, e precisamos estar preparados para responder a esta mudança da forma mais rápida possível.

Além disso, regras de negócio podem ser complexas demais. Tanto que alguns projetos em andamento, ou principalmente aqueles que já estão finalizados, existem regras de negócio que só o profissional diretamente envolvido entende. Manutenção? Nem pensar!

Partindo deste cenário, podemos listar algumas características relacionadas com regras de negócio:

  1. Regras de negócio sempre mudam;
  2. A complexidade pode trazer sérios problemas para o entendimento e manutenção destas regras;
  3. Toda regra de negócio pode ser definida em um workflow;

Ok, mas e agora? Como definir em termos arquiteturais algo que atenda estas características?

Aqui entra o Windows Workflow Foundation.

Como você já deve saber, o Windows Workflow Foundation é framework totalmente voltado para construção de workflows de forma rápida, fácil e confiável, além de permitir customização, fornecer segurança, performance e escalabilidade.

Algumas ótimas razões para utilizar WF [PROWF]:

  • Fornece um poderoso e flexível framework para a construção de workflows, deixando o tempo para você se preocupar com problemas reais do negócio.
  • Permite workflows sequencias ou máquinas de estado (http://en.wikipedia.org/wiki/Finite_state_machine)
  • Suporta a habilidade de salvar um workflow e continuar depois.
  • É de graça!

Agora a questão é: onde e como utilizar tudo isso?
Se sabemos que workflow está presente nas regras de negócio, e temos um framework poderoso, como utilizar isto para resolver nossos problemas?

Vamos levar este cenário em conta:

  • Regras de negócio complexas;
  • Equipe média / grande;
  • Alto índice de alterações nos requisitos / regras;

Neste cenário, o Windows Workflow Foundation pode ser utilizado para compor as regras de negócio, utilizando métodos atômicos expostos em uma outra camada do projeto:

image 

Claro que em questões arquiteturais esta não é a melhor solução. Este é apenas um exemplo para este post.

Vamos imaginar um fechamento de pedido em um sistema de e-commerce.
Algumas validações básicas são necessárias, referente à dados do cliente, dados de pagamento e entrega. Quando o usuário optar por fechar o pedido, todas as validações devem ser executadas e o resultado final deve ser devolvido para o método chamador.

Fiz um exemplo em ASP.NET + WF, assim como representado na figura acima. O ASP.NET tem o papel de obter as entidades customizadas e enviar para o workflow. A validação dos dados e comunicação com a camada de serviços é feita dentro deste fluxo de trabalho:

   1: protected void FecharPedidoButton_Click(object sender, EventArgs e)
   2:     {
   3:         // Cria um novo cliente e associa com a Basket
   4:         Customer cliente = new Customer();
   5:         cliente.Name = "André Nobre";
   6:         cliente.Street = "Rua Lorem Ipsum, 99";
   7:         cliente.Email = "customer@ecommerce.com";
   8:  
   9:         // Cria o objeto Basket
  10:         Basket carrinho = new Basket(cliente);
  11:         carrinho.LineItems.Add(new LineItem("Televisão LCD 20'"));
  12:         carrinho.LineItems.Add(new LineItem("Blue-Ray"));
  13:  
  14:         // Dictionary que servirá como argumento para o workflow
  15:         Dictionary<string, object> wfArguments = new Dictionary<string, object>();
  16:         wfArguments.Add("basket", carrinho);
  17:         wfArguments.Add("wfResult", WorkflowReturn.Ok);
  18:  
  19:         // Instancia o Workflow Runtime
  20:         WorkflowRuntime wfRuntime = new WorkflowRuntime();  
  21:       
  22:         // Cria a instancia do workflow para criação do pedido
  23:         WorkflowInstance wfInstance = wfRuntime.CreateWorkflow(typeof(PurchaseOrderWorkflow), wfArguments);
  24:  
  25:         // Adiciona um delegate para o final da execução do workflow
  26:         wfRuntime.WorkflowCompleted += new EventHandler<WorkflowCompletedEventArgs>(wfRuntime_WorkflowCompleted);
  27:  
  28:         // Inicia o workflow
  29:         wfInstance.Start();
  30:     }

Como podem observar, o código é extremamente simples. Os objetos Customer, Basket, LineItem, foram criados de forma fixa, apenas para exemplo.
A figura abaixo representa o workflow criado para a validação dos dados e fechamento do pedido:

workflow

Como podem observar, o fluxo é extramemente intuitivo e de fácil manutenção. Cada atividade pode ser alterada, seja seu código ou sua localização, assim como se está ativo ou não.

Portanto, windows workflow foundation é a melhor opção quando trabalhamos nestes tipos de cenário. Com ele, é possível aumentar a produtividade e melhorar desempenhos, além de possibilitar o trabalho com equipes grandes de maneira fácil e simples.

Anexos
http://www.andrenobre.com.br/files/workflowpost.zip

Referência
[PROWF] Pro WF: Windows Workflow in .NET 3.0; BUKOVICS, Bruce; 2007

Abraços!
-- André

9 Comments

  • Muito legal André. Seria legal também um exemplo de State Machine Workflow, no caso de processos mais complexos.

    Até++

  • Olá Amigos,

    Sou consultor de TI e estou desenvolvendo um projeto de mapeamento para posterior informatização de alguns processos em uma organização, para tal, estou pensando em utilizar a plataforma Windows Workflow Foundation, que já venho estudando a algum tempo entretanto tenho duvidas quanto ao processo de desenvolvimento neste contexto, por exmeplo, onde devem ser criadas as regras de negócio? na aplicação Host? , No workflow propriamente dito? Assim sendo gostaria de saber se pode me indicar algum material que trate dos padrões de desenvolvimento ou melhores praticas no cenário do WWF.

    Abraço a todos

    Edson Motta

  • Olá Edson,
    na minha opinião, a localização das suas regras de negócio não devem ficar no próprio workflow, mas sim na camada de domínio da sua aplicação. A orquestração destas regras deve ser efetuada pelo workflow.
    Isto permite uma clara separação de resposabilidades e uma futura reutilização de seu código.

    Abraços.

  • Oi André

    Obrigado, também imaginava algo neste formato. E com relação à publicação de projetos na plataforma WF como funciona?

    No modelo tradicional de desenvolvimento criamos um pacote de instalação contendo os arquivos necessários a sua execução e distribuímos. No workflow Foundation qual a melhor forma de distribuirmos essas aplicações?

  • Oi André,

    Obrigado, havia imaginado algo deste tipo. E com relação à distribuição de aplicações utilizando Windows Workflow Foundation , como proceder?

    Em modelos de desenvolvimento “tradicionais” basta reunirmos o conjunto de arquivos que compõem a aplicação e criar para eles um pacote de instalação. No WWF como esta distribuição e feita visto que a mesma pode não ter um Host diretamente associado?

    Forte Abraço,

    Edson Motta

  • Oi André

    Obrigado pelas dicas, estava realmente imaginando algo desta natureza. E com relação à distribuição de aplicativos que utilizem a plataforma WF como funciona.

    Ex. Em aplicativos “tradicionais” a distribuição e feita a partir da reunião do conjunto de arquivos através do Setup and Deplyment que cria o pacote de instalação a ser distribuído, no WF como funciona este processo? Visto que não necessariamente o mesmo terá uma aplicação HOST associada no projeto.

    Forte Abraço,

    Edson Motta

  • Oi André
    Obrigado pelas dicas, estava realmente imaginando algo desta natureza. E com relação à distribuição de aplicativos que utilizem a plataforma WF como funciona.
    Ex. Em aplicativos “tradicionais” a distribuição e feita a partir da reunião do conjunto de arquivos através do Setup and Deplyment que cria o pacote de instalação a ser distribuído, no WF como funciona este processo? Visto que não necessariamente o mesmo terá uma aplicação HOST associada no projeto.
    Forte Abraço,
    Edson Motta

  • Edson,
    depende do seu cenário. A aplicação WF pode ser distribuída atraves de um assembly comum ou se for o caso como um serviço, WF Service. Qualquer coisa mande um e-mail para conversarmos mais sobre o assunto.

    Abraços.

  • Ola Andre, seria possivel disponibilizar o anexo novamente? o link esta quebrado.

    obrigado,

Comments have been disabled for this content.