概要
ApexTriggerのフレームワーク採用は大きく以下の四つに分類できる。
- 無秩序
- Handler Pattern
- 非エンタープライズ企業向けFramework
- エンタープライズ企業向けFramework
フレームワーク採用のモチベーション
- 1sObject – 1triggerによる実行順序のコントロール
- triggerとlogicの分離によるメンテナンス性・テスト性の向上
- interface/subclassによるhandlerの標準化
- triggerのon/off機能
- triggerのbypass機能
- triggerのrecursiveな起動の制御
- バッチサイズに基づく挙動の制御
- 2GPとの相性
無秩序 | ハンドラー | 非エンプラFW | エンプラFW | |
実行順序のコントロール | ✕ | ◯ | ◯ | ◯ |
メンテナンス性・テスト性 | ✕ | ◯ | ◯ | ◯ |
handlerの標準化 | ✕ | ✕ | ◯ | ◯ |
on/off機能 | ✕ | ✕ | ✕ | ◯ |
bypass機能 | ✕ | ✕ | ◯ | ◯ |
recursiveな起動の制御 | ✕ | ✕ | ◯ | ◯ |
バッチサイズに基づく制御 | ✕ | ✕ | ✕ | ◯ |
2GPとの相性 | ✕ | ✕ | ✕ | ◯ |
2GPとの相性について
Salesforce公式が推奨するSFDC trigger frameworkなどの非エンプラ向けフレームワークでは、handlerとlogic(※下記図ではHelperとHandler)が常にセットでデプロイされる必要がある。
それはすなわち、クラス間の依存性を考慮したデプロイマネジメントが必要ということであり、ロック解除済みパッケージを用いた「パッケージ開発モデル」との相性が悪い。
どのフレームワークを利用すべきか
- CBU:Handler Pattern
- MM・GB:SFDC trigger framework
or Lightweight-Trigger-Framework - Enterprise:Apex Trigger Actions Framework
or Nebula Triggers - Large Enterprise:fflib-apex-common
※SFの活用度が高い場合は、一つ上のレンジのFrameworkを採用
フレームワークの一覧
■Featured
Handler Pattern
SFDC trigger framework
Apex Trigger Actions Framework
fflib-apex-common
■Others
flexible-apex-trigger(解説はこちら)
Nebula Core Nebula Triggers
Lightweight-Trigger-Framework
MyTriggers
sfdc-declarative-trigger-framework
EDA-TDTM-Overview
apex-enterprise-patterns/at4dx
managing-dependency-injection-within-salesforce/
参考になるサイト
Apex Hours – Trigger Framework in Salesforce
THE 3RD AGE OF TRIGGER FRAMEWORKS – PART 1
“Traditional” Trigger Frameworks vs Dynamic Metadata Trigger Frameworks