用事件总线解耦模块 零线变更的级联重算
问题
用户调一下”零线”,后面会牵一发动全身:受影响的文件得重算厚度不足段、层位段平均深度、病害深度,层位识别和病害标注那边的雷达图、列表也都得跟着刷新。
要是让零线模块直接去调各模块的刷新方法,耦合就焊死了——零线模块得记着谁要刷新、调谁的哪个方法,以后多加个模块还得回来改零线的代码。
事件总线
加一个轻量的事件总线,零线模块只管”发事件”,谁在意谁自己”订阅”:
// 发布方:零线模块,不关心谁来处理 |
好处其实就是几件事搅一块儿:发布方和订阅方互相不认识,以后加模块订阅一下就行,零线代码不用动;重算(耗时)和刷新(UI)各跑各的协程,互不卡;零线模块只操心”算零线 + 广播”这一摊,下游各管各的。
配合增量计算
事件里带上 affectedFileIds(这次影响到了哪些文件),下游别傻乎乎全量重算,就重算这个范围内的,省下一大截没必要的计算量。
总之这种”一处改动、多处联动”的场景——台账变更、参数变更都算——用事件总线比硬调方法舒服太多:发布方省心,订阅方各过各的,扩展的时候只加订阅、不用回去改发布。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 CYK's Blog!
评论
