结论先给:如果工具新增或改变了支持的对象格式,输入规范不要整份重写,而要先判断变化属于“扩展兼容”还是“替换不兼容”。扩展兼容时,保留旧规范并增加一层格式判定;替换不兼容时,必须冻结旧入口、建立新规范并做小样本验证。下面按这两种条件展开,并指出一个会让上述结论失效的反例。
工具支持的对象格式变化,通常表现为三种情况:原来只接受纯文本,现在也接受结构化字段;原来接受一种分隔符,现在改成另一种;原来接受单层结构,现在要求嵌套。前两种多数属于扩展兼容,第三种往往是替换不兼容。
判断依据不是工具说明写了什么,而是你现有输入里有多少条会因为这次变化而失败。可以这样区分:
一个实际动作是:从现有输入中抽取二十到三十条覆盖不同字段组合的记录,分别用旧写法和新写法提交,记录哪些被接受、哪些报错、哪些虽然被接受但字段落位不对。这个动作的结果直接决定下一步——如果只有新增写法被接受而旧写法仍可用,就进入扩展兼容分支;如果旧写法大面积报错或静默错位,就进入替换不兼容分支。
扩展兼容的情况下,最省事的做法不是把旧规范全部替换掉,而是在输入规范前面加一段判定规则,说明什么条件下用旧写法、什么条件下用新写法。
具体可以这样组织:
这样改的好处是,已经熟悉旧规范的执行人员不需要重新学习全部内容,只需要判断自己手里的对象属于哪一类。代价是规范会变长,判定规则本身也需要维护。如果新增格式的使用频率很低,这段判定规则可能长期没人看,反而增加理解成本。
替换不兼容时,保留旧规范是有害的,因为执行人员会继续按旧写法提交,而工具不再接受。此时要做的是三件事:
这里的实际动作是重建一份最小可用的新规范,只覆盖当前业务真正会用到的字段,不追求一次写全。先让执行人员能提交成功,再根据报错记录补充边界情况。这样做的结果是,短期内有部分边缘格式暂时没有规范说明,但主流程不会被旧写法拖住。
上述“先判断扩展还是替换”的方法,在一种情况下不成立:工具同时改变了对象格式和字段含义。例如字段数量没变,但同一个位置的字段从“地域”变成了“渠道”,格式看起来兼容,语义却变了。
这时无论判断为扩展兼容还是替换不兼容,都会出错。扩展兼容会让旧数据被错误解释,替换不兼容又可能漏掉那些格式合法但含义已变的历史记录。遇到这种情况,不能只改输入规范,必须先做一次字段映射核对,确认每个位置的旧含义和新含义是否一致。只有映射关系明确后,才能回到扩展或替换的判断。
无论属于哪种情况,下一步都不是直接改文档,而是先跑一轮小样本。从现有输入中挑出覆盖主要字段组合的记录,按新格式提交,记录接受、报错和静默错位三类结果。如果静默错位占比明显,说明问题不在格式写法,而在字段映射,需要先解决映射再改规范。如果报错集中在少数写法上,就针对这些写法补充说明即可。小样本的结论会决定你是改一段判定规则,还是重建整份输入规范。