我是规则引擎的新手,目前正在学习基础知识。
我想让我的用户可以定义一些规则来修改他们的数据。因此,我正在考虑为此实现规则引擎的想法。数据是由系统创建的,看起来或多或少如下:
Destination, Dispatcher, NumberOfEvents, Price
Germany, D1, 15, 150.0
Germany, D5, 20, 200.0
Germany, DWrong, 20, 200.0
Spain, D1, 5, 50.0
Spain, D4, 15, 150.0
例如,要在“目的地”为“西班牙”时为所有分派器提供10%的折扣,用户可以添加以下规则:
Rule1:
When
(country == Spain)
Then
Price * 0.9
现在,如果存在一个Dispatcher等于DWrong的条目,则用户还想创建一个Dispatcher等于“ Error”的条目(其他值与“ DWrong”相同)。例如:
Germany, Error, 20, 200.0
但是仅当“ DWrong”中的NumberOfEvents大于同一目的地的NumberOfEvents总数的1%时,才应创建条目。
伪代码将如下所示:
loop (Destination) // Germany, Spain
{
loop () {
TotalNumberOfEvents += NumberOfEvents;
}
loop () {
if (Dispatcher == "DWrong") {
if (NumberOfEvents > (TotalNumberOfEvents * 0.01) ) {
createRow(Destinaction, "Error", NumberOfEvents, Price);
}
}
}
}
到目前为止,我想到的是:
Rule1:
When
(Destination == "Germany")
Then
global_GermanyTotalNumberOfEvents += NumberOfEvents
Rule2:
When
(Destination == "Germany" && Dispatcher == "DWrong" && NumberOfEvents > (global_GermanyTotalNumberOfEvents * 0.01))
Then
createRow(Destination, "Error", NumberOfEvents, Price)
// Repeat for spain
这对用户来说不太友好,但是可以。但是我不确定在rule1完成循环之后如何运行rule2?我认为我的概念不正确。
注意:目前还没有特定的规则引擎,目前我只是在研究并检查规则引擎是否适合用户使用这种情况。