首页 新闻 会员 周边 捐助

参数应该何时检测. 怎么做才能让代码更加健壮的同时, 获取最高效率.

0
悬赏园豆:100 [已解决问题] 解决于 2011-11-21 18:17

我编写一个类, 这个类有一部分public函数, 被外界使用. 也有一些private或者protected函数, 类内部使用, 许多public函数要调用这些内部的函数.

我在哪里做参数检测比较好? 在public函数中? 还是在内部函数中? 编写内部使用的函数时, 我能假定外界提供的参数是正确的吗? 为什么?

问题补充:

在公共函数中编写容错代码, 在内部函数中用assert来检测, 这样的解决方案有什么缺点?

glshader的主页 glshader | 初学一级 | 园豆:118
提问于:2011-10-20 15:08
< >
分享
最佳答案
0

我支持public接口检查,其他的在测试阶段添加assert或打印Trace信息就好了。

反复检查室思路不清晰的一种表现。

如果是分层架构,每一次对外接口必须检查,以避免数据传输途中异常或被修改引起的问题。

比如Data Access层通常分两小层,High Level和Low Level,High Level必须做输入检查。

收获园豆:35
胡屯 | 小虾三级 |园豆:714 | 2011-11-01 13:57
其他回答(6)
0

建议写在内部函数中,因为如果在写public函数中,多处调用就要多次检测,移植性不好。

收获园豆:10
artwl | 园豆:16736 (专家六级) | 2011-10-20 15:13
0

建议写在public函数中吧,这样就相当于刚调用的时候(相当于输入)已验证了,在内部函数中你随便怎么计算都可以不用考虑参数是否不是自己希望的那样,开发可能会方便些。

收获园豆:10
LCM | 园豆:6876 (大侠五级) | 2011-10-20 17:28
0

这种应该都有写的,如果该模块以后会给其他地图调用,很难避免有非法参数的问题

收获园豆:10
Devin Mao | 园豆:596 (小虾三级) | 2011-10-21 11:11
0

建议在需要用到的地方检测

比方说:

public void F1(Param p)
{
F2(p);
F3(p);
}

private void F2(Param p)
{
p.XX1 = some;//此处要求p不为 null,应检查
}
private void F3(Param p)
{
//F2(p) blablabla
}

 

另外,界面用户输入都应检查

收获园豆:10
小彬 | 园豆:947 (小虾三级) | 2011-10-21 12:47
0

首先,安全重要还是性能重要?

如果是安全重要的话,内部函数里面一堆assert,这是无疑的.

如果是性能重要,那我不知道啥办法.

收获园豆:10
egmkang | 园豆:-734 (初学一级) | 2011-10-24 15:35
0

你的意思就是尽量减少检测参数的次数吧。

我感觉,如果在最外层添加检测,那么内部就不需要重复检测,这样或许就能减少检测的次数。如果你在外层不检测,那么每一个内层的函数都要分别检测。这样似乎就增加检测的工作量。

 

收获园豆:15
诺贝尔 | 园豆:37 (初学一级) | 2011-10-30 09:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册