3.2.2 另一种编程世界观:流过系统的信息流
我们将这种编程世界观的表达形式类比为电影中的长镜头。长镜头往往以一个主要事物和它的状态(主角或其他事物的视角)来推进情节,一个镜头反复切换到需要观众关注的内容上,而不切换大场景,一镜到底地表述整个过程和结果。很多电影,比如《鸟人》(见图3-4)就使用了这一经典的拍摄手法。
图3-4 长镜头/一镜到底示意图
信息流式的系统更贴合我们现在的互联网场景。通过营销手段吸引用户登录商业平台,用户浏览商品后,有一定概率会下单;商家履行契约,通过平台派单给骑手;骑手接单后,配送商品,最终完成整个交易,如图3-5所示。这一场景明显区别于早期以信息归纳、增删改查为主要能力的管理系统(简单留存顾客电话和地址的网上订购模式)。
图3-5中,整个链路使顾客、商家、订单、配送等关键字段串联出清晰的软件模型。对于信息流来说,我们可以有更多精力关注过程本身的工作:并发/并行、同步/异步、有限工作/无限待命,以及工作流的合并/拆分。
图3-5 信息流式系统中的交易和履约场景示意图
如果能系统地区分过程的种类并进行优化,就可以节省更多处理业务流程的精力。本节提到的两种编程时对过程高度抽象的方式:反复对过程进行抽象和对信息流过程处理方法的归纳,使得我们可以更高效地描述系统的运行过程。
现在我们已经了解了函数和过程的抽象,在设计系统时可以站在全局进行思考。3.3节我们将回到程序的设计中,看一看函数式思维影响代码的两个重要体现:程序本身拥有更多控制权和函数式思维对数据结构的影响。