這一直困擾我一段時間了。讓我們想象一個表示資源的類,爲了能夠使用這個資源,需要先調用它的'Open'方法,否則將拋出InvalidOperationException異常。即使代碼不會造成危害,代碼是否應該阻止邏輯上無效的呼叫?
我的代碼還應該檢查是否有人試圖打開已打開的資源,或關閉已關閉的資源?
代碼應該防止邏輯無效的調用,即使不會造成危害嗎?
我認爲這種編程方式有助於在另一側編寫更好的代碼,但我覺得我可能會承擔過多的責任並影響可重用性。
你們認爲什麼?
編輯:
我不認爲這可以被稱爲防禦式編程,因爲它不會讓一個可能不好用要麼打滑,另外InvalidOperationException異常將被拋出。
那麼不是真的。當你期望可能的濫用(這意味着當你與界面另一側的unknwon(ab)用戶進行交互)時,使用防禦性編程來防止崩潰。但是,OP詢問open是否應該處理濫用,因爲什麼也沒有發生。我不同意 - 應該告知用戶他的代碼有問題(無論是錯誤代碼,斷言還是例外)。 總之:處理(使用防禦性編程),但通知。吞下或崩潰,API用戶會討厭你。 – MaR 2009-12-14 12:38:53
我沒有說任何關於吞嚥錯誤的東西。該應該意識到發生的錯誤並採取適當的行動。 – Ikke 2009-12-14 12:56:42
有趣的是,我在哪裏可以找到更多有關這是一個不好的做法的信息? – Trap 2009-12-14 22:37:48