为什么不能贸然采用新技术

常在论坛里见到这种说法,比如struts2和springmvc之争,在开发范式的合理性和先进性上认同后者都强于前者,但就是由于项目组里面没有熟练用户,最终弃用后者等等。

这种看似真理实际上也是真理的说法,没有一定的实践很难说明白。今天恰好碰到一个恰当的例子。项目一直采用struts2,文档中说,写Action可以继承ActionSupport也可以实现接口Action,减轻框架代码污染而选择实现接口,没问题。struts2带防止重复提交的机制,写了个demo调试成功然后配置使用,也没问题。运行过程中,用户总报一个异常页面,经过排查和询问,发现是由于重复提交导致的,但直接给出的是500页面,而不是我们配置好的重复提交错误页面。

项目此时规模已经不小,配置文件的清理问题一直没有妥善解决,所以怀疑是因为某些原因,配置未生效。再者重复提交问题确实拦住了,只是错误提示信息不对,也不属于严重问题,所以一直搁置没有解决。到某天觉得确实应该解决的时候,翻遍文档资料也想不明白原因。乱试之下发现,必须继承ActionSupport,未继承的情况下,struts拦截器链到某一步的时候会抛出空指针异常,原因不明。

修改继承结构后,问题解决。

bug级别几乎可以归入“可选“,但谁知道问题都会出在哪。所以项目技术选型最没有风险的方法就是”所以需要用的东西我都用过“。

选用新技术是必要的,但是在做项目规划的时候,要计算这些未知成本。即便是”可选“级别的bug,积累多了,也足以让用户的体验下降一个档次。