今天看了一个同事的代码,里面需要解析一个xml文件: XmlNode xn = xmlDoc.SelectSingleNode(".\Match"); if(xn != null) { ...} 我觉得这里没必要判断xn是否为null,因为他解析的xml文件完全是由自己生成的,完全可能明确知道Match这个节点在他解析的xml文件中一定存在,所以xn一定不可能为null,如果xn为null,那么说明是xml文件生成时没有按指定的规格生成,所以如果加入了if(xn != null)这种容错性处理反而会屏蔽了其他本来错误的代码,起到反作用,就像社会上的报喜不报忧,屏蔽黑暗面一样,其实这些黑暗面就是应该让它暴露出来,及早暴露好及早纠正。
后来我又对比了下我的代码,我也使用了 if(xn != null) { ...}这种容错性处理,但是我需要解析的xml来自与不同的第三方数据提供者,这些提供者都没有明确说明这个Match节点在他们的xml中是否必定会有,所以我必须考虑容错性的处理,我和那个同事所面对的case(场景)不一样,具体问题得具体分析,不能千篇一律。
这个例子背后的思想就是 每个函数责任界限一定要清晰,只需完成自己责任范围内的功能,不越界去为别的函数做事,但自己应该做的事就应该做足,不能偷工减料。如果忍不住要做别函数应该做的事,那么就要做好,例如那个同事把代码改成下面这样也行:if(xn != null) {throw new Exception("在xml文件中没有对应的Match节点");},那么这背后的思想就是我愿意承担更多一点的责任--校验你生成的xml文件,并且如果校验不通过我还会知会你一声,让你去改正而不是闷着把它给甩掉。
浙公网安备 33010602011771号