[問題] 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