Техническое событие: ButtonClicked, FileUploaded. Доменное событие: InvoiceApproved, SubscriptionExpired — несёт бизнес-значение и является частью ubiquitous language.
Order не знает о Notificationclass OrderPlaced {
public function __construct(
public readonly string $orderId,
public readonly string $userId,
public readonly Money $total,
public readonly \DateTimeImmutable $occurredAt,
) {}
}
// После успешного сохранения:
EventDispatcher::dispatch(new OrderPlaced($order->id, ...));