如何写一个好的方法-读Clean Code 有感
?
針對方法,文中提到了幾個(gè)規(guī)則,我認(rèn)為比較有價(jià)值的幾個(gè)列在下面。
1.? ? ? 短小。好的方法是只做一件事情。
? ? ? ? 那么如何判斷一個(gè)方法是做了一件事情呢?根據(jù)Clean Code的描述,是指的方法所作的事情在同一個(gè)抽象層級(jí)上。比如?Render page with setup and teardown,這個(gè)方法是在Render?一個(gè)page,它有兩個(gè)步驟,這兩個(gè)步驟又是在同一個(gè)抽象層級(jí)上,所以分別各為一個(gè)函數(shù)。
?renderPageWithSetupAndTearDown(){
????????????????….
????????????????renderPageWithSetup();
???????????????renderPageWithTearDown();
….
}
還有另一個(gè)原則,那就是看看函數(shù)是否可以再進(jìn)行拆分。
?我的一個(gè)實(shí)踐就是從業(yè)務(wù)角度描述這個(gè)函數(shù)所作的事情,如果一句話能夠描述清楚,那么它所作的就是一件事情。如果描述不清楚,那就需要進(jìn)行拆分。
??
2.? ? ? ??不要重復(fù)自己
?
3.? ? ? ??要有一個(gè)好名字,能夠準(zhǔn)確描述它所要表的業(yè)務(wù)含義。
最近有這樣一個(gè)場景:
收到一個(gè)請求,檢查請求中攜帶的ticketId是否在數(shù)據(jù)庫存在,如果存在需要?jiǎng)h除,如果不存在將請求導(dǎo)航到登錄頁面。
?從業(yè)務(wù)角度來講,是檢查請求中TicketId是否合法,合法就將請求中的user放到Session中隨后使其其無效,否則將請求導(dǎo)航到登錄頁面。而從實(shí)現(xiàn)角度是檢查數(shù)據(jù)庫里是否存在這個(gè)ticketid,如果存在就刪除。這個(gè)方法一開始也是這么命名的,CheckAndRemove。很明顯但我們看到這方法的時(shí)候只能知道這個(gè)方法是在檢查刪除,但是針對什么樣的場景和上下文呢,一點(diǎn)都沒有得到。這個(gè)從實(shí)現(xiàn)角度的命名不能反映它真正想要表達(dá)的業(yè)務(wù)邏輯,后來我們將它改為Validateticket。
ValiateTicket(Guid ticketId){
????????????????If(IsTicketValid()){
????????????????????????????????PutUserInSessionAndDeactivateTicket();
}
?redirectToLogin();
}
?
肯定還有更好的命名。不過這個(gè)名字相對checkAndRemove更能表達(dá)一些業(yè)務(wù)的含義,在重構(gòu)的時(shí)候就不至于迷失了方向。我們可以在有了新的想法的時(shí)候再對其進(jìn)行重構(gòu)。
?
轉(zhuǎn)載于:https://www.cnblogs.com/adudu/archive/2011/09/01/2162033.html
總結(jié)
以上是生活随笔為你收集整理的如何写一个好的方法-读Clean Code 有感的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Visual Studio常用小技巧[备
- 下一篇: “豆瓣酱”之用户,场景,功能