Skill: Craft Event-Driven Model
"Models emit events. Subscribers handle consequences."
The Standard
- Dispatch Domain Events:
$dispatchesEventsmaps model events to domain events. - Subscribers Handle Logic: Calculations, notifications, logging—outside the model.
- Keep Models Thin: Model changes state. Events trigger side effects.
- Test Events Separately: Model tests don't test subscriber behavior.
The Anti-Patterns
| ❌ Don't | ✅ Do | Why |
|---|---|---|
Logic in boot() |
Event + Subscriber | Testable, traceable |
| Direct method calls | Dispatch event | Loose coupling |
| Fat model observers | Focused subscribers | Single responsibility |
| Skip event for "simple" | Always event for side effects | Consistency |
Real-World Examples
See examples.md.