подскажите по событиям, которые генерирует сущность во время своей жизни. Сейчас у нас сделано через трейты+интерфейсы, типа $this->notify(new ShitHappens($this)) и потом postFlush события берутся через $еntity->publishEvents() и бросаются в диспатчер.
Есть ощущение, что уйти от трейтов и хранения событий в сущности было бы правильно. но возникает вопрос - как генерировать и отдавать в мир события?
Для их генерации нужно, чтоб "генерилка" их сторедж событий были либо внутри обьекта, либо приходили снаружи.
Если внутри - трейты, наследование, инжект, создание. Трейты дичь, наследование сущностей от BaseEntity - тоже, инжект - непонятно кем, как и когда. Создание какого-то eventEmiter'а внутри конструктора? Вызов статического метода EventService::foo(new Event)? Но тогда нужно как-то привязывать событие к конкретной сущности.
А если сторадж приходит снаружи, то добавление зависимостей к каждой операции, которая приводит к событиям (включая конструкторы) - тоже дичь.
Как быть, куда бежать?
Или я осел, зря парюсь и трейты норм ход в таком раскладе?
имхо, трейты норм
Ну чот кажется, что таскать с собой все события, которые уже совершились и которые ей уже не нужны - не входит в обязанности сущности
Вот я, в принципе, о том же
Явно передать параметром в методах?
Дополнительный параметр в каждый метод, который генерирует события? Получается, что инициатор вызова должен знать о том, что там под капотом будет событие и предоставить сущности этот "диспетчер"
http://sandbox.onlinephpfunctions.com/code/07acacec4cda4b273413599886639f4dd0e9e2bc
Ну вот у нас как-то так и сделано
Обсуждают сегодня