2008-09-15 16 views
6

Często muszę zaimplementować jakiś system reguł, który można edytować przez użytkownika - wymagania są na ogół na tyle różne, że ten sam system nie jest bezpośrednio stosowany, więc często napotykam na ten sam problem - jak zaprojektować System zasada, że ​​Dobre referencje/wskazówki dotyczące projektowania systemów reguł?

  1. jest utrzymaniu
  2. właściwie równoważy ekspresyjność z łatwością obsługi
  3. jest łatwo rozszerzyć (jeśli/kiedy się (2) źle).

Myślę, że systemy reguł/DSL są niezwykle cenne, ale nie czuję się dobrze, jeśli chodzi o moją umiejętność właściwego ich zaprojektowania.

Jakie referencje/wskazówki możesz zaoferować, które mogą ułatwić to zadanie?
Z powodu natury napotkanych problemów, istniejące języki zasadniczo nie mają zastosowania. (Na przykład, nie musisz ani wymagać od zwykłych użytkowników komputera uczenia się Pythona w celu napisania filtru wiadomości e-mail.) Podobnie, reguły języki, takie jak JESS, są tylko częściowym rozwiązaniem, ponieważ niektóre (prostsze) potrzeby interfejsu użytkownika do zbudowania na górze języka reguł, aby programiści mogli z niego korzystać. Ten interfejs nieodłącznie wiąże się z usunięciem pewnych funkcji lub utrudnieniem korzystania z tych funkcji, a także, że process stanowi problem opisany powyżej.

Edit: celu wyjaśnienia, jest pytanie o projektowaniu silnik reguła, ja nie szukam gotowych silnika reguł. Jeśli zaproponujesz silnik reguł, wyjaśnij, w jaki sposób rozwiązuje on problem związany z podejmowaniem dobrych decyzji dotyczących projektu.

Odpowiedz

0

Jedno znalazłem jest to, że jest w stanie określić zasady jak drzewa ekspresji sprawia realizację tyle prostsze. Jak już wspominałeś, wymagania od projektu do projektu są tak różne, że za każdym razem trzeba go ponownie zaimplementować. Drzewa ekspresji połączone z czymś podobnym do wzoru odwiedzającego tworzą bardzo (nie gra słów) ekspresyjne ramy, które można łatwo rozszerzyć. Możesz łatwo umieścić bardzo dynamiczny GUI na drzewach ekspresji, które spełniają ten aspekt Twoich wymagań.

Mam nadzieję, że to nie wygląda na to, że mówię, że wszystko wygląda jak gwóźdź z moim młotkiem, bo tak nie jest ... po prostu przydało mi się to niejednokrotnie :-)

+0

Nie jestem pewien, czy rozumiem stosowalność drzewek ekspresji. Czy sugerujesz je jako aspekt interpretatora języka reguł, czy używasz ich do reprezentowania opcji dla każdej reguły? Jestem nieco zdezorientowany. – rcreswick

0

Po pierwsze, zwykle nie zaleca się, aby użytkownicy końcowi definiowali reguły. To dlatego, że nie mają tła rozwoju i mogą po prostu napisać "kod", który przechodzi w nieskończoną pętlę lub robi inne dziwne rzeczy.

Tak więc system musi chronić przed tego rodzaju zachowaniem (co czyni go bardziej złożonym), zaakceptować taką możliwość lub uniemożliwić to użytkownikom końcowym.

Jeśli pracujesz z .NET, to jest ohydnie łatwe stworzenie własnego DSL poprzez rozszerzenie kompilatora Boo (np. Z Rhino.DSL możesz mieć proste DSL z jedną klasą).

2

Mieliśmy demo w domu tego narzędzia przez to sprzedawca: http://www.rulearts.com/rulexpress.php

Jako firma, mamy duże doświadczenie z silnikami reguły (np CleverPath Aion), ale narzędzi głównie dla programistów zorientowanych. To narzędzie (rulexpress) jest zorientowane na ludzi biznesu. To nie jest silnik reguł. Ale może wyprowadzać wszystkie dane w formacie xml (więc w zasadzie dowolny format, który ci się podoba), a to jest coś, co moglibyśmy wtedy uznać za dane wejściowe dla prawdziwego mechanizmu reguł, np. Windows Workflow Foundation (nie jeden z większych/lepszych silników reguł, ale wciąż).

Narzędzie samo w sobie wyglądało całkiem nieźle, niektóre rzeczy nigdy nie widziałem w żadnym narzędziu zorientowanym na programistę.

Są też pewne narzędzia do zarządzania regułami zbudowane wokół WF, jeśli to jest najważniejszy silnik reguł, sprawdź InRule.


Edited po oryginalne pytanie zostało wyjaśnione: Mimo że parał się to dawno temu (pisanie trochę język w javacc), uważam ten czas zła inwestycja teraz. Mój powyższy komentarz jest w tym samym duchu: weź prosty mechanizm reguł, prosty (komercyjny) interfejs użytkownika, który ułatwi użytkownikom biznesowym utrzymanie, i poświęca czas tylko na powiązanie tych dwóch elementów.

Powiązane problemy