Événements domaine (Domain Events)¶
Les Domain Events permettent une communication découplée entre les domaines et déclenchent des actions asynchrones via les queues Laravel.
Architecture Event / Listener¶
sequenceDiagram
participant Service as Domain Service
participant Event as Domain Event
participant Queue as Redis Queue
participant Listener as Listener/Job
Service->>Event: event(new GameCompleted($game))
Event->>Queue: Dispatch asynchrone
Queue->>Listener: SendGameSummaryNotification::handle() Enregistrement des events (EventServiceProvider)¶
protected $listen = [
GameCompleted::class => [
SendGameSummaryNotification::class,
],
UserRegistered::class => [
SendWelcomeEmail::class,
],
ScoreValidated::class => [
UpdateGameStatus::class,
],
];
Liste des events domaine¶
| Event | Déclenché quand | Listeners |
|---|---|---|
UserRegistered | Inscription réussie | SendWelcomeEmail |
GameCreated | Partie créée | SendInvitationNotifications |
InvitationAccepted | Joueur accepte | CheckGameReadiness |
ScoreSubmitted | Score saisi | NotifyOpponents |
ScoreValidated | Score validé par tous | UpdateGameStatus |
GameCompleted | Partie terminée | SendGameSummary |
Bonne pratique : queues asynchrones¶
// Listener asynchrone (implémente ShouldQueue)
final class SendGameSummaryNotification implements ShouldQueue
{
public string $queue = 'notifications'; // Queue dédiée
public function handle(GameCompleted $event): void
{
// Envoi du résumé de la partie en arrière-plan
// Notification aux joueurs de la partie terminée
}
}