2013-10-28 92 views
0

我試圖做的是建立一個基於Web的規則引擎,用戶可以創建條件語句,它們存儲在一個數據庫,然後執行他們的數據集。 (例如,如果顏色等於綠色,則附加一些描述)JavaScript的前端PHP規則引擎

所以我在想使用JavaScript前端規則構建器(https://github.com/joshuamcginnis/rules-builder)在JSON中構建表達式,並將該命令表達式存儲在MongoDB中。

現在,當這些規則需要執行的,他們從DB拉,建成並通過標尺執行 - 一個無狀態的PHP規則引擎(https://github.com/bobthecow/Ruler

所以對我來說缺少的部分是如何翻譯的JSON命令轉換成Ruler能夠理解的鏈式PHP命令?有沒有一種設計模式可以解決這樣的問題?

回答

1

因此,這聽起來像是你將不得不編寫一個解析器(或解釋),一個可以計算這樣的命令從JSON文件equalequalOrGreaterThan或短synax =>=和建立基於這些表達命令。

看看這個鏈接http://www.slideshare.net/relaxnow/lets-build-a-parser,它會給你一些洞察到了我的意思。我希望我可以引用它,但它是一個幻燈片。

+2

,我發現這個庫,包括解析器和支持「英語」的規則。 https://github.com/hoaproject/Ruler – bonez

+0

不錯,將書籤,以防萬一它派上用場! – SamV

0

我認爲麪糊的方法是使用服務規則引擎並將其作爲服務公開。然後,您的JavaScript應用程序可以簡單地與服務進行通信,執行和操作規則。

這種方法的好處是你的規則執行不會發生在客戶端,你可以做一些有趣的東西,比如連接到數據庫,而不會影響任何東西,運行的任務,因爲你的規則行動後端。值得一提的是,並不是所有規則都可以在客戶端執行,因爲不同類型的依賴關係:數據,服務,資源......因此,在服務器端(大多數情況下)運行它們是可取的。最重要的是,當在服務器上運行時,這些規則可以在多個客戶端之間共享。

舉個例子,你可以檢查decision as a service sample,看看一個普通的JavaScript可用於執行的服務器進行通信。

0

我們剛剛發佈,積極支持項目叫甘道夫,你可以在這裏找到:http://gandalf.nebo15.com。甘道夫由兩個獨立的項目組成:決策引擎後端和前端。

我看起來像是否適合您的需求,除非它建立在不同的庫上。

利弊你:

  • 你不需要重新發明GUI,或擔心後端支持。
  • 但您需要刪除當前的解決方案並通過API使用新的解決方案。