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
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! =)
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/
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:
, 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.
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.