tag:blogger.com,1999:blog-1298974142445162186.post1253949795916682097..comments2024-03-19T15:58:12.198+08:00Comments on 搞笑談軟工: 讀Clean Code有感:例外處理程式重構篇Teddy Chenhttp://www.blogger.com/profile/02066842119056439711noreply@blogger.comBlogger9125tag:blogger.com,1999:blog-1298974142445162186.post-84614559878420468352013-05-09T17:50:47.068+08:002013-05-09T17:50:47.068+08:00感謝回復,也請T大繼續在軟工上造福大家感謝回復,也請T大繼續在軟工上造福大家Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-1298974142445162186.post-42228517634967948022013-05-09T16:08:20.183+08:002013-05-09T16:08:20.183+08:00我在部落格上面有寫了好幾篇例外處理重構的文章,您有興趣也可以參考一下。我在部落格上面有寫了好幾篇例外處理重構的文章,您有興趣也可以參考一下。Teddy Chenhttps://www.blogger.com/profile/02066842119056439711noreply@blogger.comtag:blogger.com,1999:blog-1298974142445162186.post-29759507239741330832013-05-09T16:07:26.136+08:002013-05-09T16:07:26.136+08:00以前會怕說 method 太短,但近來慢慢覺得可讀性還是比較重要。短一點的 method 責任比較清...以前會怕說 method 太短,但近來慢慢覺得可讀性還是比較重要。短一點的 method 責任比較清楚,而且可以用 method 名稱達到『說明程式目的』的效果,也比較好理解與維護。Teddy Chenhttps://www.blogger.com/profile/02066842119056439711noreply@blogger.comtag:blogger.com,1999:blog-1298974142445162186.post-15064739846704845232013-05-09T16:05:02.783+08:002013-05-09T16:05:02.783+08:00謝謝,裡外處理是Teddy的『法定專長啊』 XD。謝謝,裡外處理是Teddy的『法定專長啊』 XD。Teddy Chenhttps://www.blogger.com/profile/02066842119056439711noreply@blogger.comtag:blogger.com,1999:blog-1298974142445162186.post-40931183144999764532013-05-09T16:04:24.082+08:002013-05-09T16:04:24.082+08:00我最喜歡別人來發表不同的意見...XD
(1) single responsibility 原本是...我最喜歡別人來發表不同的意見...XD<br /><br />(1) single responsibility 原本是說一個『類別』只做一件事情 (或是你只會因為一個原因去修改一個類別),把這個原理套到 method 身上,我認為也是適用的。這個原則難就難在『如何定義什麼才算一件事情的範圍』。文中 fetchRawBytesAndSetupMessageV4() 這個例子,從例外處理的角度,剛好發現這個 method 做了兩件事(a)讀 message 的長度(b)讀 message 的 body。這兩件事都可能會失敗(failure),也都會丟出例外。你可以試看看,相同的程式碼如果只用一個很大的 try statement 包起來,例外處理會變得困難很多。<br /><br />(2) 你指的 new exception是說『new InvalidPacketException』嗎?如果只丟出 IOException,caller 並不知道 fetchRawBytesAndSetupMessage() 失敗的原因,最後這個 IOException 傳到 UI 層(或是被寫到 log),也很難分析錯誤原因。從 fetchRawBytesAndSetupMessage() 的 caller 角度來看,收到一個 InvalidPacketException,讓 caller 可以針對『封包格式錯誤』加以處理,例如如果是封包格式錯誤,可以要求 retry,或是顯示『對使用者已意義的錯誤訊息』。<br /><br />PS1:我將例外處理分成三個等級(RL1, RL2, RL3),如果是 RL1等級,的確是不需要丟出 InvalidPacketException。在我的例子裡面是為了讓 caller 有機會可以達到 RL3,(就是想要知道『真的死在哪裡,以及死掉的原因』),所以需要丟出一個比較明確的 InvalidPacketException。<br /><br />PS2:今年(2013)7月6、7(六、日)我會開一班『例外處理設計與重構實作班』課程,對例外處理有興趣歡迎來報名參加 ^_^。Teddy Chenhttps://www.blogger.com/profile/02066842119056439711noreply@blogger.comtag:blogger.com,1999:blog-1298974142445162186.post-91728204889182163322013-05-09T15:39:49.739+08:002013-05-09T15:39:49.739+08:00有一點點疑問想請教
1. single responsibility 與 exception 是兩...有一點點疑問想請教<br /><br />1. single responsibility 與 exception 是兩碼子的事,用exception來觀察single responsibility,我認為有很大的機會陷入盲點,因為 exception很好觀察,但是single responsibility卻不是<br /><br />2. 包 new exception 感覺沒有必要性,除非真的想知道死在哪,通俗點講,像是在脫褲子放屁?<br /><br />使用匿名發表是因為功力還不夠,但抱持不同觀點的一點點拙見,也請 teddy大 賜教 :)Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-1298974142445162186.post-77838328960969074612013-05-09T09:51:26.746+08:002013-05-09T09:51:26.746+08:00寫得很不錯呢寫得很不錯呢施佑達https://www.blogger.com/profile/17034670626210321957noreply@blogger.comtag:blogger.com,1999:blog-1298974142445162186.post-85876901394647678762013-05-09T08:46:37.421+08:002013-05-09T08:46:37.421+08:00自己最近寫的程式也是覺得method越單純越好自己最近寫的程式也是覺得method越單純越好Spirit Duhttps://www.blogger.com/profile/03382985523817809635noreply@blogger.comtag:blogger.com,1999:blog-1298974142445162186.post-45824583127868550602013-05-09T00:28:19.124+08:002013-05-09T00:28:19.124+08:00很不錯的重構著眼點 :)很不錯的重構著眼點 :)Rangi Linhttps://www.blogger.com/profile/07011570454409750197noreply@blogger.com