Drools - · PDF fileDrools permite que regras de negócio possam ser escritas neste...

Preview:

Citation preview

DroolsDesacoplando as regras de negócio do código

da aplicação

Raphael Duarte Paiva

Agenda

MotivaçãoAlguns Problemas

AcoplamentoDificuldade de acesso

O Motor de RegrasComo Funciona?

Alguns ConceitosComponentes principais

Definindo RegrasDrools Rule LanguageDomain Specific LanguagesProcessos

Guvnor (BRMS)

Motivação

Alguns Problemas

Alguns Problemas

Acoplamento das regras de negócio com o código do sistema.

Alguns ProblemasDificuldade de acesso pelos analistas de negócio às regras que foram implementadas, compromentendo a comparação da regra descrita pelo analista com a regra que foi implementada no sistema.

Alguns Problemas

Acoplamento

Acoplamento

Acoplamento

Vantagens das regrasRegras rodam em uma camada acima do código nativo da aplicação.

Podem ser expressas em uma linguagem diferente, mais natural.São compiladas para uma linguagem cujo o motor de regras interpreta.Conseqüentemente, um build da aplicação para mudança de regras faz-se desnecessário, aumentando o uptime e contribuindo para uma maior qualidade do serviço.

Alguns Problemas

Dificuldade de Acesso

Dificuldade de acesso

Um desenvolvedor pode claramente expressar o que o código abaixo significa

Para um analista de negócios que, normalmente, nunca teve alguma experiência com desenvolvimento, ler tal pedaço de código seria uma tarefa difícil.

public void checaMaiorDeIdade(Aluno aluno) { Date dataNascimento = aluno.getPessoaFisica().getPessoa().getDataNascimento(); if (subtrairData(new Date(), dataNascimento) < IDADE_MINIMA) { aluno.getMatricula().invalidar(); } else { aluno.getMatricula().validarIdade(); }}

Dificuldade de acesso

E se regras pudessem ser escritas do seguinte modo?

Drools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência.

regra "Aluno deve ser maior de idade" quando O aluno em questão possui - idade menor que idade mínima então invalidar matrículafim

Dificuldade de acesso

VantagensLinguagem muito próxima à linguagem natural

Facilidade de manutenção e leitura.Introduz a possibilidade do próprio analista de negócios realizar a autoria e manutenção das regras, sabendo exatamente como serão interpretadas pelo sistema.

Dificuldade de acesso

Diminui a responsabilidade da equipe de desenvolvimento de interpretar, escrever e manter as regras de negócio

Analistas de negócio têm um conhecimento muito maior do domínio do que os desenvolvedores.A capacidade dos próprios analistas escreverem as regras remove a possibilidade de algum desenvolvedor interpretar erroneamente uma regra e conseqüentemente implementá-la de forma errada.

O Motor de Regras

Como funciona?

Como funciona?

Alguns conceitos:Fatos:

São objetos que representam um determinado estado do domínio.

Regras de negócio:Toda regra é representada por dois elementos principais, seguindo a sintaxe:

quando <condições (LHS)>então <ações (RHS)>

Como funciona?

Existem 4 componentes principais:

Como funciona?

Working Memory - Memória de TrabalhoÉ onde residem os fatos.�

Production Memory - Base de ConhecimentoÉ onde reside todo o conhecimento de negócio (regras).

Pattern Matcher - Reconhecedor de padrõesResponsável por casar os fatos na memória de trabalho com as condições das regras e criar ativações a partir dos casamentos.

AgendaResponsável pela ordenação das ativações para execução.

O Motor de Regras

Definindo Regras

Definindo Regras

Drools Rule LanguageO motor de regras lê arquivos .drl, de texto puro que descrevem as regras de negócio.Nativamente, um arquivo .drl possui a seguinte sintaxe:

rule <nome_da_regra>when <condições>then <ações>end

Definindo Regras

Temos duas construções interessantes:<condições>

São escritas utilizando a linguagem do Motor de regras.

<ações>São escritas utilizando código Java.

Definindo Regras

A linguagem do motor de regras por exemplo:package org.minhacompania.regras;

import org. minhacompania.dominio.Alunoimport org.jboss.seam.core.FacesMessages

import function org.minhacompania.utils.DataUtils.subtraiData;

