先给结论:不要直接把新格式的样本粘进旧输入框试跑。正确顺序是先把“旧规范里哪些约束是格式专属的”拆出来,再用新格式重写这批约束,最后拿一个刻意包含边界情况的样本验证。下面用一个假设情境把决策过程走完。
假设你原本用一款在线推广工具做批量素材检查,输入是一行一条的纯文本,每行包含素材名称和落地页地址,用竖线分隔。后来协作方改为提供表格文件,列名固定,但部分单元格为空,部分地址带查询参数。你直接沿用“按竖线切分”的规范,前几条能跑通,规模一上来就出现大量例外——这就是典型的“个别样本成立、规模化后失效”。
此时要判断的不是工具好不好用,而是旧输入规范里哪些规则依赖了旧格式的物理特征。依赖换行和分隔符的规则,在表格里不再成立;依赖字段顺序的规则,可能在表格里被列名取代。把这两类分开,改动才有边界。
拿一张纸,把旧规范逐条写下,然后对每条问一句:这条规则是因为数据长成那样才需要,还是因为业务本身要求?
拆完之后,你会得到一份“必须保留的约束清单”。这份清单才是新输入规范的骨架,而不是把旧规范整体翻译一遍。
针对表格输入,把保留的约束改写成可检查的条件。例如:
关键动作是给每条约束注明“在什么条件下才检查”。比如“参数成对出现”只在地址确实带问号时检查,没有问号就跳过。这一步的结果直接决定下一步:如果某条约束无法写成可检查的条件,说明它其实是人工判断项,应从自动规范里移出,改为抽样复核。
假设你手上有三条数据:一条完全正常,一条名称为空,一条地址带三个查询参数且其中一个没有等号。用旧规范跑,三条可能都“通过”或都“报错”,因为切分逻辑根本没看到字段。用新规范跑,预期结果是:第一条通过,第二条因名称为空被拦,第三条因参数不成对被拦。
如果实际结果与预期不符,先别改业务约束,先检查解析层。常见原因是表格里的空单元格被读成了空字符串还是缺失值,这两种情况在后续判断中行为不同。把这一点确认清楚,再决定是调整读取方式还是调整约束写法。
这个动作的影响:一旦确认解析层行为,你就能判断“例外”是数据问题还是规范问题。数据问题交给上游补全,规范问题才需要改约束。两者的处理路径完全不同,混在一起会导致规范越改越松。
有些旧规范看起来通用,实际不能平移。第一,依赖行序的规则在表格里通常失效,因为列顺序可能被调整,应按列名定位而非列号。第二,旧规范里“一行一条”的隐含假设,在表格里对应“一行一条记录”,但如果表格存在合并单元格,这个假设就不成立,需要先展开或拒绝该批次。第三,旧规范中未定义的字段,在新格式里出现时,不要默认忽略,也不要默认报错,而应设为“记录但不阻断”,等积累到一定数量再决定是否纳入约束。
另外,如果新格式来自外部协作方,格式本身可能还会再变。此时把约束写成配置文件而非硬编码在流程里,下次格式调整只需改配置,不必重走整个验证过程。具体工具是否支持外部配置文件,需要按你实际使用的产品核对,不同实现的入口和写法并不一致。
面对对象格式变化,动作顺序是:拆旧规范、保留业务必需项、按新格式重写为可检查条件、给条件标注适用前提、用含边界情况的样本验证、确认解析层行为后再决定改数据还是改规范。这套顺序的价值在于,它把“格式变了”这个笼统问题,压缩成几个可以分别判断的小问题,避免在规模化例外出现时反复推翻整份输入规范。