一、 核心精神:解耦(Decoupling)
將「商業規則(Rules)」與「邏輯執行引擎(Engine)」分離。
程式碼只負責算數學、檢查借貸平衡與搬運資料;
「科目要放哪裡、條件是什麼」交給資料庫設定與參數檔。
二、 4 大不寫死的設計解法
-
建立「會計規則對應表」(Rule Mapping Table)
- 作法:在資料庫設計一張對應規則表。
- 欄位設計範例:
- Transaction_Type(單據類型,如:銷貨、進貨、折讓)
- Debit_Account_Code(對應借方科目)
- Credit_Account_Code(對應貸方科目)
- 好處:會計政策變更時,只需修改後台設定或資料庫,無需重新編譯程式碼。
-
採用「會計樣版引擎」(Accounting Template Engine)
- 作法:讓會計人員在系統中自定義「傳票樣版(Template)」,內含固定比例或科目邏輯。
- 好處:系統只負責讀取樣版、帶入參數與檢查借貸平衡,程式碼不包含具體會計科目邏輯。
-
引入「會計事件總線 / 狀態機」(Event-Driven & State Machine)
- 作法:進銷存發生動作(如 OrderShipped 事件)時,系統發布事件,會計模組的監聽器接收並動態生成分錄。
- 好處:模組間低耦合(Loosely Coupled),修改庫存邏輯時不會破壞會計分錄。
-
外部化「商業規則引擎」(Business Rule Engine)
- 作法:導入規則引擎(如 Drools),將複雜會計邏輯寫成表格狀的決定表放在外部管理。
- 好處:財務長或商管人員可直接在介面調整條件,工程師免於陷入無止盡的 if-else 地獄。