Revisitando o JBoss Rules: Para programar basta saber português!

O que você acha de transformar usuários em efetivos tomadores de decisão quando falamos de regras de negócio. Sabe aquele desejo antigo de UML para Analistas e Código para Programadores, ou melhor ainda: Caixinhas, Bolas, Setas e etc ligadas forma a execução de um processo do sistema! Parece loucura, mas não é. Usando BPM, ESB, JBI e etc, temos várias mecanismos para encaixar essas facilidades.

Errata:Sendo assim podemos criar uma Domain Specific Language (DSL), uma linguagem que é especifica para usuários, onde eles possam entender o que está acontecendo nas regras de negócio do sistema. É mais ou menos isso que o

Sendo assim, criamos um arquivo .DSL , que vai permitir que utilizemos uma linguagem natural que é especifica para usuários, onde eles possam entender o que está acontecendo nas regras de negócio do sistema. É mais ou menos isso que o projeto que estou ajudando tem que fazer, então vamos a um pequeno exemplo: PT_BR.dsl :
[java] Imprima “{msg}”=System.out.println(”{msg}”)
[when]A quantidade produto igual a {value}=p : Produto( estoque =={value})
[then]Chame o comando de continuação de Produto=p.dispatch();
[/java]

[java]rule “Estoque”

when
A quantidade produto igual a 0;
then
Imprima “Estoque zerado”;
Chame o comando de continuação de Produto
end
[/java]

E com uma alteração no Engine de Leitura de Regras:

[java]

Reader dsl =
new InputStreamReader( Thread.currentThread().getContextClassLoader().getResourceAsStream

(”com/summatech/framework/rules/dsl/”+ lang.toString() +”.dsl”));

PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( source, dsl );
[/java]

Agora, temos a possibilidade de trabalhar 100% com DSLs, sendo assim, em idiomas humanos, sendo assim inglês, francês e etc.

Consulte o site do JBoss Rules

Abraços

Edgar

4 comments to Revisitando o JBoss Rules: Para programar basta saber português!

  1. Renato Simões
    February 27th, 2007 at 8:31 pm

    O legal disso tudo é que a academia cada vez mais vai chegando no mercado através de grandes empresas e soluções.
    Neste caso incluindo a noção de sistemas especialistas como é visto no site do JBoss Rules (Algoritmo Rete).
    Quem sabe logo logo não teremos as mesmas implementações pra um Fuzzy ou Neural da vida de maneira tão fácil! :D:D

    Muito massa! =)

  2. Phillip Calçado "Shoes"
    February 28th, 2007 at 11:41 am

    Uma DSL na verdade é uma técnica utilizada para trazer os conceitos de um determinado domínio para o sistema. É como ao invés de implementar OO utilziando C você utilize Java, que possui construtos como classes, modificadores de acesso e interfaces que expressam os conceitos de uma modelagem OO na linguagem ao invés de simular estes em structs e funções.

    Apesar de auxiliar na definição de uma ubiquitous language, o objetivo do uso de DSL é diminuir o gap entre implementação e conceito do mundo real, não necessariamente o uso de linguagem natural.

    A listagem mostrada é um curto exemplo mas na verdade traz os conceitos de um domínio, apenas utiliza uma linguagem imperativa mais natural e em português para a definição de regras de negócio, o que não é uma DSL. Na verdade DSLs não dizem anda sobre a sintaxe, se é declarativa ou imperativa ou qualquer outra coisa, ela apenas define uma linguagem que é utilizada para modelar um domínio específico, como gerência de estoque.

    Para ser uma DSL teríamos conceitos como produto e estoque implementados como construtos da linguagem utilizada, exemplos e um ótimo texto do Fowler em:

    http://martinfowler.com/articles/languageWorkbench.html

    BPM, ESB, SOA e toda a parafernalha correlata não implicam em DSLs, na verdade não existe nenhuma ligação exceto que implementações como o mencionado Jboss Rules/Drools trazem alguns recursos para implementar mini-linguagens. Infelizmente ainda estão bem longe do ideal, na verdade a Microsoft tem uma linha de produtos antagônicos ao MDA que se aproxima mais do que se esperaria de uma LanguageWorkbench:

    http://msdn2.microsoft.com/en-us/teamsystem/aa718951.aspx

    No lado Java existem empresas que estão construindo seus workbenches, entre elas a JetBrains:

    http://www.jetbrains.com/mps/
    http://www.metacase.com/

  3. Edgar Silva
    March 5th, 2007 at 8:01 pm

    Acoselho todos que leiam o post de Phillip Calçado, onde o mesmo aponta a sua visão sobre este post, deixando claro alguns pontos, pontos estes que fiz questão de também deixar claro no seu blog.

    Mas vamos esclarecer alguns pontos aqui:

    • Quando comentei sobre BPM, ESB, SOA
    • , ainda nesse projeto, utilizarei MULE, e ai essa sopa de letras infelizmente vai entrar mais em ação e as regras dinâmicas estão nestes contextos.

    • Eu li seu comentário e agredi DSL do ponto de vista de definição, o parágrafo será reescristo. Muito obrigado.
  4. Luiz Fernando Arruda Rocha
    March 6th, 2007 at 12:23 pm

    Sim, Rules engines é muito interessante. Estou utilizando em um projeto para mapeamento de regras de negócios que mudam com bastante frequencia, como as regras fiscais e de logística. E o cliente quer ter o dominio e capacidade de manutenção destas regras. Optamos por armazenar as regras num database, e fornecer um simples CRUD para o cliente gerenciar suas regras. Dessa forma, o cliente mesmo atualiza suas regras do negócio, sem ter que solicitar change requests no sistema e sem a necessidade de fazer novamente build/deploy da aplicação.

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>