Plusy i minusy silników reguł Java [zamknięte]

108

Jakie są zalety i wady przyjęcia silników reguł Java JESS i Drools ? Czy są jacyś inni gracze?

Rozumiem, że Drools to Open Source, a JESS nie, ale jak wypadają w innych obszarach, takich jak łatwość użycia, wydajność, poziom integracji z Twoim kodem?

brabster
źródło

Odpowiedzi:

128

Jakie są zalety i wady przyjęcia silników reguł Java JESS i Drools?

Użyj silnika reguł, jeśli chcesz oddzielić reguły biznesowe od logiki aplikacji. Czy projekt Potrzebny Zasada Silnik artykuł ma dobry przykład:

Na przykład typowy system sklepowy może obejmować kod do obliczenia rabatu:

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

Silnik reguł zastępuje powyższy kod, który wygląda następująco:

ruleEngine.applyRules(product);

Do Ciebie należy decyzja, czy oddanie konsoli administracyjnej reguł w ręce nietechnicznych ludzi to dobra rzecz, czy nie :)

Więcej szczegółów w artykule Czy powinienem używać silnika reguł? , Dlaczego warto korzystać z mechanizmu reguł? , Kilka wskazówek dotyczących podejmowania decyzji, czy używać mechanizmu reguł i Google .

Czy są jacyś inni gracze?

Inni gracze to JRules, Corticon (JRules to najsłynniejszy IMO - co nie znaczy najlepszy).

jak wypadają w innych obszarach, takich jak łatwość obsługi, wydajność, poziom integracji z Twoim kodem?

Nie mogę ci powiedzieć dokładnie, mam tylko małe (pozytywne) doświadczenie z Drools. Ale otrzymasz informacje zwrotne z postów na blogu, takich jak JBoss Drools vs ILog JRules - anegdotyczna historia (koniecznie ją przeczytaj) lub Praca z Drools z perspektywy JRules . Jestem pewien, że możesz znaleźć ich więcej w Google (ale spróbuję Drools).

Pascal Thivent
źródło
1
twoja odpowiedź wygląda dobrze. Czy mógłbyś mi powiedzieć, gdzie używać ślinienia się i gdzie Jess? Zasadniczo oczekuję odpowiedzi bardziej powiązanej różnicy. b / w ślinka i Jess.
Tony
7
Wow, @Pascal, ten przykład ilości produktu / rabatu to prawdziwy WTF. Powiedzmy, że to 5000. Pierwsza JEŻELI jest oceniana jako prawda, INNE JEŻELI nigdy nie są oceniane. Umieszczenie tego rodzaju logiki biznesowej w silniku reguł nic nie pomoże, chociaż może utrudnić znalezienie błędu.
DOK
Na swoją obronę ten przykład pochodzi z tego pierwszego artykułu. Nie jestem już taki pewien, jak wiarygodny jest już ten wygląd ... :)
Jeb,
6
To tylko dobry przykład niebezpieczeństw związanych z przekazaniem kontroli nad regułami w nietechniczne ręce.
Tempo
1
Dlaczego warto korzystać z mechanizmu reguł? jest najlepszy spośród wymienionych linków
Aravind Yarram
16

Obecnie oceniamy reguły do ​​użycia z naszym serwerem aplikacji. Natknęliśmy się na OpenRules , który jest łatwy do zintegrowania z Javą i, o ile wykazały nasze testy, wystarczająco szybki. Główną zaletą OpenRules nad innymi jest sposób, w jaki reguły są modyfikowane i obsługiwane. Wszystko dzieje się w tabelach Excela, co jest najłatwiejszym sposobem dla nieprogramistów. Wszyscy zaangażowani, nawet osoby nietechniczne, rozumiały wszystko doskonale :-)

Mamy również zintegrowane śliniaki, ale zasady są znacznie trudniejsze do zrozumienia, ponieważ jest to podejście bardziej programowe. Dlatego - najprawdopodobniej - będziemy trzymać się OpenRules.

Dominik Sandjaja
źródło
19
Drools obsługuje również reguły edytowane w programie Excel oraz za pośrednictwem interfejsu internetowego.
retronim
7

Mieliśmy z nami podobne pytanie, w końcu wybraliśmy Drools, należy użyć ślinek, jeśli masz:

  • Logika biznesowa, która Twoim zdaniem jest zaśmiecona wieloma warunkami z powodu różnych scenariuszy
  • Będziesz mieć rosnące zapotrzebowanie na wzrost złożoności
  • Zmiany logiki biznesowej byłyby częste (częste byłyby również 1-2 razy w roku)
  • Twój serwer ma dość pamięci, ponieważ jest to narzędzie wymagające dużej ilości pamięci, zapewnia wydajność kosztem pamięci

Więcej informacji znajdziesz pod następującym adresem URL

Sachin Thapa
źródło
3

Wystarczy dodać, że wiele osób szuka czegoś bardziej zbliżonego do zarządzania spełnieniem określonych warunków, aby włączyć lub wyłączyć pewne funkcje w aplikacji.

Byłem zmęczony ponownym wdrażaniem tego samego wzorca w kółko wszędzie, gdzie byłem, więc zdecydowałem się stworzyć dla niego projekt OSS o nazwie Roolie http://sourceforge.net/projects/roolie/

Właśnie go zmaksymalizowałem, a ponieważ od 2010 roku, kiedy został wydany, nie zgłoszono żadnych błędów, zaktualizowałem go do wersji 1.0 bez zmian innych niż te wymagane do hostowania go w Maven Central (nad czym obecnie pracuję ).

Zasadniczo JSR-94 jest przesadą w większości rzeczy i istnieje ogromna krzywa uczenia się i narzuty, które towarzyszą aktualnej ofercie. W porządku, jeśli tego chcesz. Ale jeśli chcesz po prostu połączyć proste reguły napisane w Javie razem z XML, aby utrzymać testy stanu, Roolie jest bardzo szybkim sposobem na zrobienie tego. Bez zależności i bez krzywej uczenia się.

RK
źródło
2
Roolie twierdzi, że ma licencję MIT na SourceForge, ale kod informuje o LGPLv3. Zasadniczo oznacza to, że użycie go w jakimkolwiek produkcie komercyjnym (a także w niektórych produktach Open Source) jest wątpliwe. Zobacz nmav.gnutls.org/2013/03/the-perils-of-lgplv3.html .
ingyhere
2

Kiedy potrzebowaliśmy silnika reguł, zdecydowaliśmy się stworzyć własny, ponieważ dostępne były zbyt skomplikowane dla naszych prostych zadań. Jeśli nawet masz zdalne doświadczenie w przetwarzaniu wyrażeń, które mogą wprowadzać użytkownicy, nie jest to zbyt trudne. W naszym przypadku większość specyfikacji jest obsługiwana przez XSD i tylko kilka pól jest dalej analizowanych.

Dezorientacja
źródło
6
Silniki reguł używają ugruntowanych algorytmów (takich jak łączenie w przód i algorytm Rete) w celu skalowania do nietrywialnych problemów. Jeśli po prostu oceniasz wyrażenia, przydatna może być istniejąca biblioteka, taka jak MVEL.
jevon