动态

详情 返回 返回

一個小項目的記錄:PHP 分賬組件 - 动态 详情

最近整理了一個自己做的小項目——PHP Trade Splitter ,是一個交易/利潤分賬組件。今天想分享一下,也算是記錄自己的小成果,也順便展示一下技術思路。


為什麼會做這個包

説白了,就是因為工作/項目里老是碰到分賬邏輯:

  • 平台抽成
  • 作者收益
  • 代理或渠道分潤
  • 階梯獎勵
  • 多級遞歸計算

以前都是直接寫死在業務裏,每次改需求都得重構,越改越心累。

於是我想:乾脆抽象出來,做一個通用組件,能夠:

  1. 快速調用,一行代碼搞定分賬
  2. 可擴展,能註冊自定義策略
  3. 覆蓋大多數常見分賬規則

順便用它自己解決問題,也方便別人參考。


架構思路:策略模式解耦

核心思想其實挺簡單:策略模式

  • 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 分賬組件
  • 核心就是 策略模式 + 可註冊自定義策略
  • 分享出來,也是記錄自己技術歷程,同時方便別人參考

如果你也碰到分賬痛點,或者想看看策略模式在小項目裏的應用,可以去看看

user avatar liu_486 头像 240cgxo4 头像 5e4jkgqh 头像 youngcoding 头像 sayornottt 头像 menglihuaxiangbian 头像
点赞 6 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.