2008年3月27日 星期四

好文推薦︰Offensive Coding

你程式常常要寫得非常具有防禦性(defensive)嗎?這可能是因為,你在跟攻擊性(offensive)的程式碼打交道的關係。

需要做防禦性的動作,是因為我們跟具攻擊性的程式碼打交道。這些防禦動作都是為了避免呼叫端傳錯誤的參數,所以事先做預防的動作。但是,這些邏輯嚴重地污染程式的簡潔性,讓程式碼的關鍵邏輯掩蓋在大量防禦性檢查中。更重要的是,掩蓋問題會讓除錯工作變困難。(如果根本不該傳null進來,一旦真的傳null程式碼又把這個錯誤吃掉,造成的後果可能更難預料。)我們寫程式有一個重要的原則與技巧,就是讓錯誤發生時要掛在第一現場,而不是經過重重容錯的包裝掩飾,最後在不相關的點上爆發,造成除錯的困難。

所以,傳null以及字串前後有空格這類問題,應該在源頭防止,而不是在接收端判斷。例如DB就應該將欄位設為禁止null,在頁面剛送出資料時就先清除不必要的空格。而不是在接收端做各種判斷。

請參考這篇文章

沒有留言: