天天看點

究竟什麼才是真正的規則引擎

 可能很多人還不了解規則引擎是什麼東西,或者不知道規則引擎究竟有什麼用。我們都知道工作流引擎,也聽說過JBoss下面有個Drools,或者我們知道 weblogic或者Oracle也有自己的Business Rule,我們可能還聽說過ILOG被IBM收購了,如果我們研究微軟的WWF,可能也知道其中有RuleSet等内容。國内的一些web快速開發平台,也提到了規則引擎。

在我們的印象中,我們感覺規則引擎就是解決業務邏輯層的實作問題的。是以我們理所當然的覺得工作流中的某個節點的邏輯處理,應該可以用規則引擎來解決,那麼工作流本身的邏輯也應該可以由規則引擎來解決。另外我們也會覺得,平時項目當中的業務邏輯應該都可以用規則引擎來解決。

但是當我們在使用上述這些規則引擎,卻發現很難和我們實際應用的業務邏輯層的業務邏輯實作相對應。

我們以JBoss的Drools為例,由于其規則引擎使用了比對規則的方式來進行,是以在應用這些規則引擎時。首先需要将我們具體應用中的業務邏輯做抽象,抽象成一條條規則之後,再打包成一個規則包。一個規則包相當于一個智能塊。當資料傳遞給這個智能塊後,系統會以比對的方式應用滿足條件的邏輯處理。

當采用這種方式時,應該說邏輯更抽象了,在一個更高的層次加以抽象化的定義。但是也使得規則引擎的應用得到了很大的限制。

首先這種抽象本身需要一個複雜的分析過程,這需要有很強的分析設計能力。另外我們平時具體應用中的業務邏輯層,大量的邏輯都是對實際資料的處理,很多時候還是一個批量資料的處理,甚至有些邏輯需要的參數我們并不能定義在規則中,而是在資料庫表中進行配置。是以我們常見的業務邏輯層的開發,并不能先設計出一個資料模型,然後再在此基礎上抽象邏輯。

是以我們發現Drools等規則引擎很難用,根本不是我們所需要的那樣。

我們研究規則引擎也有一段時間了。有時候我們發現自己做的規則引擎并不是一個規則引擎。因為我們和像Drools這些規則引擎有很大的差别。但我們确實解決了業務邏輯層的業務邏輯配置問題。應該說我們的更實用一些。但是我們卻沒法去實作JSR94标準。我們不光處理業務邏輯,還把所有業務邏輯層需要處理的操作全部采用規則配置的形式,包括資料庫處理邏輯等。

是以我們有時候在想,究竟什麼才是真正的規則引擎,我們這種方式肯定也是一種實作。業務JSR94标準應該改進一下了。