global java.util.Date dataAtual;global org.jboss.seam.core.FacesMessages facesMessages;

function void mensagemMenorDeIdade(String nome) { facesMessages.add(nome + " é menor de idade.");}

rule "deve ser maior de idade" salience 0 ruleflow-group "validacao" when a : Aluno($pf : pessoaFisica) pf : PessoaFisica($p : pessoa) from $pf p : Pessoa($dataNasc: dataNascimento, $nome : nome) from $p eval( subtraiData(dataAtual, $dataNasc) < 18 ) then mensagemMenorDeIdade($nome); a.getMatricula().invalidar();end

Definindo Regras

Domain Specific Languages

Definindo Regras

Domain Specific LanguagesO motor de regras possui uma poderosa maneira de mapear sua linguagem nativa, expressa nos .drl's, para uma linguagem mais natural, como mostrada nos primeiros exemplos.Este mapeamento se dá através das Domain Specific Languages, ou dsl's.dsl´s são expressas em arquivos .dsl, com uma sintaxe bastante simples, bem parecida com um arquivo .properties.

Definindo Regras

Domain Specific Languages por exemplo:

[keyword]rule=regra[keyword]when=quando[keyword]then=então[keyword]end=fim

[when]O Aluno em questão possui=a : Aluno($pf : pessoaFisica) pf : PessoaFisica($p : pessoa) from $pf p : Pessoa($dataNasc: dataNascimento, $nome : nome) from $p

[when]- idade menor que {idadeMinima}=eval( subtraiData(dataAtual, $dataNasc) < {idadeMinima} )

[then]Invalidar matrícula=mensagemMenorDeIdade($nome); a.getMatricula().invalidar();

Definindo Regras

A regra anterior poderia ser reescrita da seguinte maneira:

regra "deve ser maior de idade" salience 0 ruleflow-group "validacao" quando O aluno em questão possui - idade menor que 18 então Invalidar matrículafim

Definindo Regras

Processos

Definindo Regras

ProcessosO Drools provê também um motor para processos de negócio (BPM).Processos são definidos em arquivos xml, ou utilizando o editor gráfico do eclipse.O desenho de um processo se parece com o seguinte exemplo:

Definindo Regras

Processos são compostos por nós, sempre começando por um nó "Start" e acabando em um ou mais nós "End".Os tipos de nós disponíveis para uso são:

Definindo Regras

Alguns nós importantes:RuleFlowGroup

Quando a execução chegar a este nó, todas as regras pertencentes a ruleflow-group serão executadas.

FaultRepresenta uma condição excepcional no processo. Quando a execução chega a um nó deste tipo, uma falha com um dado nome será lançada e uma busca por um tratador para aquela falha. Caso ela não seja tratável, o processo é abortado.

Guvnor

Business Rules Management System

Guvnor

O Guvnor é uma ferramenta para gerência de regras de negócio.Entre suas características estão:

Integração com LDAP;Ambiente multi-usuário;Múltiplos tipos de editores (gráfico, texto);Controle de versão;Categorização;Criação de cenários de teste;Build e deploy.

Guvnor

Com o Guvnor, é possível realizar autoria, teste, build e deploy de pacotes de regras.

Todas estas atividades estão integradas na mesma ferramenta.

Com a configuração de Knowledge Agents no sistema, basta um build do pacote de regras pelo guvnor que a aplicação automaticamente fará download do pacote compilado e atualizará a sua base de conhecimento.

Guvnor

Tela inicial

Guvnor

Permissionamento de fina granularidade

Guvnor

Tela de pacotes

Guvnor

Tela de edição textual

Guvnor

Tela de edição gráfica

Guvnor

Tela de Testes

Módulos

Divisão das funcionalidades do Drools

Divisão das funcionalidades do Drools

É o módulo principal, que compreende o motor de regras, linguagem de regras e a implementação do algoritmo de pattern matching.

Adiciona as capacidades para lidar com BPM.

Divisão das funcionalidades do Drools

Adiciona capacidades para realizar o CEP (Complex Event Processing).

Inclui a ferramenta para Gerência de Regras de negócio (BRMS).

Fim!

Dúvidas?

Contato: raphaeldpaiva@gmail.com

Recommended