最近整理了一個自己做的小項目——PHP Trade Splitter ,是一個交易/利潤分賬組件。今天想分享一下,也算是記錄自己的小成果,也順便展示一下技術思路。
為什麼會做這個包
説白了,就是因為工作/項目里老是碰到分賬邏輯:
- 平台抽成
- 作者收益
- 代理或渠道分潤
- 階梯獎勵
- 多級遞歸計算
以前都是直接寫死在業務裏,每次改需求都得重構,越改越心累。
於是我想:乾脆抽象出來,做一個通用組件,能夠:
- 快速調用,一行代碼搞定分賬
- 可擴展,能註冊自定義策略
- 覆蓋大多數常見分賬規則
順便用它自己解決問題,也方便別人參考。
架構思路:策略模式解耦
核心思想其實挺簡單:策略模式。
-
Splitter:統一入口,負責分賬調度 -
StrategyInterface:所有分賬規則都實現它 -
SplitContext:封裝分賬上下文(總額、參與者) -
Allocation:分賬結果對象,支持toArray()輸出
好處就是,如果以後出現新規則,直接寫個策略類註冊進去就行,不用動核心邏輯。
概念上可以想象成這樣:
├─ Splitter.php # 統一入口,負責分賬調度
├─ Contracts/
│ └── StrategyInterface.php # 所有分賬規則都實現它
├─ Models/
│ ├── Allocation.php # 分賬結果對象,支持 `toArray()` 輸出
│ └── SplitContext.php # 封裝分賬上下文(總額、參與者)
└─ Strategies/ # 內置策略類(Percentage, Fixed, Ladder, Recursive)
內置策略概覽
組件內置了四種策略,覆蓋絕大多數場景:
1️⃣ 百分比分賬(Percentage)
按比例分配金額。例如 10% 給平台,90% 給作者。
適合固定比例抽成場景。
2️⃣ 固定金額分賬(Fixed)
直接指定每個人的金額。總和不能超過總額。
適合代理固定提成或獎勵金額場景。
3️⃣ 階梯分賬(Ladder)
根據金額區間設置不同分成比例,適合階梯獎勵或多級代理。
比如收入低於 1k 用 5%,收入 1k\~5k 用 10%,超過 5k 用 15%。
4️⃣ 遞歸分賬(Recursive)
適合多級渠道分潤,每層收益基於上一層金額計算,然後得到淨收益。
避免嵌套循環寫複雜邏輯,非常清晰。
如果你想看具體代碼示例,我在倉庫裏提供了 demo:tests/demo.php
自定義策略
除了內置策略,你也可以寫自己的策略類,只要實現接口就可以註冊。
比如你想寫一個“全部給某個人”的策略:
概念上就是實現一個接口,然後返回總額給指定對象,調用方式和內置策略一致。
使用體驗
- 一行代碼即可完成分賬
- 分賬結果可以直接轉換為數組或 JSON,方便存儲或返回
- 異常情況和邊界條件都有處理,比如比例不合法、總額超出等
分享感想
其實這個包本身邏輯不復雜,但價值在於解決重複痛點:
- 遇到分賬問題不用每次重寫邏輯
- 可維護性提升
- 自己和別人都能快速上手
所以即便是小組件,也可以體現技術思路和設計能力。
總結
- 這是一個 輕量、靈活、可擴展的 PHP 分賬組件
- 核心就是 策略模式 + 可註冊自定義策略
- 分享出來,也是記錄自己技術歷程,同時方便別人參考
如果你也碰到分賬痛點,或者想看看策略模式在小項目裏的應用,可以去看看