知识卡片

声明式作业序列取代层级式回调解决GUI阻塞

普通读书笔记卡 · 1814.f

内容

在事件驱动的GUI程序里用层级式回调处理多步异步操作(打开文件回调里链接处理回调,再链接显示回调)会让状态难以跟踪、容易出错,还把做什么操作和如何显示结果混在一起。更好的做法是先把要执行的所有步骤一次性声明成一个有序的作业序列对象,再整体扔进后台工作队列,只在整个序列完成时收到一个通知信号。这把声明要做的事和实际执行的时机彻底分开,程序员只需写一次性的声明代码,不必手写多层嵌套的完成回调。

参考来源

- 位置:《架构之美》第12章《当集市开始构建教堂》12.4.1节《ThreadWeaver简介:当其载入一个文件时有多复杂》(源文件:程序之美系列套装(6册)团队之美、项目管理之美、架构之美、数据之美、测试之美、安全之美/_epub-src/OEBPS/Text/part0249.xhtml) - 结论依据:原文对比了"层级式句柄方法……无法很好地跟踪操作的状态,并且通常会有错误的倾向",与ThreadWeaver方案"用户将创建一个作业序列……当整个序列设置完成时,用户将其放到应用程序的全局作业队列中……当收到序列发出的done()信号时,就表示数据做好了显示的准备"。 - 原始内容:这组层级式的句柄方法无法很好地跟踪操作的状态,并且通常会有错误的倾向……这时将通过工作线程自动执行整个序列……当收到序列发出的done()信号时,就表示数据做好了显示的准备。