Pytanie Mechanizm reguł napędzanych danymi - Drools


Oceniam Droolsa jako Mechanizm reguł do użytku w naszej aplikacji internetowej firmy.

Mój przypadek użycia to aplikacja do zarządzania zamówieniami.
Zasady są następujące:
- Jeśli typ użytkownika to "SPECJALNY", należy przyznać dodatkowe 5% zniżki.
- Jeśli Użytkownik dokonał już 10 zakupów, należy przyznać dodatkowe 3% zniżki.
- Jeśli kategoria produktu ma wartość "OLD", należy udostępnić opakowanie na prezent dla użytkownika o wartości 5 USD.
- Jeśli kategoria produktu ma wartość "NOWOŚĆ", należy przekazać Kosz na prezent dla użytkownika o wartości 1 USD
- Jeśli Użytkownik dokonał w przeszłości zakupów o wartości przekraczającej 1000 USD, wysyłka jest bezpłatna

Natychmiastowym wyzwaniem, które widzę, jest to, że:
- Nie ma znaczącego interfejsu użytkownika, który mogę zaoferować użytkownikom końcowym w celu modyfikacji reguł.
- Guvnor UI lub dowolny edytor do modyfikowania plików drl jest po prostu nie do zaakceptowania z punktu widzenia użytkownika końcowego - Większość z tych reguł będzie działać na często ogromnych danych dostępnych w db

Więc,
- Chcę umożliwić administratorom określenie tej reguły z poziomu interfejsu użytkownika aplikacji sieci Web.
- Czy mogę przechowywać te "Zasady" w bazie danych, a następnie operować na nich za pośrednictwem Drools - przynajmniej to pozwala mi "modyfikować" te Reguły przez mój "własny" interfejs użytkownika. Jest to więc coś w rodzaju tabeli decyzyjnej w DB.
- Jaki jest najlepszy sposób na zrobienie tego?


11
2017-08-21 14:03


pochodzenie




Odpowiedzi:


Poprosiłeś mnie o udzielenie odpowiedzi na twoje pytanie, biorąc pod uwagę moją odpowiedź Zasady biznesowe oparte na danych. Moja odpowiedź na to pytanie była taka, że ​​SQL jest złym rozwiązaniem wykonać reguły biznesowe przechowywane w bazie danych. Osoba, która zadała to pytanie, chciała wygenerować wyrażenia SQL ze swoich reguł dotyczących przechowywanych reguł biznesowych i ostrzegłam przed robieniem tego, ponieważ prowadziłoby to do problemów z bezpieczeństwem, testowalnością, wydajnością i konserwacją.

Nie używałem Drools, ale z dokumentacji wynika, że ​​zawiera Guvnor, menedżera reguł biznesowych, który obsługuje używanie RDBMS jako magazyn dla reguł zdefiniowanych przez użytkownika.

[Drools] Guvnor używa standardu JCR do przechowywania zasobów, takich jak reguły. Domyślną implementacją jest Apache Jackrabbit, http://jackrabbit.apache.org. Obejmuje to wbudowany mechanizm magazynowania / bazę danych, którego można używać w niezmienionej postaci lub w razie potrzeby skonfigurować istniejący system RDBMS. (http://docs.jboss.org/drools/release/5.2.0.Final/drools-guvnor-docs/html/chap-database_configuration.html)

Apache Jackrabbit nie jest RDBMS, jest "repozytorium treści jest hierarchicznym magazynem treści z obsługą strukturalnej i nieustrukturyzowanej zawartości, wyszukiwania pełnotekstowego, wersjonowania, transakcji, obserwacji i innych." Wydaje się to być bardziej odpowiednim repozytorium dla Drools.

Ale Drools nie mówi, że próbuje użyć SQL do wykonywania reguł biznesowych. Ma oddzielny komponent, Drools Expert (silnik reguł) aby to zrobić.

