業務邏輯配置化的可選技術方案


問題###

在很多業務應用中,往往有很多文案及按鈕的業務邏輯,很容易因為產品的策略變更而變化,或因為來了新業務而新增條件判斷,或因為不同業務的差異性而有所不同。如果通過代碼來實現,通常要寫一串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腳本解決 需要緩存,幾十到幾百毫秒 業務人員不易讀懂 代碼配置化,方便技術人員使用
規則引擎 較高 幾十毫秒 適合業務人員讀懂 大量規則和推理,規則之間有關聯
條件表達式 特定 幾到幾十毫秒 適合業務人員讀懂 少量復合條件,相互獨立


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM