Skip to content

Usando Drools com planilhas

Março 7, 2012

Ta aí um dos projetos que eu mais gosto da JBoss, o Drools. Acredito que esse é um daqueles produtos que realmente podem fazer a diferença. E não falo da diferença tecnológica, mas sim de uma diferença que causa impacto no emocional (=b) das pessoas que não são de tecnologia, e muitas vezes querem entender e participar das regras de negócio de um software.

Nesse contexto, uma das funcionalidades que acho simples, e que tem muito a agregar, é a utilização de planilhas para a definição das regras do Drools (Acredito aqui que o leitor tenha noção de como funciona o Drools). Acredito que o manuseio de planilhas é uma prática muito comum entre as pessoas “de negócio”. Portanto, podemos deixar as definições e alterações das regras na mão dessas pessoas, que são as que têm o maior domínio dessas definições/alterações.

Abaixo, segue um exemplo de uma planilha que pode ser interpretada pelo Drools:

Neste exemplo, temos um cenário onde a entrada seria um bean (TrafficViolation) que contém informações sobre um conjunto de infrações causadas no trânsito. A partir deste conjunto, as regras são analisadas e, como resposta, é gerado um valor de penalidade para o infrator.
O maior trabalho na construção das planilhas, legíveis pelo Drools, fica por conta da estrutura da mesma. É necessário respeitar uma certa sequência e posição das linhas e colunas. Segue abaixo uma breve explicação da estrutura do cenário supramencionado.

linha 2: Nome para o conjunto das regras que serão definidas no arquivo.

linha 3: Import para que possamos usar os fatos (beans) em runtime. No nosso caso, o bean a ser utilizado é org.chies.drools.spike.decisiontable.TrafficViolation.

linha 5: Label da tabela de regras que seguirá nas linhas abaixo. No meu caso, pulei a linha 4 apenas por estética, poderia estar tudo junto.

linha 6: Tipo das colunas da tabela que seguirá abaixo. Os nomes são auto explicativos, CONDITION é uma condição para a regra ser atendida (“When” da sintaxe DRL), PRIORITY é a prioridade da regra, e ACTION é a ação a ser tomada quando a condição é satisfeita (“Then” da sintaxe DRL).

linha 7: Verifica a existência de um fato do tipo TrafficViolation na working memory, e referencia o fato através da variável trafficViolation.

linha 8: Contém a condição, no caso dos CONDITIONS, e as ações, no caso das ACTIONS. Repare que, na maioria das CONDITIONS, é referenciado apenas o atributo do bean TrafficViolation, sendo implícito que a condição é a de igualdade. Já no caso da CONDITION de speed, que é uma comparação de “>”, devemos deixar a comparação explicita.

linha 9: Label dado para a condição/ação.

linha 10 a 14: Cada linha representa uma regra, contendo as condições para que a regra seja ativada, e as ações a serem executadas caso isso aconteça.

Bom, acho que era isso que queria passar, apenas a simplicidade e, principalmente, a fácil manutibilidade dessas regras por parte de um participante “não desenvolvedor”. O código completo para este exemplo está no meu github

Para aqueles que usam/gostam do Drools e BRMS, sigam o blog que postarei mais exemplos de valor agregado que esse projeto nos proporciona.

[]’s

From → Uncategorized

Deixe um Comentário

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s

Coding Horror

Um prato de informações tecnológicas com uma pitada de conhecimento aleatório.

InfoQ

Um prato de informações tecnológicas com uma pitada de conhecimento aleatório.

JBoss Developer Recent Posts

Um prato de informações tecnológicas com uma pitada de conhecimento aleatório.

JBossDivers

Mergulhando no Mundo JBoss

%d bloggers like this: