Пишу событийную систему. Решил сделать так:
Есть интерфейс, который описывает события(событие=метод в и-фейсе). А также объекты, которые его имплементируют, если хотят получать такое событие.
В проекте очень большое поле, откуда(и куда) можно бросить исключение, а также вложенность объектов. Для этого ввели енум Scope (если коротко, то значения такие - глобально, канал, объект, по объекту вверх/вниз, текущая модель И Т.Д.). Встал вопрос-как лучше определять куда должно идти событие(т.е. где указывать Scope)?
Небольшое голосование:
1) При бросании события указывается Scope, то есть будет какой-то сервис с методом
dispatchEvent(Scope scope, interface, ...) который будет определять объекты(с нужным интерфейсом), которые должны получить событие
2) Событие бросается глобально(всем сразу объектам), а к каждому методу (в классе реализации) сделать аннотацию для указания = откуда объект ХОЧЕТ получать события.
3) На самом интерфейсе аннотацией указать Scope.
4) Аналогичный вариант со вторым способом, но указать аннотацию НЕ В КЛАССЕ РЕАЛИЗАЦИИ, а непосредственно на методе интерфейса событий
Голосовать можно за несколько вариантов, а также предлагать свои варианты.
Критика, пожелания - приветствуются