2012-05-15 56 views
2

我需要構建一個應用程序(Ruby),允許用戶選擇一個或多個模式,並在這些模式相匹配的情況下繼續並完成一組操作。 在做我的研究的同時,我發現了基於規則的系統的新(我)領域,並花了一些時間閱讀它,它看起來正是我需要的那種功能。設計模式/建立規則引擎的建議

該應用程序將使用不同的Web服務集成在一起,並允許像這樣一個規則:

當增加高層接觸和的Zendesk車票創建不添加電子郵件到數據庫

我有兩個想法打造這個。首先是構建某種類型的DSL,以便能夠指定規則條件並使用用戶輸入即時創建它們。

第二個是建立一些規則類,每個規則類都有一個模式/匹配器和動作方法。該模式會評估表達式並返回true或false,如果匹配是肯定的,則會執行該操作。

然後需要堅持規則,然後定期評估。

任何人都可以點亮這個設計或點某處我可以得到更多的信息嗎?

謝謝

回答

0

在商業規則引擎例如Drools,FlexRule ...模式匹配由RETE算法處理。而且,它們中的一些爲不同的邏輯提供了多個不同的引擎,例如程序,驗證,推理,流程,工作流程......並且他們還提供DSL定製... 規則排序和執行是基於可以在引擎上定義的議程和激活來處理的。衝突解決策略將幫助您找到適當的激活來觸發。

我建議您使用託管在主機/服務上的商業產品。並使用簡單的Json/Xml格式與規則服務器進行通信並執行您的規則。這可能會比創建一個更好的結果。但是,如果您有興趣創建屬於自己的模式匹配引擎,請考慮複雜生產系統的RETE算法,議程和激活機制。

在RETE算法中,您可能會考慮至少實現積極和消極條件。在實現RETE時,您需要實現beta和alpha存儲以及支持左右激活的廣告連接節點。

0

您是否認爲您可以在基於圖表的表示中表示您的問題?我很確定你的問題可以被認爲是一個基於圖形的問題

如果是,爲什麼你不使用圖形轉換系統來定義和應用你的規則。我會推薦的是GrGen.NET。使用GrGen.NET的基礎上五個步驟

  1. 元模型的定義:在這裏,您定義積木,即類型圖節點和圖形的邊緣。
  2. 規則集的定義:這是你可以把你的模式檢測規則。此外,您可以創建規則封裝過程來操作基於圖形的數據結構。
  3. 編譯:基於前面的兩個步驟,創建一個C#彙編(DLL)。應該有一種方法可以從Ruby訪問這樣一個DLL。
  4. 規則序列的定義:規則序列包含執行單個規則的結構。通常情況下,這是規則連接在一起的邏輯結構。
  5. 圖形轉換:在DLL上應用規則序列會導致圖形轉換,隨後可以導出,保存或進一步操作。

你可以找到一個很好的GrGen.NET的手工這裏:http://www.info.uni-karlsruhe.de/software/grgen/GrGenNET-Manual.pdf