規則,是運行、運作規律所遵循的法則。規則無處不在,社會活動中的規則通常由傳統、公共認識形成,表現為該干什么或是不該干什么。在計算機應用系統中,經常會面對這樣的場景,處理執行一個動作時,需要另外的條件同時成立,這種條件判斷的邏輯被抽象成規則并大量應用。通過對規則的管理和使用,會使得系統在已抽象成業務規則的場景中,可以進行靈活管理,靈活應用。特別是多個場景下使用相同的規則,可確保因復用帶來的成本降低和達成業務管理一致性。
業務規則抽象已經成為一種良好的設計模式,特別是在很多大型業務系統的實現中幾乎通用。避無可避,不管是傳統的高代碼開發還是通過低代碼方式實現,應用開發中都會面臨著規則開發和使用的問題。
本文旨在探討低代碼模式下開發活動中對規則的處理,文中實際支撐平臺為浩鯨靈犀開發平臺。
在網購的體驗中發現,購買一本書時,往往沒有優惠。但當訂單總金額滿足一定條件時,就能夠打折,如滿300減50,或者免運費、送贈品等。實際上,不僅僅是購買書籍,購買其他商品時也存在各種折扣和優惠。
然而,在系統實現的過程中,如果為每個商品單獨開發促銷邏輯,對開發人員來說是一項巨大的工作量,因為電商平臺上的商品種類、數量非常龐大。
實際上,大多數的商家,都是通過訂單金額達量、商品數量達量,或者特殊商品屬性等手段,來實現促銷活動??梢詫⑵涑橄蟪梢粋€通用的促銷規則:根據訂購的商品,進行優惠條件判斷、優惠計算、最終輸出優惠結果。商家只需要配置商品的優惠策略,系統就能夠自動計算實現不同促銷場景的邏輯。

在系統中,實現以上規則的邏輯如下:
首先,需要考慮的數據包括用戶訂購的商品信息以及商家設置的商品優惠策略信息。這些數據將在規則的邏輯實現中被使用。
其次,邏輯判斷過程包括以下幾個步驟:
判斷是否有優惠策略。商品信息作為規則的傳入參數,判斷該商品是否有配置優惠策略。
判斷優惠條件是否成立。根據訂購的商品信息和商家配置的優惠策略,計算是否滿足優惠的條件。
優惠計算。根據配置的優惠方式,進行打折計算、贈品計算或者免運費計算等。
輸出優惠結果。規則計算后的優惠結果輸出給業務系統,完成商品價格的調整。
在低代碼中,復雜規則配置開發主要依靠直觀的圖形配置界面,以"入參+組件+出參"的方式,通過簡單的拖拽和配置操作,實現規則數據配置、邏輯配置及結果反饋。

入參數據:通過可視化功能,用戶可以定義規則的入參數據。
從案例中可以看到,規則的入參是訂購的商品列表,因此以表單的方式進行參數配置,支持以結構樹的方式進行展示,支持屬性、對象、數組等不同形式的參數配置,是一種比較好的實踐。
應用數據:規則中可能需要使用到應用的業務數據。因此,規則開發過程中需要支持集成SQL服務、編排服務、對象操作服務等方式來獲取數據,并且能夠將這些數據與規則的邏輯組件結合起來進行應用。
案例中,商品優惠策略信息,屬于商家在系統中配置的數據。在浩鯨靈犀開發平臺中,規則邏輯編排時獲取內部數據是非常簡單的事情,因為其內置了一個對象引擎,封裝了各種對象操作組件,只需要進行對象、動作、條件的選擇即可輕松完成數據的操作,如下圖:

除了入參數據和應用參數外,很多規則的實現過程中還涉及到外部數據和系統變量。
外部數據:指的是不在本應用內的數據,需要通過接口的方式獲取。這需要支持可視化的方式集成外部接口,獲取數據并進行操作。
系統變量:如登錄信息、環境信息等系統變量,也是邏輯判斷中不可或缺的數據。因此,支持可視化的方式操作這些變量,也是必不可少的功能。
在低代碼平臺中實現邏輯的方式是通過數據和動作的組合來完成的。針對各種邏輯需求,應該提供各種邏輯組件的配置,包括:
比較:規則邏輯配置過程中,支持字符串、數據、屬性與對象以及數組的比較,以實現規則條件的定義。比如判斷兩個字符串是否相等、對數據進行大小比較、判斷屬性是否存在于對象中,或者判斷一個數組是否包含某個元素等。
計算:提供各種計算功能的配置,比如數據計算、字符或者數組的長度計算等。
流程控制:能夠根據判斷條件配置程序的執行路徑,如循環、跳出、分支、退出等。
組件組合:可以通過定義組件的執行順序來實現串聯,從而實現組件的組合。
獲取商家配置的優惠策略信息,判斷商品是否有配置優惠,并進行優惠計算的過程,只需要按順序配置 “數據組件”獲取商品優惠策略信息,“比較組件”判斷是否有優惠策略,“計算組件”進行打折計算,就可以輕松完成規則邏輯的編排。


在配置過程中,以顯性化的方式配置規則的返回參數,易于規則的開發和理解。
調試時,執行過的節點高亮展示,形成執行線路圖。每個節點的執行時間、時長、入參、出參、執行狀態,根據執行順序進行展示,為規則執行過程中的問題排查提供了非常好的手段。

