"Gopher Trzyma Się Zasad"
About | Tutorial | Rule Engine | GRL | GRL JSON | RETE Algorithm | Functions | FAQ | Benchmark
import "github.com/hyperjumptech/grule-rule-engine"
Grule to biblioteka silnika reguł dla języka programowania Golang. Zainspirowana uznanym JBOSS Drools, ale wykonana w dużo prostszy sposób.
Podobnie jak Droole, Grule ma swoje własne DSL, które można porównać w następujący sposób.
Drools's DRL jest jak :
rule "SpeedUp"
salience 10
when
$TestCar : TestCarClass( speedUp == true && speed < maxSpeed )
$DistanceRecord : DistanceRecordClass()
then
$TestCar.setSpeed($TestCar.Speed + $TestCar.SpeedIncrement);
update($TestCar);
$DistanceRecord.setTotalDistance($DistanceRecord.getTotalDistance() + $TestCar.Speed)
update($DistanceRecord)
end
A Grule's GRL jest jak :
rule SpeedUp "When testcar is speeding up we increase the speed." salience 10 {
when
TestCar.SpeedUp == true && TestCar.Speed < TestCar.MaxSpeed
then
TestCar.Speed = TestCar.Speed + TestCar.SpeedIncrement;
DistanceRecord.TotalDistance = DistanceRecord.TotalDistance + TestCar.Speed;
}
Nie ma lepszego wyjaśnienia niż artykuł autorstwa Martina Fowlera. Artykuł można przeczytać tutaj (RulesEngine by Martin Fowler).
Zaczerpnięte z witryny TutorialsPoint (z niewielkimi modyfikacjami),
Silnik regułowy Grule to produkcyjny system regułowy, który wykorzystuje podejście oparte na regułach do implementacji systemu ekspertowego. Systemy ekspertowe to systemy oparte na wiedzy, które wykorzystują reprezentacje wiedzy do przetwarzania zdobytej wiedzy w bazę wiedzy, która może być wykorzystywana do wnioskowania.
System reguł produkcyjnych jest systemem Turinga kompletnym, w którym nacisk kładzie się na reprezentację wiedzy w celu wyrażenia logiki propozycjonalnej i pierwszego rzędu w sposób zwięzły, jednoznaczny i deklaratywny.
Mózgiem systemu reguł produkcyjnych jest Interference Engine [silnik wnioskowania], który można rozbudować do dużej liczby reguł i faktów. Silnik wnioskowania porównuje fakty i dane z Regułami Produkcji - zwanymi również Produkcjami lub po prostu Regułami - w celu wyciągnięcia wniosków, które skutkują działaniami.
Reguła produkcyjna jest dwuczęściową strukturą, która wykorzystuje logikę pierwszego rzędu do wnioskowania na temat reprezentacji wiedzy. Silnik reguł biznesowych to system oprogramowania, który wykonuje jedną lub więcej reguł biznesowych w środowisku produkcyjnym w trybie runtime.
Silnik reguł pozwala zdefiniować "Co zrobić", a nie "Jak to zrobić".
(również zaczerpnięte z TutorialsPoint)
Reguły to fragmenty wiedzy często wyrażane słowami: "Gdy wystąpią pewne warunki, wykonaj pewne zadania".
When
<Condition is true>
Then
<Take desired Action>
Najważniejszą częścią Reguły jest jej część when
. Jeśli część when jest spełniona, uruchamiana jest część then.
rule <rule_name> <rule_description>
<attribute> <value> {
when
<conditions>
then
<actions>
}
Reguły ułatwiają wyrażanie rozwiązań trudnych problemów, a także ich weryfikację. W przeciwieństwie do kodów, reguły są napisane mniej skomplikowanym językiem, dzięki czemu analitycy biznesowi mogą łatwo odczytać i zweryfikować zestaw reguł.
Dane są przechowywane w obiektach domeny, a logika biznesowa w regułach. W zależności od rodzaju projektu taki podział może być bardzo korzystny.
Używając reguł, tworzy się repozytorium wiedzy (bazę wiedzy), która jest wykonywalna. Jest to pojedynczy punkt prawdy dla polityki biznesowej. Najlepiej, jeśli Reguły są tak czytelne, że mogą służyć również jako dokumentacja.
Ponieważ reguły biznesowe są w rzeczywistości traktowane jak dane. Dostosowanie reguł do dynamicznej natury biznesu staje się banalnie proste. Nie ma potrzeby ponownego budowania kodu, wdrażania go tak, jak w przypadku normalnego tworzenia oprogramowania, wystarczy tylko opracować zestawy reguł i zastosować je w repozytorium wiedzy.