策略發券系統設計

什么是策略發券

幾乎每個互聯網業務都需要通過優惠券的形式吸引流量。為了實現精細化營銷,需要根據用戶的特征、用戶行為決定如何發券。因此需要在發券系統中引入發券策略。

策略的形式

產品提出的發券需求其一般形式為:

需求項目 說明 內容舉例
觸發條件 由什么事件觸發發券動作 下單成功、接單、支付完成等
命中條件 根據命中條件在多個策略中選擇 用戶為新用戶、下單時間為是上10之前、所在城市為北京
發券條件 在什么情況下發券 用戶已有此券、用戶有更大額的券時不可發放
發放內容 發什么券 折扣券1張 或者 新用戶券2張
通知方法 推送還是短信 發短信內容為:xxx,并且發推送,推送內容為:yyy

觸發條件指定了一個策略關心哪些事件。當事件發生時,觸發的策略可能不止一個。此時,進一步根據策略命中條件決定采用哪個策略。選定策略之后,策略需要進一步判定用戶是否滿足發券條件。通常這一步是為了避免重復發券。決定可以發券后,根據發放內容,執行發券。最后通知用戶。

系統設計思想

最近對兩個重要的編程思想有了體悟,才萌生了對策略發券系統重新設計的想法。這兩個思想是:

  • 分層
  • 模塊化

分層決定了一個復雜的程序可以獲得概念上的簡潔性。模塊化決定了邏輯的內聚、單純、可復用。

很久以前,我想寫一個游戲的AI,完全無從著手。因為要關心的方面太多了。細到每一次細微的人物移動,大到戰場格局分析。如何將不同層次的邏輯優雅地組織起來?分層。最底層的邏輯只負責每一件小事,如位置移動、物品買賣、攻擊、施法等。再上一層,前往某地、戰場走位、后勤補給、集中火力攻擊某人等。再上一層,打野、gank、抱團、推塔。再上一層,做戰略規劃,前后期發展方向的決策等。

使用分層思想將整個系統理下來,發現邏輯非常清晰。這也是社會組織的秘密:分層、分級。每一層的工作,就是將下層封裝的服務作為基本操作,通過基本操作的組合完成更高一級的操作,向上層提供更抽象的服務。比如:將位置坐標的加減、人物朝向的旋轉封裝為將前后左右的移動,將前后左右的移動封裝為目的地導航,將目的地導航封裝為撤退、繞后等操作。

分層是對系統的縱向切分。縱向切分理清業務的抽象層級。橫向切分劃分了業務的領域。橫向切分與縱向切分共同完成了模塊化。

系統設計過程

言歸正傳。我們來對策略發券系統進行領域劃分并分層。

策略發券本身是一個獨立的領域。不再劃分。那么我們來分層。
對于發券策略系統來說,更底層的操作有:券發放、發短信、發推送、觸發事件監聽、事件參數抽取、命中條件匹配、發券條件檢查。

其中, 發券條件匹配粒度太粗了,還可以拆為:用戶持券情況獲取,持券條件檢查
以上操作很明顯不是一堆的。我們進行分組:

  • 發券:券發放
  • 通知:發短信、發推送
  • 策略選擇:觸發事件監聽=>事件參數抽取=>命中條件匹配
  • 發券條件檢查:持券情況獲取=>持券條件檢查

以上4個部分構成了策略發券系統的4個子領域。其中,發券、通知較為簡單,且較為穩定。策略選擇、發券條件領域因為運營策略的變化,而靈活改變。下面就策略選擇、發券條件兩個領域詳細說明拆分過程。

策略選擇領域的拆分

策略選擇過程分為四步:

  • 事件監聽。這里會經常新增事件
  • 事件參數抽取。因事件不同,事件內部所帶數據格式不同,因此參數抽取器需要隨時擴展。抽取后,參數為統一格式。
  • 參數預處理。根據抽取的參數生成一些額外的數據。比如,根據用戶id對用戶進行分類。根據需求的變化, 這里隨時會加入新的預處理器。
  • 命中條件匹配。經過參數抽取后,參數格式統一。可以使用固定的機制進行匹配。

以上3步中,前三步都是較為復雜的過程。因此需要進一步拆分為獨立的模塊,放到獨立的包中去。

發券條件領域的拆分

發券條件領域是一個多變的領域。產品為了避免一些邊邊角角的特殊情況,通常會在發券策略中加一些限制。發券條件限制局限于用戶持券的情況。因此,發券領域可以拆分為兩個子領域:

  • 用戶持券情況統計。模塊穩定。
  • 發券限制條件檢查。經常變化。

整體結構

策略發券系統拆分.png

事件處理部分,加入過濾過功能是為了統一過濾掉一些滿足某條件的事件。事件生成功能是為了生成虛擬事件。這些虛擬事件領域概念性更強,通常是由原始事件組合、或者加工處理而來。

仔細分析上圖中的結構,發券、通知模塊是通用的模塊。因此,應當作為支撐性的領域。即便是在策略選擇領域內,用戶分類、條件匹配等機制都能作為通用的模塊或者服務而存在。還應該拆分出去。

總結

系統拆分為多少層,劃分多少個模塊沒有標準。易變不易變的部分一定要拆開。易變的部分一定要設計組合擴展的機制,以滿足快速變化的需求。

拆分的目的是要控制復雜性。因此,只要拆到每個模塊都單純易理解就可以了。如果模塊開始向復雜演化,那么需要再次拆分了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容