Я признаюсь, что я еще не играл с ним сильно, но я думаю, что вы правы, что код слушателя, вероятно, не должен быть в картографе. Скорее, он может стоять один во внешнем классе, поэтому он может действительно быть объектом единой ответственности - обрабатывать события, к которым он присоединяется, - и код может оставаться как можно сухим.
В качестве первого шага мы можем определить, что слушателю необходимо выполнить свою работу. Некоторые вещи, которые он знает при создании, другие должны передаваться при срабатывании события.
Например, для прослушивателя кеша я могу создать экземпляр в Bootstrap с информацией о том, где кешировать, время жизни и т. Д. Возможно, даже захватите экземпляр кэша, полностью настроенный и готовый перейти от ресурса cachemanager. Это могут быть конструктивные параметры для объекта-слушателя.
Тогда, возможно, в Bootstrap, я зарегистрировал бы этого слушателя с менеджером событий, подписавшись на ваше мероприятие и приложив метод, который вы хотите запустить при запуске события. Разумеется, эта подпись метода должна быть совместима с информацией, которую вам предоставит менеджер событий.
Я предполагаю, что идея состоит в том, что этот слушатель объект имеет потенциальные преимущества:
будучи одинарной responsibilty, поэтому более низкую сложность и проще тестировать
мы надеемся быть достаточно общим, чтобы эта один слушатель может обрабатывать несколько событий.
Здесь немного морщин. Может показаться, что необоснованная производительность удалась, чтобы создать экземпляр и зарегистрировать слушателя только в том случае, если какой-то процесс нисходящего процесса может инициировать событие, на которое он подписан. Вот здесь и появляются статические слушатели. Снова регистрация выполняется раньше (например, Bootstrap), но слушатель не создается, пока он действительно не нужен.
Раскрытие информации: Возможно, у меня это совершенно не так. Поэтому, если кто-то хочет выправить меня, это будет здорово. ;-)