Business Rule Engines

 
13 oktober 2010

Bedrijfsapplicaties zijn steeds meer afhankelijk van factoren zoals, wet en regelgeving, bedrijfsprocessen, procedures en beleid. Deze factoren vormen een groot deel van de logica binnen een applicatie en kunnen soms verspreid zijn door het hele systeem.
Op deze manier is onderhoud wat lastiger en zal er elke keer weer programmacode aangepast moeten worden. Om dit te voorkomen is het aantrekkelijk om een rule engine toe te passen op een dergelijk systeem.

Een rule engine is een programma om beslissingen mee te maken. De beslissingen worden genomen aan de hand van rules. Rules zijn een vertaling van bedrijfsprocessen en procedures. De rules kunnen door business experts worden opgesteld met behulp van grafische editors. In deze editor moet worden aangegeven wat de conditie is en wat de actie is die uitgevoerd moet worden als er aan de conditie is voldaan. Deze rules worden in een database opgeslagen genaamd “Business Rule Repository”.

De kern van de rule engine is de ”execution core”. De execution core vergelijkt de rules met de data en gaat na of er aan de conditie van de rules wordt voldaan. Deze core kan op verschillende methoden te werk gaan, zo kan de core gebruikt worden voor mutatie van data,beslissingen maken, beantwoorden van vragen, validatie, detectie van verkeerde data en er kunnen voorspellingen gemaakt worden.
De core maakt gebruik van data die in het werkgeheugen wordt gezet door de applicatie. Vervolgens voert de core de rules uit de Business Rule Repository uit die van belang zijn voor deze data.

Een rule engine heeft twee verschillende engines. Een flow engine kent maar één werkwijze en wordt gebruikt voor detectie en voorspellingen. De inference engine kent twee methodes.

Forward Chaining” is het doorlopen van de rules die van toepassing zijn op de data uit het werkgeheugen. Deze wordt vervolgens gemuteerd of er wordt een beslissing genomen. Als de data gemuteerd wordt en alle rules zijn doorlopen wordt de data terug gezet in het werkgeheugen. Op het moment dat de data wordt terug gezet met een andere waarde zal de rule engine deze weer gaan vergelijken met de rules die dit keer van toepassing zijn op de nieuwe data.
Forward Chaining wordt gebruikt voor mutatie, validatie en beslissingen.

Forward chaining

Backward Chaining” wordt gebruikt om vragen te beantwoorden. De engine gaat de condities van de rules doorlopen om tot een antwoord te komen.

———————————————————————————————-
Voorbeeld:
Ruleset
1.    Als iemand 20 is moet deze gaan werken.
2.    Als iemand moet gaan werken, dan moet deze het leger in.
3.    Als iemand 20 is gaat deze zelfstandig wonen.

Vervolgens wordt er ingevoerd: John is 20 jaar.

De rule engine zal nu nog niks ondernemen, maar zodra er gevraagd wordt aan het systeem:
Is er iemand die een baan in het leger krijgt?
Dan zal de rule engine de stappen terug volgen:
Feit: John is 20 jaar.
Dat betekend dat rule 1 van toepassing is. Aangezien het nu bekend is dat John moet gaan werken, is rule 2 ook van toepassing.
De rule engine kan nu dus concluderen dat John een baan in het leger krijgt.
———————————————————————————————-

De grootste voordelen van een rule engine zijn:
–    De logica staat op een centraal punt, waardoor het overzicht bewaard blijft.
–    Business experts kunnen de rules opstellen.
–    Voor aanpassingen in deze logica hoeft er geen programmacode gewijzigd te worden.
–    Schaalbaarheid en performance.
Kortom, een rule engine kan een zeer interessante optie zijn voor complexe systemen. Mocht je echt geïnteresseerd zijn in rule engines (toepasbaar voor zowel java als .NET), dan zijn er inmiddels een aantal documenten binnen Sogyo beschikbaar die het principe van een rule engine nog wat duidelijker kunnen maken (zoals “Scriptie Tim de Jager.pdf” en “Onderzoek verslag – Rule Engines”).


Werken met ?
Kijk dan bij onze mogelijkheden voor starters en/of ervaren IT'ers.


Categorieën: Project- & procesmanagement, Java (EE), .Net


Reacties (2)

  • Michiel schreef:

    Interessant artikel Tom ! Leuk om op deze manier iets
    te lezen over je onderzoek. :)

    Geplaatst op 13 oktober 2010 om 15:06 Permalink

  • Christa schreef:

    Leuk dat je je bevindingen met ons deelt!
    :-D

    Geplaatst op 13 oktober 2010 om 14:12 Permalink