我经常有调用层次结构,因为所有方法都需要相同的参数。如果我不想将它们放在实例级别(类的成员),那么我总是问我在每个方法中检查它们的有效性是否有意义。
例如:
public void MethodA(object o){
if(null == o){
throw new ArgumentNullException("o");
}
// Do some thing unrelated to o
MethodB(o);
// Do some thing unrelated to o
}
public void MethodB(object o){
if(null == o){
throw new ArgumentNullException("o");
}
// Do something with o
}
If Method
A 使用参数,那么很清楚,我必须检查那里以及 MethdoB 中的有效性。但只要 MethodA 不做任何其他事情o
比把它给MethodB
,也是检查有效性的好习惯吗MethodA
.
也可办理登机手续的优点MethodA
可能是在被调用者调用的方法中抛出异常,这很好,但是有必要吗?调用堆栈也会说明这一点。也许它在公共、内部、保护中有意义,但在私有方法中没有意义?
我以空检查为例,但索引验证或范围验证也属于自我问题,但我认为由于冗余代码的危险而存在局限性。你怎么认为?
UPDATE
通过AakashM的回答,我发现我不太准确。MethodA
不仅是打电话MethodB
,它还做其他事情,但与o
。我添加了一个例子来澄清这一点。谢谢阿卡什M。
史蒂夫·麦康奈尔代码完成谈论'的概念路障’——防御墙外的数据是不可信的,而在防御墙内的数据是可信的。想要进入路障的数据必须经过验证过程,但在路障内,数据可以自由移动,不受验证代码的限制。
如果您可以在项目中实施如此数量的结构化和分层,并坚持下去,它确实会使内部代码变得更少仪式和更多本质。但只要用一种方法来叫停路障,一切就会出错。
在你的例子中,MethodB
is public
。这意味着您没有自动的未来保证MethodA
将是它唯一的调用者——因此我想说它的验证代码应该保留。如果是的话private
但是,您可以向班级提出删除它的论点。
As for MethodA
,如果确实如此nothing不仅仅是打电话MethodB
,它不应该存在。如果它是未来扩展的存根,并且在某个时候它将做一些事情o
,那么它的验证码也应该保留。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)