我想设计一个规则引擎来过滤传入的对象如下过滤多个输入物体类是动态的,也就是说:我想扩展这个与D,E等类一起工作,如果D和E将在后面添加。规则引擎根据多个条件
public class A {
int a1;
String a2;
boolean a3;
Date a4;
List<String> a5;
...
}
public class B {
String b1;
boolean b2;
Date b3;
long b4;
...
}
public class C {
String c1;
boolean c2;
Date c3;
long c4;
...
}
将有我的规则引擎将过滤的类A,B或C的不同对象。
用户可以根据一组类的每个成员变量可能具有的预定义操作来定义不同的规则。
一些操作的一个例子:
- A1可具有类似操作:> =,< =,或一些范围之间,等等
- A2可具有操作,如:不是,或者是,等等。
- a3只能是真或假。
- A4可以是:特定的日期,特定日期之后,或之间,前等
- A5可以是:存在或不存在于列表中,对等的一个目的
一些示例规则A类是:
- a1为0和100之间,和a2不是 “ABC”,和A3是假的,和A4在今天之前,和A5包含 “CDF” 等
- A2是“abc”,a3是真实的,a4是在某个日期范围之间。
- 等
一颗子弹是一个规则。一般来说,可以有一个标准或更多的标准(多个标准是AND的组合)。
每个标准由一个成员变量定义,其中可以应用该变量的操作。
规则引擎必须能够处理由用户为A,B或C类的每个对象定义的规则。对于进入的每个规则(A规则,B规则或C规则),返回将是符合指定规则的对象列表。
我可以创建Criterion,Criteria,ARule,BRule,CRule,Operation对象等;我可以用蛮力的方式去做事;但如果......其他......陈述会很多。
我很欣赏任何设计模式/设计方法的所有想法,我可以使用它来使这个清洁和可扩展。
非常感谢您的时间。
也许你需要看的Drools:https://www.drools.org/。 – tsolakp
规则在代码中,还是需要将它们存储在某个地方?即文本文件,数据库等 –
@tsolakp:我想自己开发这个小型引擎。感谢您的建议。 – Budzu