Potrzebuję prostego silnika zasad, tak myślę? [zamknięte]

Obecnie pytanie to nie pasuje do naszego formatu pytań i odpowiedzi. Oczekujemy, że odpowiedzi będą poparte faktami, referencjami lub wiedzą specjalistyczną, ale to pytanie będzie prawdopodobnie wywoływało debatę, argumenty, ankiety lub rozszerzoną dyskusję. Jeśli uważasz, że to pytanie można poprawić i ewentualnie ponownie otworzyć, odwiedź Pomoc centrum dla wskazówek. Zamknięty 7 lat temu .

Potrzebuję porady na temat najlepszego podejścia do rozwiązania tego problemu.

Zbadałem DROOLS, Java Rule Engine i kilka innych. Wszystkie z nich są potężne i mają w sobie dobre rzeczy. Nie wiem, który (jeśli w ogóle) będzie dla mnie najlepszym wyborem. Mam jeden przedmiot biznesowy. (uproszczone dla demo)
Person
     firstName:String
     lastName:String
     departMent:String
     hireDate:Date

Muszę napisać edytor w aplikacji internetowej, który pozwoli na tworzenie złożonych reguł wokół tych pól. Muszę wspierać złożone zagnieżdżanie i / lub logikę. Potrzebuję tylko podstawowych operatorów, a reguła powinna po prostu Oceniać na true lub false. Jeśli reguła zostanie oceniona na true lub false, nastąpi odpowiednio jedna akcja.

Na przykład,

FirstName zawiera "wartość" i (lastName równa się "input" lub dział Zawiera "input")

Pomyślałem, że może powinienem po prostu napisać własny parser i ocenić logikę w moim własnym kodzie. Nie wiem co robić, wszelkie rady lub linki do czegoś do przeczytania byłyby bardzo mile widziane. Czy jest jakiś konkretny wzorzec projektowy, który mógłbym zbadać?

Jak rozwiązałbyś ten problem? Jednym z zastrzeżeń co do zasad jest to, że może są one zbyt skomplikowane na zwykły problem?
Author: Andy, 2010-12-01

7 answers

To nie jest pytanie tak/nie, ale prawdopodobnie mogę podzielić się moimi doświadczeniami i mam nadzieję, że pomoże. W kilku projektach z powodzeniem korzystałem z DROOLS. Oprócz niektórych przypadków (inny zespół miał problemy z DROOLS pod dużym obciążeniem) DROOLS jest całkiem przydatną biblioteką.

Zbudowałem aplikację, która:
1. read input from a source
2. wybierz następną akcję na podstawie danych wejściowych z zestawu dostępnych operacji

Jakkolwiek banalnie to wygląda, to musiało być bardzo elastyczny: {]} 1. Wejście było zmiennym zestawem par nazwa-wartość, nazwy nie zostały z góry określone.
2. wartości, obecność / brak określonej nazwy / wartości (na podstawie wystąpienia/braku zdarzeń), wyzwalają różne akcje.
3. Reguły biznesowe mogą się zmieniać podczas uruchamiania aplikacji.

Może są lepsze rozwiązania, ale na dobre lub złe, skończyło się na użyciu śliny. Opracowałem BPEL, w którym decyzje są podejmowane przez komponent DROOLS. Komponent DROOLS wewnętrznie odczytuje zasady podejmowania decyzji z arkusza kalkulacyjnego Microsoft Excel. Przebudowuje reguły w przypadku zmiany w pliku. Teraz eksperci od domen zmieniają ten arkusz kalkulacyjny, gdy jest to wymagane, a my nie przechodzimy przez bolesne wdrożenia!

Jeśli potrzebujesz zaawansowanego interfejsu użytkownika, DROOLS Guvnor jest łatwo dostępną aplikacją internetową (z bogatym interfejsem), która pomoże Twoim ekspertom w budowaniu reguł i przechowywaniu ich w bazie danych.

 5
Author: CMR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-03 18:43:13

Dokumentacja Drools mówi o tym, kiedy używać silnika reguł. http://downloads.jboss.com/drools/docs/5.1.1.34858.FINAL/drools-expert/html_single/index.html#d0e181

Z docs...

Najkrótszą odpowiedzią na to pytanie jest "kiedy nie ma zadowalających tradycyjnych podejście programistyczne do rozwiązania problem.". Biorąc pod uwagę tę krótką odpowiedź, potrzebne jest więcej wyjaśnień. Na powód, dla którego nie ma "tradycyjnego" podejście jest prawdopodobnie jednym z "po": {]}

-- problem jest po prostu zbyt skomplikowany dla tradycyjny kod.

Problem może nie jest skomplikowany, ale nie widzisz nietrwałego sposobu na budowanie rozwiązania dla it.

-- problem nie jest oczywisty algorytmiczne rozwiązanie.

