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

問題

在不少業務應用中,每每有不少文案及按鈕的業務邏輯,很容易由於產品的策略變動而變化,或由於來了新業務而新增條件判斷,或由於不一樣業務的差別性而有所不一樣。若是經過代碼來實現,一般要寫一串if-elseif-elseif-else語句,且後續修改擴展比較容易出錯,須要從新發布,靈活性差。 可採用配置化的方法來實現按鈕邏輯,從而在須要修改的時候只要變動配置便可。業務邏輯的代碼形式通常是:html

public Boolean getIsAllowBuyAgain() {
  if (ConditionA) {
    return BoolA;
  }
  if (ConditionB) {
    return BoolB;
  }
 
  if (CondtionC && !CondtionD && (ConditionE not in [v1,v2])) {
    return BoolC;
  }
  return BoolD;
}

本文討論了三種可選方案: 重量級的Groovy腳本方案、輕量級的規則引擎方案、超輕量級的條件匹配表達式方案。

java

方案

Groovy腳本

須要在界面上進行編輯和及時刷新到應用中的代碼,可使用 Groovy 腳原本替代。緩存

可參閱:「使用yaml+groovy實現Java代碼可配置化」性能


規則引擎

多樣化可變的業務邏輯和規則集合很是類似,能夠考慮採用一款輕量級的規則引擎。經過配置平臺來管理規則集合。code

使用規則引擎的示例可參閱: 「Java Drools5.1 規則流基礎【示例】(上)」htm

可選用一款輕量級的Java開源規則引擎做爲起點。

blog

條件表達式

對於輕量級判斷邏輯,採用條件表達匹配。條件表達匹配,實質是規則引擎的超輕量級實現。get

條件表達式方案可參閱:「詳情文案的輕量級表達式配置方案」

產品

選擇

三種方案的對好比下:it

方案 靈活性 性能 易懂性
Groovy 腳本 極高,凡是代碼解決都能用Groovy腳本解決 須要緩存,幾十到幾百毫秒 業務人員不易讀懂
規則引擎 較高 幾十毫秒 適合業務人員讀懂
條件表達式 特定 幾到幾十毫秒 適合業務人員讀懂
相關文章
相關標籤/搜索