Ao usar um componente baseado em eventos, muitas vezes sinto alguma dor na fase de manutenção.
Como o código executado está todo dividido, pode ser bastante difícil descobrir qual será a parte do código que estará envolvida no tempo de execução.
Isso pode levar a problemas sutis e difíceis de depurar quando alguém adiciona alguns novos manipuladores de eventos.
Editar a partir dos comentários: mesmo com algumas boas práticas a bordo, como ter um barramento de eventos para aplicativos e delegar negócios a outras partes do aplicativo, há um momento em que o código começa a ficar difícil de ler, porque há muitas manipuladores registrados de muitos lugares diferentes (especialmente quando existe um ônibus).
Em seguida, o diagrama de sequência começa a parecer complexo, o tempo gasto para descobrir o que está acontecendo está aumentando e a sessão de depuração se torna confusa (ponto de interrupção no gerenciador de manipuladores enquanto itera nos manipuladores, especialmente alegre com o manipulador assíncrono e com alguma filtragem no topo).
//////////////
Example
Eu tenho um serviço que está recuperando alguns dados no servidor. No cliente, temos um componente básico que está chamando este serviço usando um retorno de chamada. Para fornecer ponto de extensão aos usuários do componente e evitar o acoplamento entre componentes diferentes, estamos disparando alguns eventos: um antes da consulta ser enviada, um quando a resposta está voltando e outro em caso de falha. Temos um conjunto básico de manipuladores pré-registrados que fornecem o comportamento padrão do componente.
Agora, os usuários do componente (e também somos usuários do componente) podem adicionar alguns manipuladores para realizar alguma alteração no comportamento (modificar a consulta, logs, análise de dados, filtragem de dados, massagem de dados, animação sofisticada da interface do usuário, encadear várias consultas sequenciais , tanto faz). Portanto, alguns manipuladores devem ser executados antes / depois de outros e são registrados a partir de vários pontos de entrada diferentes no aplicativo.
Depois de um tempo, pode acontecer que uma dúzia ou mais de manipuladores estejam registrados, e trabalhar com isso pode ser entediante e perigoso.
Esse design surgiu porque o uso da herança estava começando a ser uma bagunça completa. O sistema de eventos é usado em um tipo de composição em que você ainda não sabe quais serão seus compostos.
Fim do exemplo
//////////////
Então, eu estou me perguntando como outras pessoas estão lidando com esse tipo de código. Tanto ao escrever quanto ao ler.
Você tem algum método ou ferramenta que permita escrever e manter esse código sem muita dificuldade?