To złożony problem do rozwiązania, nie ma oczywistych tradycyjnych rozwiązania, czyli w zasadzie problem nie jest do końca zrozumiane.

-- logika często się zmienia

Logika sama może być nawet prosta ale zasady zmieniają się dość często. W wiele wydań oprogramowania organizacji są nieliczne i daleko między i pluggable zasady mogą pomóc zapewnić " zwinność" to jest potrzebne i oczekiwane w dość bezpieczny sposób.

-- eksperci domen (lub analitycy biznesowi) są łatwo dostępne, ale są nietechniczne.

Specjaliści od domen często posiadają bogactwo wiedzy o zasadach prowadzenia działalności gospodarczej i procesy. Zazwyczaj są to nietechniczne, ale może być bardzo logiczne. Reguły mogą pozwolić im wyrazić logika w ich własnych warunkach. Oczywiście., nadal muszą myśleć krytycznie i być zdolnym do logicznego myślenia. Wiele osób na stanowiskach nietechnicznych nie mają szkolenia z logiki formalnej, więc bądź ostrożny i pracuj z nimi, jak poprzez kodyfikację wiedzy biznesowej w zasady, często ujawniasz dziury w sposób prowadzenia działalności gospodarczej i procesy są obecnie rozumiane.

Kiedy nie używać...

As rule silniki są dynamiczne (dynamiczne w tym sensie, że zasady mogą być przechowywane i zarządzane oraz aktualizowane jako danych), są one często postrzegane jako rozwiązanie problemu wdrożenia oprogramowanie. (Większość działów IT wydaje się istnieją w celu zapobiegania rozwijane oprogramowanie.) Jeśli jest to powód, dla którego chcesz użyć reguły silnika, należy pamiętać, że silniki reguł pracuj najlepiej, gdy potrafisz pisać Zasady deklaratywne. Jako alternatywę, możesz rozważyć projekty oparte na danych (tabele wyszukiwania), lub przetwarzanie skryptów silniki, w których skrypty są zarządzane w bazie danych i mogą być aktualizowane w locie.

 1
Author: Bill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-01 23:16:41

Proponuję własny parser. W tym kontekście dlaczego nie można serializować obiektu i użyć AJAX do walidacji go w back-endzie? Następnie oddziela logikę walidacji od interfejsu użytkownika.

 0
Author: Dasith Wijes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-01 22:51:40

Chciałbym spojrzeć na kilka przykładowych interfejsów silnika reguł i zobaczyć, które z nich Lubię. Możesz spojrzeć na Interfejsy reguł poczty internetowej, aby uzyskać kilka pomysłów. Jeśli naprawdę potrzebujesz prostego silnika reguł, wystarczy stworzyć dobry interfejs, a następnie możesz wysłać reguły na serwer za pomocą javascript.

 0
Author: Jon Snyder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-01 22:54:00

Prawdopodobnie nie. Potrzebujesz porządnego modelu domeny. Nie taki, w którym twoje obiekty są tylko elementami zastępczymi danych. Czy Twoi użytkownicy prawdopodobnie będą w stanie zrozumieć i używać tak złożonego systemu reguł, a nie ci, którzy wolą tylko programowanie w Javie, gdzie mają odpowiednie wsparcie dla enkapsulacji i refaktoryzacji? Systemy reguł działają tylko z prostymi regułami na ograniczonej domenie, gdzie można wyjaśnić ludziom nie wyszkolonym na programistów, jak je budować. I nie zapominaj o zasadach budowania to tylko programowanie, więc nadal potrzebujesz kontroli wersji, testów i nie chcesz globali.

 0
Author: Stephan Eggermont,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-01 23:16:41

Czy Jython nie byłby przydatny?

Każde wyrażenie / reguła złożona może być ciałem funkcji. Więc użytkownik dostarcza ciało, a Twój kod umieszcza specyfikację funkcji wokół niego, a następnie ją wykonuje.

Możesz również umieścić dowolne obiekty / zmienne Javy w kontekście jython, które będą używane w ciele skryptu/ funkcji.

Wtedy masz ustandaryzowany, rozszerzalny szeroko używany język na wyciągnięcie ręki. Ale myślę, że edytor Jython może być wyzwaniem.

 0
Author: Houtman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-02 08:54:26

Próbowałeś JBehave ?

JBehave to framework for Behaviour-Driven Development (BDD). BDD jest ewolucja rozwoju opartego na testach (TDD) i akceptacja-test driven design, i ma na celu uczynienie tych praktyk bardziej dostępnymi i intuicyjny zarówno dla początkujących, jak i ekspertów. Zmienia słownictwo od testowania do zachowania, i pozycjonuje się jako filozofia projektowania.

 -2
Author: Steven,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-17 20:04:05