本文介绍日常工作中模块间解耦,并抽象封装的一个例子。
在一个嵌入式设备中,视频相关业务流程如下,DSP采集编码后,生成H264数据,然后对H264数据分别进行MP4、RTP、PS封装,封装后形成的数据进入对应的缓存队列。缓存队列是DSP和APP共享的,DSP写入,APP读取。
业务层(APP层)的录像模块(包括循环录像、事件录像等)从mp4数据包缓存队列
中读取数据进行存储,实时预览模块从RTP数据包缓存队列
中读取数据发送给客户端,平台接入模块从PS数据包缓存队列
中读取数据发送给平台。
我们先停下来想想,这种业务流程存在哪些问题?
下图是优化后的流程图,变更点如下(绿色方框中的为主要变更内容):
H264数据缓存队列
帧读取器对象
,APP层的录像、预览、平台接入等模块不再直接操作缓存队列,而是通过帧读取器获取帧数据。那么,这样做的好处在哪里?
帧读取器对象
封装了缓存队列
的操作流程,如果缓存队列的实现机制变更,只需修改帧读取器对象即可。(这里类似设计模式中的策略模式)