先给结论:不要为这个组件补一份“全站通用验收单”,而要按页面角色拆出差异条件,再决定保留同一实现、改写局部参数,还是让该页面退出这个组件。判断依据不是组件在哪个页面“看起来更好”,而是同一份输入在两类页面上的输出差异是否稳定、可复现、可归因。
同一组件在不同页面表现不同,常见原因只有三类,验收样例的构造方式随之不同。
把这三类混在一起,验收样例就会写成“在A页面正常、在B页面异常”的模糊描述,无法判断该改组件还是改页面。
保留同一实现的前提是:差异只来自内容条件,且组件在两类页面上的降级行为都可接受。例如假设一个产品卡片组件,在列表页显示三行摘要,在详情页推荐位只显示一行。若两处都只是按容器宽度截断,且截断后仍能读出产品名和关键属性,就不必强行统一。此时验收样例应固定字段长度边界,而不是固定视觉高度。
改写局部参数的前提是:容器条件差异稳定存在,且页面角色确实需要不同密度。例如列表页需要快速扫读,详情页推荐位需要更强引导。改写应落在页面级配置或容器级变量上,而不是在组件内部加一堆页面判断。验收样例要分别记录两类页面下的最小宽度、最大宽度和字段缺失时的表现。
让该页面退出这个组件的前提是:状态与数据来源差异无法在组件内收敛,或者退出后页面目标更容易达成。比如某个页面依赖实时库存状态,而组件默认按静态字段渲染,继续复用只会让维护者不断打补丁。退出不是失败,而是把耦合点移回页面自身。验收样例此时应验证退出后原有功能是否仍完整,而不是继续比较组件外观。
可执行的做法是:为同一组件建立一份最小输入集,覆盖空值、最短、最长、临界长度和特殊字符;再选两个代表页面,分别记录组件渲染后的可观察结果。
这个动作的结果会直接影响下一步:如果差异都归入内容条件,就保留实现并补充边界输入;如果归入容器条件,就改写页面级参数;如果归入状态条件且无法收敛,就评估退出组件。没有这一步,后续修改很容易变成在错误层面反复调整。
假设某企业站已有产品列表页和产品详情页,两处都使用同一个产品卡片组件。列表页每行四列,详情页推荐位每行两列。测试输入固定为:产品名20个汉字、摘要80个汉字、无主图、有一个次要标签。
在列表页,卡片宽度较窄,摘要被截断为两行,次要标签换到下一行;在详情页推荐位,卡片宽度较宽,摘要显示完整,标签与标题同行。此时差异主要来自容器条件,且两处都还能读出产品名和标签,因此适合保留组件、改写列数或摘要行数参数。
若换一组输入:某产品没有摘要字段,列表页显示空白占位,详情页推荐位却把标签顶到标题旁,导致标题被挤压。这时差异来自内容条件与容器条件的叠加。验收样例应分别记录“无摘要”和“有摘要”两种输入在两类页面上的输出,而不是只截一张图。若修复后列表页仍无法在无摘要时保持可读,就应让列表页退出该组件,改用更简单的标题加标签结构。
验收样例的价值在于让下一位维护者知道:什么条件下保留、什么条件下改写、什么条件下退出。因此每条结论都应包含前提和动作,例如“当容器宽度低于某个阈值且摘要为空时,列表页改为单行标题;否则保留卡片组件”。阈值应来自实际测量,而不是拍脑袋设定。
同时要接受一个事实:某个页面上的异常消失,不等于组件已经正确。缓存刷新、数据更新或页面改版都可能让现象暂时不见。只有同一输入在两类页面上稳定复现或稳定消失,才能作为判断依据。把这一点写进验收样例,后续修改才不会反复推翻前面的结论。