42
Drools Desacoplando as regras de negócio do código da aplicação Raphael Duarte Paiva

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

  • Upload
    hadung

  • View
    229

  • Download
    9

Embed Size (px)

Citation preview

Page 1: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

DroolsDesacoplando as regras de negócio do código

da aplicação

Raphael Duarte Paiva

Page 2: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

Agenda

MotivaçãoAlguns Problemas

AcoplamentoDificuldade de acesso

O Motor de RegrasComo Funciona?

Alguns ConceitosComponentes principais

Definindo RegrasDrools Rule LanguageDomain Specific LanguagesProcessos

Guvnor (BRMS)

Page 3: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

Motivação

Alguns Problemas

Page 4: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

Alguns Problemas

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

Page 5: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

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.

Page 6: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

Alguns Problemas

Acoplamento

Page 7: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

Acoplamento

Page 8: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

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.

Page 9: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

Alguns Problemas

Dificuldade de Acesso

Page 10: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

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(); }}

Page 11: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

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

Page 12: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

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.

Page 13: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

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.

Page 14: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

O Motor de Regras

Como funciona?

Page 15: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

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)>

Page 16: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

Como funciona?

Existem 4 componentes principais:

Page 17: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

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.

Page 18: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

O Motor de Regras

Definindo Regras

Page 19: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

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

Page 20: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

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.

Page 21: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

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

Page 22: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

Definindo Regras

Domain Specific Languages

Page 23: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

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.

Page 24: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

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();

Page 25: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

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

Page 26: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

Definindo Regras

Processos

Page 27: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

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:

Page 28: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

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:

Page 29: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

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.

Page 30: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

Guvnor

Business Rules Management System

Page 31: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

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.

Page 32: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

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.

Page 33: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

Guvnor

Tela inicial

Page 34: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

Guvnor

Permissionamento de fina granularidade

Page 35: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

Guvnor

Tela de pacotes

Page 36: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

Guvnor

Tela de edição textual

Page 37: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

Guvnor

Tela de edição gráfica

Page 38: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

Guvnor

Tela de Testes

Page 39: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

Módulos

Divisão das funcionalidades do Drools

Page 40: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

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.

Page 41: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

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).

Page 42: Drools -   · PDF fileDrools permite que regras de negócio possam ser escritas neste modo, para depois serem compiladas e executadas por seu motor de inferência

Fim!

Dúvidas?

Contato: [email protected]