Идея

Сделать событийный слой переопределяемым.

В текущей реализации если у объекта есть несколько EventListener'ов, то они выполняются все, при чем порядок выполнения может отличаться от того в какой последовательности они объявлены в пакетах, т.е. не учитывается иерархия пакетов. Идея в том чтобы:

1. EventListener'ы выполнялись согласно иерархии пакетов (в случае если у них один общий предок - BaseEntityEventListener).

2. Реализовать возможность вызова переопределенного Listener'а

3 комментария

Здравствуйте, спасибо за детальное описание идеи.
Задача зафиксирована и передана на ответственную команду разработки для рассмотрения. 
Касательно переопределения событийной логики, то возможно  будет полезная статья.

Не думаю, что данная проблема на самом деле проблема.

Вся логика описана в листенере - подразумевает под собой, что ее не нужно переопределять (так работают модули на JS, переопределять нельзя, но наследоватся можно).

Если необходимо в разных пакетах вызывать логику в определенном порядке, и изменять ее (оверрайд), то логику можно вынести в хелпер (А) - отдельный класс в котором реализована вся логика. А уже в листенере  создавать фабрикой екземпляр данного хелпера и вызывать его метод.
В такой архитектуре есть возможность в наследуемом пакете добавить класс (Б) наследник хелпера и пометить атрибутом [Override].
Тогда при создании екземпляра А в листенере первого пакета по факту создастся екземпляр класса Б, где уже будет дописана или изменена логика.

Владислав Литвинчук,

бывает такое, что проект уже не новый и существуют пакеты от других разработчиков и если они не предусмотрели возможность переопределения, то избавиться от логики не изменяя их пакеты достаточно проблематично.

Пример: в классе EventListener на OnInserting вызвался метод "SetName" который установил для колонки "Name" некое значение. Переопределить эту логику мы не можем и отменить ее выполнение тоже не можем, и гарантировать, что новая логика будет выполнятся позже старой тоже...

Остается только городить костыли на OnSaving, либо вообще уже после создания записи.

Показать все комментарии