При использовании компонента, основанного на событиях, я часто чувствую некоторую боль на этапе обслуживания.
Поскольку весь исполняемый код разбит на части, может быть довольно сложно определить, какая часть кода будет задействована во время выполнения.
Это может привести к тонким и сложным проблемам отладки, когда кто-то добавляет некоторые новые обработчики событий.
Редактирование из комментариев. Даже с некоторыми полезными практиками, такими как шина событий всего приложения и обработчики, делегирующие бизнес другой части приложения, существует момент, когда код начинает становиться трудным для чтения, потому что есть много зарегистрированные обработчики из разных мест (особенно актуально, когда есть автобус).
Затем диаграмма последовательности начинает выглядеть сложнее, время, затрачиваемое на выяснение того, что происходит, увеличивается, и сеанс отладки становится грязным (точка останова на диспетчере обработчиков во время итерации на обработчиках, особенно радует асинхронный обработчик и некоторая фильтрация поверх него).
//////////////
Пример
У меня есть служба, которая получает некоторые данные на сервере. На клиенте у нас есть базовый компонент, который вызывает эту службу с помощью обратного вызова. Чтобы предоставить точку расширения пользователям компонента и избежать связи между различными компонентами, мы запускаем некоторые события: одно перед отправкой запроса, одно - когда ответ возвращается, а другое - в случае сбоя. У нас есть базовый набор предварительно зарегистрированных обработчиков, которые обеспечивают поведение компонента по умолчанию.
Теперь пользователи компонента (и мы тоже пользователь компонента) могут добавлять некоторые обработчики для внесения некоторых изменений в поведение (изменить запрос, журналы, анализ данных, фильтрацию данных, массирование данных, необычную анимацию пользовательского интерфейса, объединить несколько последовательных запросов в цепочку). , без разницы). Поэтому некоторые обработчики должны выполняться до / после некоторых других, и они регистрируются из множества разных точек входа в приложение.
Через некоторое время может случиться так, что будет зарегистрировано более дюжины обработчиков, и работа с ними может быть утомительной и опасной.
Этот дизайн появился, потому что использование наследования начинало быть полным беспорядком. Система событий используется в некой композиции, в которой вы еще не знаете, какими будут ваши композиции.
Конец примера
//////////////
Поэтому мне интересно, как другие люди занимаются этим видом кода. И при написании, и при чтении.
Есть ли у вас какие-либо методы или инструменты, позволяющие вам писать и поддерживать такой код без особых проблем?