Drools Expert to deklaratywne, oparte na regułach środowisko kodowania. Pozwala to skupić się na "tym, co chcesz robić", a nie "jak to zrobić".   (http://www.jboss.org/drools/drools-expert.html)

SQL jest również deklaratywnym językiem programowania, ale jest przeznaczony do wykonywania operacji relacyjnych na danych o strukturze tabeli. Język służący do implementacji mechanizmu reguł ma inne cele i może prawdopodobnie robić rzeczy, których SQL nie potrafi (i na odwrót).

Sugerowałbym, żebyś użył Droolsa, użyj RDBMS jako repozytorium, ponieważ dokumentuje (korzystaj z implementacji repozytorium treści zgodnej z JCR, nie próbuj tworzyć własnych). Następnie użyj ich Drools Expert jako specjalistycznego języka zaprojektowanego do wykonywania reguł.


5
2017-08-23 15:55



Zgadzam się, że implementacja logiki biznesowej za pomocą SQL jest bardzo złym pomysłem, ale przechowywanie reguł biznesowych w bazie danych, które następnie będą przetwarzane i wykonywane w "mechanizmie reguł", nie jest złym pomysłem. W rzeczywistości stworzyłem "konfigurator" produktów opartych na materiałach, które wykorzystywały rachunki jako reguły biznesowe, które wpływały na to, które części można łączyć w celu tworzenia niestandardowych produktów. Reguły były oceniane przez silnik oparty na JavaScript, ale utrzymywane w samych rachunkach. - Justin Swanhart


  • Nie ma znaczącego interfejsu użytkownika, który mogę zaoferować użytkownikom końcowym w celu modyfikacji reguł.

Po wyjęciu z pudełka, zapewnia Guvnor internetowe tablice decyzyjne (i Excel, jeśli wolisz), jak sam twierdzisz, chciałbyś przekazać. To zapewnia redaktorzy prowadzący dla bardziej złożonych reguł, ale twoje reguły wydają się bardzo proste.

  • Guvnor UI lub dowolny edytor do modyfikacji plików drl jest po prostu nie do przyjęcia z punktu widzenia użytkownika końcowego

Jak wspomniano, Guvnor obsługuje tabele decyzyjne. Jeśli nie podoba ci się układ aplikacji internetowej Guvnor, możesz po prostu osadzić edytorów Guvnor do własnej aplikacji internetowej.

  • Większość z tych reguł będzie działać na często ogromnych danych dostępnych w db

Rozmiar twojej bazy danych nie ma znaczenia dla użycia Guvnor. Guvnor służy do edycji reguł, a nie do oceny środowiska wykonawczego. Drools Expert to silnik reguł uruchomieniowych. To jest szybkie. Może obsługiwać bardzo duże ilości danych i bardzo duże ilości reguł. Wszystko, co musisz zrobić, to pisać zapytania do bazy danych, aby uzyskać odpowiednie porcje tych danych do silnika reguł w środowisku wykonawczym. Musisz to zrobić, niezależnie od tego, jakie rozwiązanie zastosujesz.

Na marginesie, jeśli to, o czym naprawdę chodzi, jest wyjaśnieniem, kiedy silniki reguł są dobrymi (i złymi) rozwiązaniami problemu, to polecam lekturę Dlaczego warto korzystać z mechanizmu reguł? sekcja podręcznika Drools Expert.


4
2017-08-27 17:40





Ogólnie rzecz biorąc, stwierdziłem, że łatwiej jest pracować na bardziej abstrakcyjnym poziomie, takim jak Model Domeny, i mieć jakieś programowe przejście od tego do zasad Drools, zamiast bezpośrednio zajmować się zasadami Drools. W ten sposób możesz przechowywać swój Model Domowy, jak ci się podoba, i możesz budować jego interfejsy, itp., I nadal mieć opcję generowania reguł Drools na żądanie. Następnie rzuć wyzwanie, tworząc programową transformację z twojego modelu do reguł Drools, ale pomocne będą tutaj narzędzia do szablonów. Użyłem szablonu do tego, i to działa dobrze.


0
2017-08-21 17:42



kevinpeterson> Dziękuję za twoje dane wejściowe, ale po co zawracać sobie głowę przekształcaniem reguł domeny na drl (drools)? co jest zaletą, możemy zinterpretować reguły domeny prawdopodobnie z poziomu aplikacji internetowej. W zasadzie to sprowadza się do - Dlaczego Drools. Nie mam doświadczenia w tych dziedzinach, stąd te pytania. - Jasper