共用方式為


條件評估與動作執行

「商務規則架構」提供高效率的推斷引擎,可將規則連結至 .NET 物件、XML 文件或是資料庫資料表。

「商務規則引擎」使用三階段的演算法以執行原則。 這些階段如下所示:

  • 比對。 在比對階段,會使用規則條件中定義的述詞,針對使用事實類型 (物件參考由規則引擎的工作記憶體維護) 的述詞比對事實。 基於效率的緣故,模式比對會在原則中的所有規則上執行,而不同規則之間共用的條件則只會比對一次。 有可能會將部分條件比對儲存在工作記憶體中,以加速後續的模式比對作業。 模式比對階段的輸出是由對規則引擎議程的更新所組成。

  • 衝突解決方案。 在衝突解決階段中,會檢查候選執行的規則,以根據預先決定的解決配置來決定下一組要執行的規則動作。 在比對階段找到的所有候選規則都會加入規則引擎的議程中。

    預設的衝突解決配置是根據原則中的規則優先順序。 優先順序是在「商務規則編輯器」中可設定的規則屬性。 數目愈大,優先順序就愈高,因此若觸發多個規則,就會先執行較高優先順序的動作。

  • [動作]。 在動作階段,會執行已解析規則中的動作。 請注意,規則動作可判斷提示新事實到規則引擎,這會造成週期繼續。 這也稱為正向鏈結。 請務必注意,演算法永遠無法比目前執行的規則先執行。 在重複比對階段之前,將會先執行目前引發的規則之所有動作。 不過,在比對階段再次開始之前,將不會引發在議程上的其他規則。 比對階段可能造成在引發議程上的規則之前,從議程移除它們。

    下列範例顯示比對衝突解析動作的三階段演算法。

    規則 1:評估收入

  • 宣告式表示法:

    只有在申請者的收入對貸款的比率小於 0.2 時,才取得申請者的信用等級。

  • 使用商務物件的 IF—THEN 表示法:

    IF Application.Income / Property.Price < 0.2    
    THEN Assert new CreditRating( Application)   
    

    規則 2:評估信用評等

  • 宣告式表示法:

    只有當申請者的信用等級大於 725 時才核准申請者。

  • 使用商務物件的 IF—THEN 表示法:

    IF Application.SSN = CreditRating.SSN AND CreditRating.Value > 725    
    THEN SendApprovalLetter(Application)    
    

    下表摘要這些事實。

事實 欄位
Application – 代表房屋貸款申請的 XML 文件 - 收入 = $65,000
- SSN = XXX-XX-XXXX
Property – 代表購買的財產之 XML 文件 - 價格 = $225,000
CreditRating – 包含貸款申請者信用等級的 XML 文件 - 值 = 0 – 800
- SSN = XXX-XX-XXXX

在一開始時,規則引擎工作記憶體與議程是空的。 在應用程式新增 Application 與 Property 事實之後,規則引擎工作記憶體與議程就會更新如下。

工作記憶體 議程
-應用
-財產
規則 1

規則 1 會新增至議程,因為其條件 (Application.Income / Property.Price < 0.2) 在比對階段評估為 true 。 在工作記憶體中沒有 CreditRating 事實,因此不會評估規則 2 的條件。 因為在議程中的唯一規則為規則 1,所以會執行該規則,然後從議程消失。 為規則 1 定義的單一動件會使得新事實 (申請者的 CreditRating 文件) 加入工作記憶體。 在完成執行規則 1 之後,控制會返回比對階段。 因為唯一要比對的新物件是 CreditRating 事實,所以比對階段的結果如下:

工作記憶體 議程
-應用
-財產
- CreditRating
規則 2

在執行規則 2 時,會造成叫用傳送核准信件給申請者的函式。 在完成規則 2 之後,正向鏈結演算法的執行會返回比對階段。 因為已經沒有要比對的新事實,而且議程是空的,所以正向鏈結會終止並且會完成執行原則。

另請參閱

規則引擎