Aller au contenu

É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
    }
}