用事件总线解耦模块 零线变更的级联重算
问题
用户调整“零线”后,会引发一连串级联反应:受影响文件要重算厚度不足段、层位段平均深度、病害深度,层位识别和病害标注模块的雷达图和列表都要同步刷新。
如果让零线模块直接去调用各模块的刷新方法,耦合就死死的——零线模块得知道谁需要刷新、调用谁的哪个方法,以后新增模块还得回来改零线代码。
事件总线
引入一个轻量事件总线,零线模块只负责“发布事件”,谁关心谁“订阅”:
// 发布方:零线模块,不关心谁来处理 |
收益:
- 解耦:发布方和订阅方互不认识,新增模块只要订阅事件即可,零线代码不用动。
- 异步编排:重算(耗时)和刷新(UI)分别在不同协程里跑,互不阻塞。
- 职责清晰:零线模块只管“算零线 + 广播”,下游各自处理自己的重算和刷新。
配合增量计算
事件里带上 affectedFileIds(受影响范围),下游不是全量重算,而是只重算这个范围内的数据,避免无谓的计算量。
小结
模块间的级联联动,事件总线比直接调用优雅得多:发布方一身轻,订阅方自治,扩展时只加订阅不改发布。台账变更、参数变更这类“一处改动、多处联动”的场景都适用这套。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 CYK's Blog!
评论