以上是規則配置的過程,下面我們繼續介紹規則的使用。
在許多場景中,業務系統需要通過多個規則才能完成完整的業務校驗。以商品訂購的場景為例,在訂單提交前進行業務校驗,校驗的規則可能有上百個。因此,為了更好地實現規則的開放調用,需要以規則事件的維度做好規則的封裝,同時支持傳統應用和低代碼應用的集成。


首先,事件配置,事件是指業務系統調用規則的時機或者動作,用于說明和區分業務系統在不同代碼中的埋點,同時規范埋點的參數要求。事件配置主要完成兩項操作:
參數規范定義:根據業務系統的需求,自定義埋點參數規范,以適配各個業務系統。同一個事件下的所有規則都遵循統一的參數規范。
規則執行的策略編排:支持在事件中對規則的執行順序和策略進行編排,包括條件、串行、并行等不同的策略。
其次,規則集成,針對應用的不同,規則集成的方式有兩種:
API方式:針對傳統的應用,需要通過在系統代碼中進行埋點,實現規則事件的調用。
服務節點方式:針對低代碼應用,業務邏輯主要通過編排服務來實現。因此,在編排服務中需要支持通過“事件”組件來綁定事件服務,從而實現對規則的調用。

除了規則的配置開發和對外開放使用,規則的管理還包括規則的發布上線、規則的生失效管理以及對規則的日志分析。
發布上線:不同的低代碼實現,規則的保存形式有所不同,一般以編譯文件的形式保存,如Java、PHP,或者使用Python、Groovy腳本等。而靈犀平臺選擇了以數據的方式進行存儲。在發布規則時,只需要導出規則數據,然后在運行環境中進行數據的導入,即可實現規則的發布,無需進行環境部署或代碼編譯構建的復雜操作。這種方式簡化了規則發布的流程,提高了開發效率。
生/失效管理:在規則設計中,可以設定規則的生效時間和失效時間,只有在指定的時間段內規則才會生效。這項功能對于季節性規則或限時促銷規則非常有用,可以避免規則在過期后繼續生效,從而避免不必要的沖突和問題。同時,規則生/失效狀態的管理也非常重要。通過規則狀態的控制,可以及時根據業務要求進行規則的調整和決策。
規則日志:日志在規則管理中有兩個重要部分。首先,操作日志記錄了對規則的邏輯調整和狀態變更等操作,方便問題的溯源。其次,運行日志記錄了規則執行時的輸入參數、輸出結果、執行時間、耗時和異常原因等,有助于快速定位和解決問題。
除了支持可視化、圖形化的規則開發、使用和管理功能,我們還需要重點關注配置效率和配置靈活性這兩方面的問題:
在配置規則過程中,不同復雜度的參數對象,會導致配置效率降低,遇到多規則開發場景時,效率問題愈發凸顯。所以,我們需要增強工具自身能力,通過自動生成、缺省默認、一鍵操作、批量處理等方式來應對效率問題:
自動生成參數:在事件上,增加規則創建的入口,創建規則時,自動通過事件的參數規范生成規則的參數,并允許對參數進行裁剪。
自動參數賦值:在規則編排過程中實現參數自動賦值功能。在服務編排中加入事件節點時,或者在事件中加入規則時,都可以根據參數名稱自動匹配上下文進行賦值。
報文一鍵生成參數:在事件和規則配置參數時,支持通過報文一鍵生成參數配置,在傳統開發過程中,高效的ctrl+c和ctrl+v能夠得到很好的應用。
批量加入規則:在事件編排中增加批量規則組件,在組件中可以批量選擇多個規則加入到事件中。組內可以定義規則執行的策略,如串行或者并行。這樣既能簡化事件編排畫布,又能提升加入規則的效率。
增加運維視圖:在事件中增加關聯規則的視圖,同時在規則設計器中也增加關聯的事件視圖,在調整規則時就可以清晰地評估其影響范圍。
與傳統規則引擎不同,低代碼平臺的規則執行策略是通過事件編排來實現的,執行過程會遇到所有規則執行結果合并、同一事件下參數相互依賴和共享等問題。因此,技術上需要支持規則結果的匯總計算、支持事件級的數據總線,實現數據的共享和傳遞。

增加規則結果計算組件。每加入或刪除一個規則,會自動將規則的結果和返回參數記錄到該組件中。在組件中支持設置結果返回的策略,例如:全部規則校驗成功時返回成功,或者只要有一個成功就返回成功。
引入事件級dataBus數據總線。在事件啟動環節初始化數據總線,在事件結束后銷毀數據儲存空間。在此過程中,每個規則都可以向數據總結寫入數據和讀取數據。
針對復雜業務規則開發,浩鯨靈犀開發平臺提供了非常便利的開發工具,在大量項目中落地使用。通過浩鯨靈犀開發平臺讓開發人員能夠輕松完成規則的配置工作,真正實現了業務規則可視化管理、圖形化開發,開發效率大幅提升,可做到實時發布非常靈活。在接下來繼續與大模型技術結合,實現更智能化的業務規則管理和決策支持、自動化的規則驗證和修正、業務規則的執行和監控相結合等技術突破,未來可期。