天天看點

規則引擎開發規範--規則配置類規範<連載6>

2.5. 盡可能在一個規則或者一個規則集中完成所有動作

充分利用規則集和規則的初始化動作、起始動作、進入條件、多條件和動作等。盡可能在一個規則或者一個規則集中完成一個任務。不過多的分層次。

最初設計規則集和規則時,每個規則都是由條件和動作組成的。是以一個标準的規則就是

如果 條件1

那麼 動作1

組成的,這種是最基本的規則。

但是當規則具有兩個條件時,可以将此條件放到規則的條件中,變成

如果 條件1并且條件2

那麼 動作1。

這是第二種标準的規則形式。

此時如果兩個條件間有多種組合,不同組合間進行不同的動作。比如

如果條件1并且條件2

那麼動作1

否則如果條件1或者條件2

那麼動作2

這是第三種标準的規則形式。

如果條件中的某些判斷時,需要實作處理一下,那麼可以将規則設定成支援初始化。比如:

初始化動作1

如果條件1并且條件2

那麼動作1

否則如果條件1或者條件2

那麼動作2

這是第四種标準的規則形式

如果所有這些條件的判斷,都需要滿足一個公共條件,隻有當滿足了此條件之後,才能對此規則進行處理。可以将規則設定成支援進入條件,比如:

進入條件:進入條件1

初始化動作1

如果條件1并且條件2

那麼動作1

否則如果條件1或者條件2

那麼動作2

這種方式并不屬于規則的标準格式。這隻是為了能否顯示檢視友善,而進行的配置。這種方式和添加一個規則集,将規則放到規則集下面的方式是一樣的。

規則集:

進入條件:進入條件1

規則1:

初始化動作1

如果條件1并且條件2

那麼動作1

否則如果條件1或者條件2

那麼動作2

在規則的配置時,盡可能的少加層次,特别是循環中套循環。不便于了解,并且其他使用者檢視起來也不容易。

2.6. 充分利用決策樹的功能。

如果需要調用外部的規則包,盡可能采用決策樹的功能,來更加直覺的展現邏輯。

目前采用規則來處理時,是按照順序執行的方式來運作的。是以當配置完規則後,預設會根據順序形成一個流程圖。如果設定了規則集,則相當于定義了流程的分支。當在規則中定義了調用外部規則包後,相當于調用了子流程。

通過順序執行的規則集、規則、和調用外部規則包功能,就實作了流程圖、流程分支和子流程的功能。

但是為了更加直覺的展現流程,特别是需要調用外部規則包時,則使用決策樹功能會更加直覺。

決策樹,采用流程圖方式來定義順序,每個流程的節點可以是某個規則或者是某個外部的規則包。同時多個節點之間可以采用連線方式來定義執行順序和執行條件。

繼續閱讀