开发者

What pattern/patterns work best for developing rule/decision engine [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance. 开发者_开发知识库 Closed 10 years ago.

I am working on a decision engine / rule evaluation engine. For example:

Input: Customer and all the offences done by the customer

Output: Consequences of the offences

A sample case would be:

Input: Customer(Jhonny Chimpo, 999-00-1111), Offences ( Broke window, slapped boss, kicked team lead in his groin)

Output: Gets pink slip

So the piece of code I want to write evaluates different offences based on rules for each offence and combined offence. The current code is just a maze of if and else statements. I am sure such business problems are common. What design/enterprise pattern is usually used to solve a problem like this?

Is it the specification pattern? I want the code to be open for extension, clean and flexible.


Basically business rules look like

forall rules:
  if <condition> then doAction();

What about categorizing all offences by severity using scores, perhaps extra bonus for frequent "evil-doers", some offences may become time-barred and whatever required.

Then a rough draft of an algorithm could be:

  • Sum of all scores of a customer (weighted)
  • compare to maximum

This would be straight forward using data structures instead of many (possibly deeply nested) if..then..else things.


I can suggest you a tool we used to solve a similar problem.

Take a look at JBoss Drools: http://www.jboss.org/drools/

It's a BRMS: Business Rules Management System

Here it is an introductory video: http://www.jboss.com/products/platforms/brms/


I'm not sure any of the answers above have been that helpful.

I have written similar components using expression trees. You can build lambda expressions that represent predicates, compile and execute them, all dynamically, and then trigger some action in response. This approach is powerful, flexible and strips out all the if/else horror (which is definitely not the way to go).

However, what you are really talking about is logic programming. There are numerous implementations of Prolog over .NET. Prolog is a logic based language, used alot for AI applications, that starts to become seriously powerful once you have your head around its paradigm.

Have a look at some of these ..

  • Prolog.NET
  • P#
  • C#Prolog


You could try something similar to this "event based" rules engine


I think any RETE Algorithm based Rule Engine would work for your case. You can try drools.


I think you're trying to develop an expert system. You can check the term and then check the appropriate programming languages as prolog etc.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