我想設計一個規則引擎來過濾傳入的對象如下過濾多個輸入物體類是動態的,也就是說:我想擴展這個與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