作者在這一話題中討論編程中一個(gè)非常困難和痛苦的點(diǎn)——命名,并對(duì)命名給出了以下建議:
命名要有意義,且要準(zhǔn)確的表達(dá)契約
同一個(gè)項(xiàng)目中命名要有一致性,根據(jù)項(xiàng)目自己的詞匯表命名
及時(shí)維護(hù)命名
命名要有意義,且要準(zhǔn)確的表達(dá)契約
這是命名最基本的要求,也是命名讓人頭大的原因。好的命名能夠精準(zhǔn)的表達(dá)契約,大大的提高代碼的可讀性,減少其他人的閱讀成本。
我的習(xí)慣和認(rèn)知是變量用”形容詞+名詞“,方法用”動(dòng)賓短語(yǔ)“。我覺(jué)得難點(diǎn)在于:要用最精悍的詞匯,準(zhǔn)確的表達(dá)變量或函數(shù)的意義。比如我上周遇到一個(gè)需求:用定時(shí)任務(wù)掃描滿足需求的訂單,為訂單生成NtJob并計(jì)費(fèi)。?這里的難點(diǎn)是對(duì)于這個(gè)滿足條件的sr的描述,因?yàn)閺牟樵兊慕嵌葋?lái)說(shuō),它要滿足很多條件才能被查詢出來(lái)。而我不可能把這些條件都表達(dá)在命名中,這樣名稱就太長(zhǎng)了,也不利于閱讀;可是我也不想用Specific 這樣的詞匯來(lái)替代。最后我參考了這類sr在業(yè)務(wù)上的含義,將這個(gè)定時(shí)任務(wù)命名成了:LtsWorldexDeliveredSrRelatedNtJobWrapper。即便如此,它還是沒(méi)有表達(dá)出“已關(guān)聯(lián)ntJob 的sr不滿足條件”和“ntJob自動(dòng)算費(fèi)”的含義。
同一個(gè)項(xiàng)目中命名要有一致性,根據(jù)項(xiàng)目自己的詞匯表命名
同一個(gè)項(xiàng)目中對(duì)特定含義的業(yè)務(wù)對(duì)象是有指定含義的,比如Revenue 是收益,Cost指指出。而“費(fèi)用”就是中性詞匯。這些項(xiàng)目中的特定詞匯是對(duì)團(tuán)隊(duì)有特殊意義的術(shù)語(yǔ),記得在剛?cè)肼毜臅r(shí)候,聽(tīng)brief 時(shí)就常常會(huì)因?yàn)槁?tīng)不懂特殊名詞云里霧里。如果新人Wiki 中能有這樣的項(xiàng)目術(shù)語(yǔ)表,相信也會(huì)對(duì)新人融入團(tuán)隊(duì)有幫助。
及時(shí)維護(hù)命名
及時(shí)維護(hù)命名說(shuō)起來(lái)簡(jiǎn)單,實(shí)操時(shí)卻往往容易忽視,因?yàn)榇蠹以诟膭?dòng)代碼時(shí)往往會(huì)更多的關(guān)注功能的實(shí)現(xiàn),而命名又是不改也不影響功能的部分。尤其是改動(dòng)到一個(gè)偏底層的方法,會(huì)影響這個(gè)flow 的功能時(shí),會(huì)忘記更改整個(gè)Flow的名字。比如下面這個(gè)例子:LtsBasfLowerCostTriggerWrapper。 這個(gè)flow 最早是為了Basf 壓車費(fèi)命名的,但是現(xiàn)在這個(gè)費(fèi)用叫“待時(shí)費(fèi)”。在需求發(fā)生變化時(shí),沒(méi)有及時(shí)的去改名字,導(dǎo)致它偏離了業(yè)務(wù)含義。