sexta-feira, 29 de julho de 2016

Regras de negócios com Drools: Introdução

Quando estamos estudando programação, lá no começo, com "Olá Mundo", for, if, else, recursão e outros pontos importantes para a criação dos nossos sistemas, mal imaginamos que o mundo da tecnologia da informação é quase sempre sobre transformar código em algo útil para o negócio de alguma empresa, ou seja, satisfazer regras de negócio.
Os sistemas tendem a flexibilizar a forma que o código responde aos interesses da execução de uma regra de negócio. Criamos frameworks e metodologias que facilitam a comunicação entre pessoas que entendem de negócio com os especialistas no desenvolvimento de sistemas.
No entanto, é um fato que essa comunicação não é simples e encontramos até nos dias de hoje sistemas cuja implementação do negócio é altamente dependente da tecnologia utilizada. A cada nova regra de negócio, uma nova versão do sistema.
Claro que há dentro de diversas empresas formas de flexibilizar isso, mas muitas vezes dependemos de ferramentas especificas e especialistas. O problema se torna mais severo no atual paradigma do sistema capitalista, no qual as empresas se esforçam para oferecer o melhor serviço para os consumidores, uma experiência especial, onde há a necessidade de rápidas atualizações e respostas cada vez mais sofisticadas que atendem as necessidades dos consumidores exigentes. Em outras palavras, antigamente se pensava em produzir cada vez mais com melhorias contínuas nos meios de produção, hoje isso ainda se mantém, mas estamos também no nível de oferecer serviços cada vez melhores, países já industrializados tendem a focar sua economia em serviços. Isso é melhor explicado pela wikipédia, com atenção para o seguinte trecho: "The current list of Fortune 500 companies contains more service companies and fewer manufacturers than in previous decades.".
Esse novo paradigma traz, consequentemente, diversas modificações na formas que desenvolvemos software inclusive em aspectos relacionados a infraestrutura, veja, por exemplo, o conceito de "0 downtime"(o serviço nunca fica indisponível, mesmo com novas versões das aplicações sendo instaladas), microservices(uma aplicação grande e monolítica passa a ser divida em pequenas partes independentes, assim o sistema pode ser desenvolvido, mantido e melhorado em pequenas partes).
Por esse motivo o que iremos mostrar nesse artigo pode ser considerado além do seu tempo. Drools foi lançado há mais de 10 anos e continua muito necessário.

Então chega de blá blá e vamos falar um pouco dessa ferramenta.


A ideia do Drools


A ideia principal é facilitar a criação de regras de negócio através de uma engine de regras de negócio de diversas ferramentas que facilitam a criação, manutenção e testes de regras.
Para desenvolvedores drools oferece uma API Java que pode ser usada de dentro da aplicação. É possível executar essas regras também em um servidor que pode ser acessado através de chamadas HTTP (diriam uns que é REST) ou JMS. Vamos abordar nesse artigo somente a API Java.
As regras podem ser criadas usando uma DSL(domain specific language) do Drools, uma árvore de decisão, tabelas (spreadsheets) ou ainda você pode criar uma linguagem que negócio própria. Veja abaixo alguns screenshots:
DRL technical rule
Regras em um arquivo DSL
The guided BRL editor
Regras usando o editor guiado

Guided Decision Trees - Collapsing nodes
Árvore de decisão
Rule definition
Tabelas de decisão



A aplicação Drools Console oferece ferramentas para criar objetos de dados (objetos Java com uma interface amigável para não-desenvolvedores), testes para as regras, DSL, etc. Para os desenvolvedores Java podemos criar as regras utilizando o plugin do Eclipse.

Funcionamento das regras


Nessa série de artigos vamos utilizar regras escritas em arquivos do tipo DRL (Drools Rule Language). A estrutura básica de uma regra é a seguinte:

rule "name"
    attributes
    when
        LHS
    then
        RHS
end

Basicamente dividimos a regra entre LHS e RHS: LHS significa Left-Hand side e é a parte da regra onde escrevemos as condições para que essa regra seja executa. RHS, ou Right-hand side, é onde temos a ação da regra em sí. Ao satisfazer as condições do LHS, temos a execução da regra. Essa terminologia, na verdade, vem da matemática.
A linguagem utilizada é bastante completa e está em constante melhoria, veja a referência da linguagem e diversos exemplos desenvolvidos pelo time do Drools. Claro que é fora do escopo desse blog cobrir a linguagem em detalhes, no entanto, vamos ver um pouquinho de uso da linguagem em postagens futuras.

E da onde tiramos as informações para executar as regras? Bem, colocamos os objetos de negócio em um espaço chamado "Working memory" e então executamos as regras. Todas as regras que satisfazem aquela condição são executadas. Esse é o momento que o espertalhão fala: então drools é sobre uma linguagem especial para fazer IF.
É claro que não, djow, a engine é muito mais que isso. Notem que a grande sacada está no fato que podemos modificar o conteúdo da working memory no lado RHS da regra, ativando outras regras, ou seja, encadeando execuções. Isso é conhecido como Forward chaining, uma técnica que pode ser utilizado como um forma de realizar inteligência artificial, veja mais sobre isso no artigo da wikipédia sobre Production System.

Por exemplo, a partir de dados de um cliente(localização, crédito, idade, etc) colocados na working memory, podemos ativar regras que irão gerar novos objetos colocados novamente na working memory para ativação de novas regras e assim por diante. Nessa série de artigos vamos mostrar como atualizar as regras automaticamente, sem recompilação do programa Java!

Conclusão

Apresentamos a motivação e a ideia básica sobre o uso de Drools. Espero ter transmitido a ideia do poder do Drools e aberto sua cabeça. Se você está assim agora, meu objetivo foi atingido:

Depois de entender Drools e o universo de execução de regras

Nenhum comentário:

Postar um comentário