[问题] Private method 该不该确认参数正确性?

楼主: Ebergies (火神)   2015-01-25 17:02:56
如题
public methods 应该不需要讨论了
假设是一个多人合作的专案
你开发的部分很可能之后会换人维护
那么有必要在 private method 进行参数的 validation 吗?
我稍微找了一下, 网络上的答案大概有两类:
1. Using assertion to check in private method
2. Using auto test to insure that the function is not violating your assumptions
大家都认为不该花运算时间在里面
但人有失蹄马有乱手
也有可能之后的维护者直接新增 public 接口呼叫 private method
如果是上述的情况似乎 (1), (2) 都无法避免产生问题
不过每个 private method 都检查参数似乎也有点疯狂
不知道大家都如何处理此类问题呢?
楼主: Ebergies (火神)   2015-01-25 17:04:00
目前我是比较倾向或许所有的 function 都该检查 inputs
作者: kwpn (ITSST)   2015-01-25 17:20:00
有时pointer可被reference取代,可以减少检查.
作者: carylorrk (carylorrk)   2015-01-25 18:10:00
我认为不需要,你的例子实作 public member func 的人有责任自己 check。
作者: wuliou (wuliou)   2015-01-25 19:23:00
我我觉得assertion就够了
作者: PkmX (阿猫)   2015-01-25 22:47:00
还是要check啊 总比程式拿到垃圾input不知道还在乱跑好多余的测试交给compiler最佳化处理就好 有问题再抓出来看
作者: Killercat (杀人猫™)   2015-01-27 08:39:00
=o= 在C++里面应该是称为private class function,BTW回到正题,我不认为private function需要检查这个除非这个parameter是从别的地方拿来的,比方说在functin里面经由别的service拿到值再塞进自己的private我们以前的作法是所谓的边界防火墙,任何外部值在onFetch的时候都要做validation,以这标准来讲的话public/protected function的parameter跟所有从外部拿值得地方(包括private内部)都会先检查一次按这标准的话是不会检查private function param的
作者: carylorrk (carylorrk)   2015-01-27 18:30:00
function 讯息用 doc 描述,怕开发粗心用 #ifdef DEBUG如果开发者自己不注意检查 input,问题会更多。input 指的是任何从外部来的不可控因子。如果在 private callee 检查,caller 却忘记检查出现漏洞的机会基本上也很大,而且对 caller 来说也是意外的错误。如果是意料中的例外,又为何不好好检查XD?不过当然不需要不代表不可以,虽然我觉得这样不代表更defensive 就是了...

Links booklink

Contact Us: admin [ a t ] ucptt.com