使用基于事件的组件时,在维护阶段我经常会感到有些痛苦。
由于执行的代码都是分散的,因此很难确定在运行时将涉及的所有代码部分。
当有人添加一些新的事件处理程序时,这可能导致难以解决的细微问题。
从评论中进行编辑:即使有一些良好的实践做法,例如具有应用程序范围的事件总线和处理程序将业务委派给应用程序其他部分的处理程序,有时代码也开始变得难以阅读,因为其中有很多来自许多不同地方的注册处理程序(尤其是在有巴士的情况下)。
然后,序列图开始查看复杂的情况,花费时间确定正在发生的事情在增加,调试会话变得混乱(在处理程序上迭代时,处理程序管理器上的断点,尤其是异步处理程序和在其之上进行一些过滤时感到高兴)。
/////////////
示例
我有一个正在检索服务器上某些数据的服务。在客户端上,我们有一个基本组件,该组件使用回调来调用此服务。为了向组件的用户提供扩展点并避免不同组件之间的耦合,我们触发了一些事件:一个事件在发送查询之前发生,一个事件在返回答案时发生,另一个事件在失败时发生。我们有一组预注册的基本处理程序,它们提供了组件的默认行为。
现在,该组件的用户(我们也是该组件的用户)可以添加一些处理程序以对行为进行一些更改(修改查询,日志,数据分析,数据过滤,数据按摩,UI花式动画,链接多个顺序查询) , 随你)。因此,某些处理程序必须在其他处理程序之前/之后执行,并且它们是从应用程序中许多不同的入口点注册的。
一段时间后,可能会发生十几个或更多处理程序被注册的情况,并且使用该处理程序可能既乏味又危险。
之所以出现这种设计,是因为使用继承开始变得一团糟。事件系统以一种组合形式使用,您尚不知道组合将是什么。
示例结束
//////////////
所以我想知道其他人如何处理这种代码。无论是在编写和阅读它。
您是否有任何方法或工具可让您轻松编写和维护此类代码?