電子商務促銷活動頻次高、規則雜、上線急,傳統硬編碼方式導致開發測試壓力巨大,且難以應對「周末節假日上線」的業務現實。本文介紹一種「業務公式化」解決方案:構建輕量級公式引擎,將促銷規則外部化為可運營編寫的公式腳本,通過「插件化」執行引擎在商品展示、購物車、下單等關鍵鏈路動態生效,實現業務邏輯與代碼部署解耦,大幅縮短交付週期。
某電商項目連續三個周末上線疊加促銷(滿減、積分倍返、鑽石會員折扣),每次涉及商品展示、購物車、訂單多個系統修改,開發測試耗時長、風險高。引入公式系統後,運營人員按規範編寫公式,開發提供執行引擎與擴展函數,上線流程壓縮為「配置公式 → 測試驗證 → 熱加載」,無需發布代碼。
if/else if/else、while 循環[VAR]、函數)與操作符(+ - * / > < = != & | ! 等),按運算符優先級將中綴表達式轉為後綴式(逆波蘭式),封裝為 ExecutionItem 入隊列。MetaElement 作為運算中間結果,支持類型轉換(getAsInt()、getAsString() 等)與變量上下文綁定。分離解析異常(ParseException)與執行異常(CalcException),便於定位錯誤。預留兩大擴展:
giveCoupon、discount),公式可直接調用操作業務對象核心實體:Event(活動主檔)、EventModel(活動-商品關聯)、EventCommand(執行上下文,攜帶目標對象與函數映射)。
商品級公式(遍歷活動商品):
[E_SUM] = [P_PRICED] * [P_ORDER_NUM];
[S_DISCOUNTSUM] += [E_SUM] * 0.5;
[S_POINTSUM] += [E_SUM] * 100;
[S_ORDERSUM] += [E_SUM];
活動級匯總公式(活動結算):
IF [S_ORDERSUM] - 1000 > -0.001 { giveCoupon([MB_ID], 200910); }
givePoint([MB_ID], [S_POINTSUM]);
discount([S_DISCOUNTSUM]);
EventProxy.execute()EventProxy 組裝 EventCommand(綁定目標對象、註冊業務函數、設置變量上下文)EventExecutorImpl 查詢活動商品,按活動碼分組ADD_COUPON)操作 EventCommand.getTarget() 修改購物車狀態通過 prototype 作用域注入 EventCommand、EventExecutor、EventProxy,購物車 Action 持有 EventProxy 即可觸發:
this.getEventProxy().getEventCommand().setTarget(this);
EventResult ret = this.getEventProxy().execute();
上線週期從「天級」壓縮至「小時級」,運營自主配置能力顯著提升。未來將公式系統擴展至:
for 循環、斷言等構造,提升表達力「業務公式化」不僅是技術架構演進,更是業務與技術協作模式的變革 —— 讓懂業務的人直接表達業務,讓技術專注於構建可靠的執行底座。