Prós e contras dos mecanismos de regras Java [fechado]

108

Quais são os prós e os contras de adotar os mecanismos de regras Java JESS e Drools ? Existem outros jogadores?

Eu entendo que o Drools é Open Source e o JESS não, mas como eles se comparam em outras áreas, como facilidade de uso, desempenho, nível de integração com seu código?

Brabster
fonte

Respostas:

128

Quais são os prós e os contras de adotar os mecanismos de regras Java JESS e Drools?

Use um mecanismo de regras se precisar separar as regras de negócios da lógica do aplicativo. O artigo Seu projeto precisa de um mecanismo de regras tem um bom exemplo:

Por exemplo, um sistema típico de vitrine pode envolver um código para calcular um desconto:

if (product.quantity > 100 && product.quantity < 500) {
  product.discount = 2;
} else if (product.quantity >= 500 && product.quantity < 2000) {
  product.discount = 5;
} else if (product.quantity >= 2000) {
  product.discount = 10;
}

Um mecanismo de regras substitui o código acima por um código semelhante a este:

ruleEngine.applyRules(product);

Cabe a você decidir se colocar um console de administração de regras nas mãos de pessoas não técnicas é uma coisa boa ou não :)

Mais detalhes em Devo usar um mecanismo de regras? , Por que usar um mecanismo de regras? , Algumas diretrizes para decidir se deve usar um mecanismo de regras e no Google .

Existem outros jogadores?

Outros jogadores incluem JRules, Corticon (JRules é o IMO mais famoso - o que não significa o melhor).

como eles se comparam em outras áreas, como facilidade de uso, desempenho, nível de integração com seu código?

Não posso te dizer com precisão, tenho apenas uma pequena experiência (positiva) com Drools. Mas você receberá algum feedback de postagens de blog como JBoss Drools vs ILog JRules - uma história anedótica (certifique-se de lê-la) ou Working with Drools a partir de uma perspectiva JRules . Tenho certeza que você pode encontrar mais deles no Google (mas eu daria uma chance ao Drools).

Pascal Thivent
fonte
1
sua resposta parece boa. Você poderia me dizer onde usar baba e onde Jess? Basicamente, estou esperando a resposta mais relacionada a diff. b / w babar e Jess.
Tony
7
Uau, @Pascal, esse exemplo de quantidade / desconto de produto é um verdadeiro WTF. Digamos que a quantidade seja 5.000. O primeiro IF é avaliado como verdadeiro, os IFs ELSE nunca são avaliados. Colocar esse tipo de lógica de negócios em um mecanismo de regras não vai ajudar em nada, embora possa tornar mais difícil encontrar o bug.
DOK
Em sua defesa, esse exemplo veio daquele primeiro artigo. Não tenho tanta certeza de como isso parece mais confiável ... :)
Jeb
6
Apenas um bom exemplo dos perigos de colocar o controle das regras em mãos não técnicas.
Ritmo de
1
O Por que usar um mecanismo de regras? é o melhor entre os links listados
Aravind Yarram
16

Estamos avaliando regras agora para uso com nosso servidor de aplicativos. Encontramos OpenRules , que é fácil de integrar com Java e, pelo que nossos testes mostraram, rápido o suficiente. A principal vantagem do OpenRules sobre os outros é a forma como as regras são modificadas e tratadas. Tudo acontece em tabelas do Excel, que é a maneira mais fácil para não programadores. Todos os envolvidos, mesmo os não técnicos, entenderam tudo perfeitamente :-)

Também temos drools integrados, mas as regras são muito mais complicadas de entender, pois é uma abordagem mais programática. É por isso que nós - muito provavelmente - vamos nos ater ao OpenRules.

Dominik Sandjaja
fonte
19
O Drools também oferece suporte a regras editadas no Excel e por meio de uma interface da web.
retrônimo de
7

Tivemos uma pergunta semelhante conosco, finalmente pegamos o Drools, deve-se usar o drools se você tiver o seguinte:

  • Lógica de negócios que você acha que está ficando confusa com várias condições if devido à variedade de cenários
  • Você terá uma demanda crescente de aumento da complexidade
  • As mudanças na lógica de negócios seriam frequentes (1 - 2 vezes por ano também seria frequente)
  • O seu servidor tem memória suficiente, pois é uma ferramenta que consome muita memória, fornece desempenho com custo de memória

Tenha mais detalhes no seguinte URL

Sachin Thapa
fonte
3

Basta acrescentar que muitas pessoas estão procurando por algo mais parecido com o gerenciamento de certas condições para ativar ou desativar determinados recursos em um aplicativo.

Fiquei cansado de reimplementar o mesmo padrão repetidamente em todos os lugares que eu ia, então decidi fazer um projeto de OSS para ele chamado Roolie http://sourceforge.net/projects/roolie/

Acabei de fazer isso e, como não houve bugs relatados desde 2010, quando foi lançado, atualizei-o para v 1.0 sem alterações além das necessárias para hospedá-lo no Maven Central (que estou em processo de fazer )

Basicamente, a JSR-94 é um exagero para a maioria das coisas, e há uma enorme curva de aprendizado e sobrecarga que acompanham as ofertas atuais. Tudo bem se é isso que você quer. Mas se você deseja apenas encadear regras simples escritas em Java junto com XML para manter seus testes de estado, Roolie é uma maneira muito rápida de fazer isso. Sem dependências e sem curva de aprendizado.

RK
fonte
2
Roolie afirma que é licenciado pelo MIT no SourceForge, mas o código relata LGPLv3. Isso significa essencialmente que é duvidoso usá-lo em qualquer produto comercial (e também em alguns produtos de código aberto). Consulte nmav.gnutls.org/2013/03/the-perils-of-lgplv3.html .
ingyhere
2

Quando precisávamos de um mecanismo de regras, decidimos lançar o nosso próprio, porque os disponíveis eram muito complicados para nossas tarefas simples. Se você tiver experiência, mesmo que remotamente, com a análise de expressões que os usuários possam usar, isso não é muito difícil de fazer. Em nosso caso, a maioria das especificações é tratada por um XSD e apenas alguns dos campos são analisados ​​posteriormente.

Confusão
fonte
6
Os mecanismos de regra usam algoritmos bem estabelecidos (como encadeamento direto e o algoritmo Rete) para escalar até problemas não triviais. Se você está simplesmente avaliando expressões, uma biblioteca existente, como MVEL, pode ser útil.
jevon