本文讨論了三種按鈕邏輯配置化的可選方案: 重量級的Groovy腳本方案、輕量級的規則引擎方案、超輕量級的條件比對表達式方案,重點講解了條件比對表達式方案。按鈕邏輯實作采用了“組合模式”,解析配置采用了“政策模式”和“工廠模式”。
問題###
在很多業務應用中,往往有很多文案及按鈕的業務邏輯,很容易因為産品的政策變更而變化,或因為來了新業務而新增條件判斷,或因為不同業務的差異性而有所不同。如果通過代碼來實作,通常要寫一串if-elseif-elseif-else語句,且後續修改擴充比較容易出錯,需要重新釋出,靈活性差。 可采用配置化的方法來實作按鈕邏輯,進而在需要修改的時候隻要變更配置即可。業務邏輯的代碼形式一般是:
public Boolean getIsAllowBuyAgain() {
if (ConditionA) {
return BoolA;
}
if (ConditionB) {
return BoolB;
}
if (CondtionC && !CondtionD && (ConditionE not in [v1,v2])) {
return BoolC;
}
return BoolD;
}
本文讨論了三種可選方案: 重量級的Groovy腳本方案、輕量級的規則引擎方案、超輕量級的條件比對表達式方案。
方案###
Groovy腳本####
需要在界面上進行編輯和及時重新整理到應用中的代碼,可以使用 Groovy 腳本來替代。
可參閱:“使用yaml+groovy實作Java代碼可配置化”
規則引擎####
多樣化可變的業務邏輯和規則集合非常相似,可以考慮采用一款輕量級的規則引擎。通過配置平台來管理規則集合。
使用規則引擎的示例可參閱: “Java Drools5.1 規則流基礎【示例】(上)”
可選用一款輕量級的Java開源規則引擎作為起點。
條件表達式####
選擇###
方案 | 靈活性 | 性能 | 易懂性 | 适用場景 |
---|---|---|---|---|
Groovy 腳本 | 極高,凡是代碼解決都能用Groovy腳本解決 | 需要緩存,幾十到幾百毫秒 | 業務人員不易讀懂 | 代碼配置化,友善技術人員使用 |
規則引擎 | 較高 | 幾十毫秒 | 适合業務人員讀懂 | 大量規則和推理,規則之間有關聯 |
條件表達式 | 特定 | 幾到幾十毫秒 | 少量複合條件,互相獨立 |