带你读《2022技术人的百宝黑皮书》——我在淘宝做弹窗,2022 年初的回顾与展望(4)https://developer.aliyun.com/article/1340421?groupCode=taobaotech
设计新版弹窗描述数据
在搞清楚业务域的领域边界和领域内容后,就可以开始着手进行 DSL 的设计了,这也是本次项目改造升级的核心环节。DSL 设计的好坏,将直接决定整个项目是否有能力在不断发展变化的业务诉求中始终保持稳定和敏捷。我认为一份好的 DSL 设计,应该同时满足以下要素:
字段设计应符合「奥卡姆剃刀」原则,如非必要,勿增实体:尽可能让数据字段精简,明确,同时,数据组织要合理;
数据模块之间应满足「高内聚,低耦合」原则,尽量避免修改某一个字段时,牵一发而动全身,导致大面积的字段修改;
需紧密围绕特定领域进行设计,既要避免过度设计导致数据结构复杂和字段膨胀,但同时也要充分考虑到未来可能出现的种种可能;理想情况下,未来发展出的新的业务诉求,只需「更新」 DSL 的属性值,而非属性;
基于以上三个核心设计原则,最终我们产出了淘宝弹窗描述数据规范。其大致可以分为如下 7 个模块:
基础信息模块:包含弹窗的基本信息,如名称,类型等;
组件模块:包含弹窗域所需组件的描述,通过分析历年弹窗域活动内容,我们归纳总结出图片,文字,倒计时, 热区,容器,iframe,视频,状态和关闭按钮共 9 种组件,每种组件都围绕弹窗域需求与手淘基础架构设置了特定的字段,例如对于文字组件,可设置行数与内容,对于倒计时组件可设置是否显示毫秒位,倒计时结束后行为,超过某个临界值是否显示文本等;定制化组件使用户可以非常直观便利地使用各组件完成弹窗搭建任务;
样式模块:负责描述组件的 UI,由于不确定终端渲染环境,因此在样式属性,样式单位的设计上就要充分考虑到不同场景,不同技术选型的限制。通过与客户端同学沟通交流,我们最终将样式属性确定为能满足三端
(H5,iOS,Android)与弹窗需要的最小样式集合;
请求模块:请求模块涵盖了对手淘内常见请求方式的结构化描述,并将该描述同时使用在弹窗曝光前与曝光后, 数据内容覆盖了弹窗域请求所需关注的所有关注点,并支持串行,并行请求的配置;
行为模块:与大多数搭建平台不同的是,PopLayer 弹窗搭建所产出的数据,是对弹窗样式,行为,配置的全面描述。在行为模块中,我们通过梳理历史弹窗行为,对弹窗行为进行结构化定义,从而使弹窗行为可以被简单, 清晰地描述,并通过彼此的排列组合,可以灵活适配各类业务需要;
动画模块:前文有提到过,行业整体的发展,要求更细腻的弹窗展现形式和交互,同时,也要求弹窗对用户有更强的吸引力。为此,我们引入动画模块,通过清晰,灵活的数据结构满足不同场景的动画需要;
其他功能模块:这里则主要包含其他与弹窗域相关的附加功能模块,例如渐进式曝光,承接页预渲染模块等,是对核心模块的扩充;
目前,淘宝弹窗描述数据一级数据共有 17 个,分类如下:
手淘弹窗描述数据一级字段
每个字段均有清晰,及时更新的文档说明与之对应。下面我将以行为模块的设计为例,让读者对 DSL 的设计有进一步的感受。
带你读《2022技术人的百宝黑皮书》——我在淘宝做弹窗,2022 年初的回顾与展望(5)https://developer.aliyun.com/article/1340419?groupCode=taobaotech