One trigger per object delegating to a handler class. The framework:
apex trigger AccountTrigger on Account (before insert, before update, after insert, after update, after delete) { new TriggerHandlerFactory().getHandler(Account.SObjectType).run(); }
Components:
- TriggerHandler base class — orchestrates context dispatch (beforeInsert, afterUpdate, etc.).
- Concrete handlers per object — extend base, override relevant methods.
- TriggerHandlerFactory — maps sObject to handler class via Custom Metadata.
- Static recursion guard — prevents re-entry.
- Handler enable/disable via Custom Metadata for emergency disable.
Why it matters:
- One trigger per object — avoids "multiple triggers on same object firing in undefined order".
- Logic in classes — testable, reusable, refactorable.
- Recursion control — explicit.
- Disable mechanism — turn off automation in production without redeploying.
Open-source options: FFLib's fflib_SObjectDomain, Kevin O'Hara's TriggerHandler, custom-built. Pick one; standardise across the org.
Architect role: enforce one framework org-wide. Mixed frameworks = chaos.
