2012-02-16 47 views
3

假設我必須設計一個規則引擎,其中取決於靜態配置規則,在運行時的責任鏈變化。實施這個問題的最佳設計模式是什麼?最好的設計模式來創建一個規則引擎

其他例如, (1)過濾,(2)劃分成子集(3),修改爲

對於每個流,客戶可以選擇所有的三個或一些三個或沒有的三個。

所以,我的程序集管道應該在運行時根據每個流的配置進行配置。

這是最好的設計模式嗎?

+2

你似乎陷入了陷阱,認爲一切都是通過設計模式解決的。告訴我們你想出了什麼設計...... – 2012-02-16 10:04:48

+0

我正在考慮讓一個規則引擎對象通過一個隊列來傳遞所有流。第一個鏈是過濾,第二個是修改,第三個是分區。 – Vignesh 2012-02-16 10:12:40

+0

如果尚未爲某個流配置特定的操作,它只會將該流傳遞給管道中的下一個流。這意味着我總是靜態地爲所有3個操作配置規則引擎。詢問是否有辦法爲該流配置流水線動態地根據特定流的需要選擇和選擇操作 – Vignesh 2012-02-16 10:15:27

回答

4

我不確定我是否理解您的用例,但有些開源項目似乎完全符合您的需求。

首先,你有Apache Camel,它允許你配置路由(靜態和/或動態)。通過這種方式,您可以根據配置的路由通過管道的每個組件路由事件流。

作爲替代或除駱駝外,Drools FusionEsper是進行復雜事件處理(即事件過濾,關聯,分離等)的兩個開源項目。它們都支持動態添加/刪除規則/查詢。因此,例如,您可以將一條路徑放入Drools/Esper會話中,而不是根據配置添加/刪除規則/查詢,以便執行所需的操作。

在我看來,你不需要創建一個「規則引擎」。你可以使用那裏的東西。