В текущей реализации если у объекта есть несколько EventListener'ов, то они выполняются все, при чем порядок выполнения может отличаться от того в какой последовательности они объявлены в пакетах, т.е. не учитывается иерархия пакетов. Идея в том чтобы:
1. EventListener'ы выполнялись согласно иерархии пакетов (в случае если у них один общий предок - BaseEntityEventListener).
2. Реализовать возможность вызова переопределенного Listener'а
Понравилась ли вам эта идея?
Здравствуйте, спасибо за детальное описание идеи.
Задача зафиксирована и передана на ответственную команду разработки для рассмотрения.
Касательно переопределения событийной логики, то возможно будет полезная статья.
Не думаю, что данная проблема на самом деле проблема.
Вся логика описана в листенере - подразумевает под собой, что ее не нужно переопределять (так работают модули на JS, переопределять нельзя, но наследоватся можно).
Если необходимо в разных пакетах вызывать логику в определенном порядке, и изменять ее (оверрайд), то логику можно вынести в хелпер (А) - отдельный класс в котором реализована вся логика. А уже в листенере создавать фабрикой екземпляр данного хелпера и вызывать его метод.
В такой архитектуре есть возможность в наследуемом пакете добавить класс (Б) наследник хелпера и пометить атрибутом [Override].
Тогда при создании екземпляра А в листенере первого пакета по факту создастся екземпляр класса Б, где уже будет дописана или изменена логика.
Владислав Литвинчук,
бывает такое, что проект уже не новый и существуют пакеты от других разработчиков и если они не предусмотрели возможность переопределения, то избавиться от логики не изменяя их пакеты достаточно проблематично.
Пример: в классе EventListener на OnInserting вызвался метод "SetName" который установил для колонки "Name" некое значение. Переопределить эту логику мы не можем и отменить ее выполнение тоже не можем, и гарантировать, что новая логика будет выполнятся позже старой тоже...
Остается только городить костыли на OnSaving, либо вообще уже после создания записи.