繁体   English   中英

需要一个库或设计模式来处理异步代码中的依赖地狱

[英]Need a library or design pattern for dealing with dependency hell in asynchronous code

我将描述这种“依赖地狱”的简化例子。

想象一下具有“播放/暂停”和“静音/取消静音”按钮的视频播放器。 暂停视频应暂停声音,但不要将其静音,以便取消暂停视频应取消暂停音频。

然后想象我们在单独的文件中下载音频和视频,因此我们有四个成功/错误回调。 想象一下,视频可以在没有音频的情况下播放,但不能相反。 现在想象一下,如果需求更新,应该对代码进行多少更改,以便视频和音频应该相互等待。

目前我正在使用回调和布尔变量处理这个问题。 我觉得这是石器时代,因为这样的事情:

if (videoShouldPlay && audioShouldPlay && isAudioPlaying && isVideoDownloaded && isAudioDownloaded) {

或4个类似的回调:

audio.onload = function () {
    if (isVideoDownloaded)
       .....
    } else { ...
}

既不可读也不可维护。 依赖项的数量随着组件的数量呈指数级增长,但是当我可以定义一些通用规则时,我不应该跟踪每个依赖项。

我确信计算机科学已经解决了这个问题。

看起来我需要一台状态机 让我们以“播放”和“暂停”状态为例。 转换“播放”➜“暂停”的规则就是你所写的: “暂停视频应暂停声音但不要静音”等等。如果没有看到你手边的实际问题,很难说清楚它

我将建议第29章“ 敏捷软件开发,原则,模式和实践的 状态 ”,并将“ 状态改变条件”与“重构到模式的 状态”替换 我个人觉得着名的设计模式:可重复使用的面向对象软件的元素有些难以阅读,但它仍然是状态模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM