я не скрываю, у меня есть такой PR в messenger:
https://github.com/symfony/symfony/pull/34310/files#diff-83948907a24dc6a7916f694811a00ce1R19и на тот момент я считал, что трейт в библиотеке для примера реализации интерфейса — это норм. даже в подкасте пятиминутки сказал это. но с тех пор на работе мы перестали использовать трейты вообще и я поменял своё мнение полностью в сторону того, что трейты не нужны.
но разберём этот кейс. допустим, мы решиил юзать messenger и контракт MessageRecordingEntityInterface будет использоваться на агрегатах. агрегат — это всегда кастом, потому что это часть уникальной бизнес-логики твоего проекта. контракт агрегата — это порождаемые им события. в этом смысле это его единственная ответственность — превратить команды в события. поэтому трейт нафиг, на базе этого интерфейса делаем абстрактный класс Aggregate (на стороне проекта, не в Symfony) и от него экстендим все агрегаты.
а в идеале как у
@desper1989 в service-bus — аннотация на методе, из котрого можно забрать события. тогда и интерфейс не нужен никакой.