先不要因为“需求方说不要了”就立刻删除代码。更稳妥的判断顺序是:确认该功能是否已经对外产生依赖,再评估保留、隔离还是下线。如果缺少完整访问数据或后台权限,你仍可以执行一个最小动作——在代码入口加一层开关,记录调用但保持关闭,观察一段时间后再决定。
需求取消只代表发起方不再需要,不代表功能没有别的使用者。你需要先区分三种情况:
缺少调用数据时,不要用“没人反馈”推断“没人使用”。更合理的做法是搜索代码引用、检查路由和定时任务注册、查看日志中是否还有该路径的请求记录。如果连日志都没有,可以临时在入口处加计数,运行一段时间后再看。计数为零只能说明这段时间该入口没有被触发,不能直接证明外部没有依赖,因为调用方可能只在特定周期或特定条件下才访问。
保留适用于功能已稳定、维护成本低、且未来可能重新启用的情况。前提是你能接受它继续占用代码路径和测试范围。保留不等于放任,至少要在代码注释或内部文档中标注“需求已取消、暂不推广”,避免后来者误以为它是正式功能。
改写适用于功能本身还有价值,但形态不再匹配当前需求。例如原需求是给运营人员导出报表,需求取消后,财务仍需要同一份数据。此时不必保留整套页面,可以把核心计算逻辑抽成独立模块,去掉展示层。改写的成本通常高于直接保留,低于重新开发,判断依据是核心逻辑是否已被其他地方复用。
下线适用于确认无外部依赖、无其他模块引用、且重新启用概率很低的情况。下线动作应分步:先关闭入口,再观察一个发布周期,最后删除代码。直接删除的风险在于,如果某个边缘调用方在关闭入口后才暴露,你还有回滚余地。
如果你没有生产环境日志权限,也没有后台配置权限,仍然可以做两件事:
这个动作的结果会直接影响下一步:如果一段时间内没有任何触发记录,且代码引用只来自已取消的需求本身,就可以进入下线流程;如果仍有触发,就需要找到触发来源,再判断是保留还是改写。要注意,触发记录为零也可能是因为入口本身已经被前端隐藏,调用方根本到不了这里,所以计数需要加在实际被调用的那一层,而不是页面层。
假设某太原网站开发项目中,一个“批量导入客户标签”的功能在开发完成后被通知取消。检查发现:页面入口尚未发布,但导入逻辑被另一个“客户分组”功能调用。此时直接删除导入逻辑会导致客户分组报错。合理的做法是保留导入逻辑中“标签解析”部分,删除批量上传的页面和队列任务,并把解析函数改为被客户分组直接调用。这个例子的关键不是照搬结论,而是说明:需求取消的范围往往小于已开发功能的范围,先划清边界再决定去留。
无论选择哪种处理方式,都建议留下一条可复查的判断记录,包含:功能名称、取消来源、当前引用点、选择的处理方式、触发重新评估的条件。例如“若连续两个发布周期无调用且无外部依赖,则删除”。这样后来者不需要重新猜测当初为什么保留或删除。缺少完整数据时,这条记录本身就是最实际的依据,它不能证明决定绝对正确,但能让下一次判断有起点。