2013-08-21 84 views
11

我一直在評估Drools作爲在我們的商業Web應用程序中使用的規則引擎。數據驅動規則引擎 - Drools

我的用例是訂單管理應用程序。
而規則是以下類型:
- 如果用戶類型是「特別」給予額外5%的折扣。
- 如果用戶已經完成了10+購買,可額外享受3%的折扣。
- 如果產品類別爲「舊」,請給價值5美元的用戶贈送禮品籃。
- 如果產品類別爲「NEW」,贈送禮物籃給用戶的價值$ 1
- 如果用戶在過去作出的超過1000 $的採購,航運是免費

當前面臨的挑戰我看到的是那:
- 沒有有意義的UI,我可以提供給最終用戶修改規則。
- 的Guvnor UI或任何編輯器修改DRL文件是不但從 終端用戶點可以接受的 - 大多數這些規則將要操作可經常龐大的數據在數據庫

所以,
- 我希望管理員用戶能夠在我的Web App UI中指定這些規則。
- 我可以將這些「規則」存儲在數據庫中,然後通過Drools對它們進行操作 - 至少允許我通過「自己的」UI「修改」這些規則。所以這就像DB中的決策表。
- 什麼是最好的方式去做這件事?

回答

0

一般來說,我發現在一個更抽象的層次上工作比較容易,比如一個領域模型,並且從某種程序轉換到Drools規則,而不是直接處理Drools規則。這樣,無論你喜歡什麼,你都可以存儲你的領域模型,並且你可以圍繞它建立UI等等,並且還可以根據需要生成Drools規則。然後用這個挑戰來創建一個從你的模型到Drools規則的程序轉換,但是模板工具在這裏會有所幫助。我已經使用了Groovy模板,並且運行良好。

+0

kevinpeterson>感謝您的輸入,但爲什麼甚至打擾將您的域規則轉換爲drl(drools)?有什麼好處,我們可以很容易地從網絡應用程序中解釋域規則。然後基本上歸結爲 - 爲什麼Drools。我在這些領域沒有經驗,因此有這些問題。 – Jasper

5

你讓我回答你的問題,給出我對Data driven business rules的回答。我對這個問題的回答是,SQL是存儲在數據庫中的業務規則的一個不好的解決方案。提出這個問題的人想要從他們存儲的業務規則中生成SQL表達式,並且我警告不要這樣做,因爲這會導致安全性,可測試性,性能和維護方面的問題。

我還沒有使用Drools,但是我從文檔中收集到它包含Guvnor,這是一個業務規則管理器,支持將RDBMS用作用戶定義規則的存儲庫

[Drools] Guvnor使用JCR標準來存儲資產,如規則。默認實現是Apache Jackrabbit,http://jackrabbit.apache.org。這包括一個開箱即用的存儲引擎/數據庫,您可以按原樣使用它,或者根據需要配置使用現有的RDBMS。(http://docs.jboss.org/drools/release/5.2.0.Final/drools-guvnor-docs/html/chap-database_configuration.html

阿帕奇兔崽子是不是一個RDBMS,這是「內容存儲庫是一個層次的內容存儲與結構化和非結構化內容,全文搜索,版本控制,交易,觀察和更多的支持。」這看起來像是一個更適合Drools的存儲庫。

但Drools沒有說它會嘗試使用SQL來執行這些業務規則。它有一個獨立的組件,Drools Expert(規則引擎)來做到這一點。

Drools Expert是一個基於規則的聲明性編碼環境。這使您可以專注於「您想要做什麼」,而不是「如何做到這一點」。 (http://www.jboss.org/drools/drools-expert.html

SQL也是聲明性編程語言,但它的設計表結構化數據進行關聯操作。實現規則引擎的語言有不同的目標,可能會做SQL不能做的事情(反之亦然)。

所以我會建議如果您使用Drools,隨意使用RDBMS作爲他們的文檔庫(使用他們符合JCR的內容存儲庫實現,不要試圖自己設計)。然後使用他們的Drools專家作爲執行規則的專門語言。

+2

我同意用SQL實現業務邏輯是一個非常糟糕的主意,但是將業務規則存儲在數據庫中,然後在「規則引擎」中處理並執行它並不是一個壞主意。實際上,我建立了一個基於物料清單的產品「配置程序」,它使用這些賬單作爲業務規則,影響哪些部分可以組合起來以創建定製產品。規則由一個基於JavaScript的引擎進行評估,但是在賬單中保存。 –

4
  • 沒有意義的用戶界面,我可以提供給最終用戶修改規則。

開箱即用,提供的Guvnor web based decision tables(和Excel if you prefer),因爲你說你想提供。它爲guided editors提供了更復雜的規則,但是您的規則看起來很簡單。

  • 的Guvnor UI或任何編輯器修改DRL文件是不從視圖

如所提到的終端用戶點上可接受的,支持的Guvnor決策表。如果您不喜歡Guvnor Web應用程序的佈局,那麼您可以將embed the Guvnor editors放入您自己的Web應用程序中。

  • 大多數這些規則將要操作可經常龐大的數據在數據庫

你的數據庫的大小是無關緊要的使用的Guvnor的。 Guvnor用於編輯規則,而不是運行時評估。 Drools Expert是運行時規則引擎。它很快。它可以處理大量的數據和大量的規則。您只需編寫數據庫查詢即可在運行時將相關數據塊納入規則引擎。無論您嘗試實施哪種解決方案,都需要這樣做。請注意,如果您真正關注的是解釋何時規則引擎是問題的良好(或不良)解決方案,那麼我建議您閱讀Drools專家手冊的Why use a Rule engine?部分。