吟安一個(gè)字淮菠,捻斷數(shù)莖須移迫。
Two hard things :
- cache invalidate
- naming
一些個(gè)階段:
- 功能 work 的代碼
- 天花亂墜氓鄙, 炫技的代碼
- 優(yōu)雅的代碼
- 易被讀懂的代碼
代碼功底亦是一種修行璧坟, 摸索階段總是琢磨著將功能實(shí)現(xiàn)了
后面開(kāi)始接觸各大分支技術(shù)诚隙, 有了一定沉淀讶隐, 閱讀了一些源碼, 優(yōu)秀框架后
會(huì)寫(xiě)一些過(guò)度設(shè)計(jì)最楷, 天花亂墜整份, 炫技的代碼
而后大成待错, 寫(xiě)的是 優(yōu)雅口口傳頌, 易被讀懂的代碼烈评。
若將代碼比作武學(xué)火俄, 命名就是好內(nèi)功
張無(wú)忌獨(dú)步武林, 天賦異稟讲冠, 正是有九陽(yáng)神功內(nèi)功加持打底
如果你也開(kāi)始為一個(gè)命名思考了很久 瓜客?
文言翻譯講究: 信達(dá)雅, 命名類似竿开。
信
信: 信服
命名起碼應(yīng)該是準(zhǔn)確的谱仪。
如果寫(xiě)一個(gè) 回調(diào), 我們會(huì)命名為 XXXListener否彩, 然后定義 一個(gè) onXXX方法
而不會(huì)寫(xiě)一個(gè) XXXResponser, XXXReactor
命名是要傳達(dá) context 的疯攒, 要遵傳彼此的習(xí)慣。
類型 | 類名可選后綴 |
---|---|
控制類 | Processor列荔、Manager敬尺、Engine、Center贴浙、Core砂吞、Reaper |
生產(chǎn)類 | Factory、Pool崎溃、Maker蜻直、Builder |
工具類 | Util、Helper |
數(shù)據(jù)類 | Bean袁串、Request概而、Response、Query(名次表意即可) |
回調(diào)類 | Callback般婆、Trigger到腥、Listener、Handler |
監(jiān)控類 | Reporter蔚袍、Metric、Tracker |
結(jié)構(gòu)類 | Wrapper配名、Iterator啤咽、Batch |
設(shè)計(jì)模式 | Adapter、Action渠脉、Command宇整、Event、Delegate芋膘、Builder鳞青、Factory霸饲、Template、Proxy臂拓、Delegate |
以上是一些常見(jiàn)的命名習(xí)慣厚脉, 可以讓程序員心心相通
InsertCommend : 立刻明白這是一個(gè)命令模式, 是一個(gè) insert 的原子操作胶惰,整套架構(gòu)應(yīng)該是設(shè)計(jì)為一些 commend 來(lái)驅(qū)動(dòng)執(zhí)行
除了這些常用的后綴傻工, 也要注意命名的詞性講究:
方法常用動(dòng)詞, 變量 :名詞/形容詞
如果是一個(gè)開(kāi)關(guān):
這里可選表達(dá)很多孵滞, 很多情況根據(jù)語(yǔ)境中捆, 最好使用形成規(guī)范, 統(tǒng)一個(gè)人風(fēng)格坊饶,閱讀起來(lái)爽很多
if (enableAFeature) {
doAThing();
}
if (aFeatureEnable) {
doAThing();
}
if (aFeatureValid) {
doAThing();
}
if (isAFeature) {
doAThing();
}
if (useAFeature) {
doAThing();
}
if (aFeatureSwitchOn) {
doAThing();
}
if (disableAFeature) {
doAThing();
}
if (aFeatureDisable) {
doAThing();
}
if (aFeatureInValid) {
doAThing();
}
if (notAFeature) {
doAThing();
}
if (aFeatureSwitchOff) {
doAThing();
}
相比之下 switchOn 泄伪, switchOff 是 if 語(yǔ)句開(kāi)關(guān)語(yǔ)境很合適的通用表達(dá),
理論上以上都可以匿级, 但是 個(gè)人代碼風(fēng)格一致性尤為重要臂容, 習(xí)慣統(tǒng)一尤為重要。
最好形成固定的表達(dá)方式根蟹, 來(lái)寫(xiě)代碼脓杉。
請(qǐng)不要在 if 中寫(xiě)很多邏輯, 取很多反
達(dá)
達(dá): 不拘简逮,通達(dá)明白
達(dá)這里有一點(diǎn)球散, 最小化信息傳遞原則, 如果你也害怕接受很多信息散庶。
信息傳遞越多決策越難
我們的思維是 層層封裝蕉堰,暴露最少信息, 彼此隔離悲龟, 借口層業(yè)務(wù)層屋讶。
怎么在代碼中做到傳遞最少信息:
比如: project aa; module: bb; 包目錄: article/query/ 下
寫(xiě)請(qǐng)求相關(guān)Bean 類:
AABBArticleQuery
AABBArticleResponse
AABBArticleRequest
這就是浪費(fèi): 直接寫(xiě):
Query
Response
Request
project 包目錄 會(huì)傳遞很多 context
不要在命名中傳遞很多無(wú)用信息:
AABBArticleQuery
一個(gè) Bean 類, 長(zhǎng)命名须教, 導(dǎo)致的是對(duì)Bean類中成員的 調(diào)用 變得很惡心
表現(xiàn)在: 很長(zhǎng)串皿渗, 產(chǎn)生 厭煩
保持 clean , 使代碼看起來(lái) 清晰明了
雅
雅: 雅致
雅致的命名使得代碼變得文雅轻腺, 讀起來(lái)不容易 wtf
記得高中英語(yǔ)老師將莎士比亞十四行詩(shī)來(lái)作為大家晨讀英語(yǔ)的材料
Shall I compare thee to a summer's day?
Thou art more lovely and more temperate.
Rough winds do shake the darling buds of May,
And summer's lease hath all too short a date.
韻腳
枯藤老樹(shù)昏鴉乐疆,
小橋流水人家,
古道西風(fēng)瘦馬贬养。
夕陽(yáng)西下挤土,
斷腸人在天涯。
每句末尾均壓一個(gè) a 韻
寫(xiě)一個(gè)分支可以這樣:
feature_feed_fling_flavor
這個(gè)是意識(shí)形態(tài)的培養(yǎng)误算, 并不是需要在代碼中這樣做仰美。
用詞
組件迷殿, 開(kāi)源組件命名可以具像化, 具像化的實(shí)物
飛書(shū)命名: Lark 云雀
Kotlin: 一個(gè)島名: Kotlin Island
sladar: 斯拉達(dá)(Slardar)是Dota2中的一位力量英雄咖杂。(字節(jié)系組件庆寺,網(wǎng)上可搜到避免敏感不闡述)
libra: 天秤座(字節(jié)系組件,網(wǎng)上可搜到避免敏感不闡述)
仔細(xì)品味下這幾個(gè)命名翰苫, 感覺(jué)還是很妙止邮, 很有巧思。
動(dòng)植物奏窑、地點(diǎn)导披、人物名字、名畫(huà) 等
這里貼上 古希臘眾神:
古希臘眾神:
宙斯:(羅馬又稱朱庇特)Zeus埃唯,天神之父撩匕,地上萬(wàn)物的最高統(tǒng)治者。
赫拉:(羅馬又稱朱諾)Hera墨叛,宙斯的姐姐與妻子止毕。是女性的代表,掌管婚姻和生育漠趁。性格特征是嫉妒扁凛。
波塞冬:(羅馬又稱尼普東)Poseidon,海王闯传,海洋和水域的一切主宰谨朝。
得墨忒耳:(羅馬又稱賽爾斯)Demeter,大地女神甥绿,司豐收字币。
哈底斯:(羅馬又稱普魯通)Hades,冥王共缕,司掌冥界洗出,統(tǒng)治陰暗的世界。
雅典娜:(羅馬又稱米諾娃)Athena图谷,起初被視為女戰(zhàn)神翩活,后逐漸變?yōu)橹腔叟窈脱诺涑堑氖刈o(hù)女神。
阿波羅:(羅馬也稱阿波羅)Apollo蜓萄,在詩(shī)與藝術(shù)中表現(xiàn)為光明隅茎、青春和音樂(lè)之神,又是太陽(yáng)神嫉沽,與阿爾忒彌斯是孿生姐弟。
阿爾忒彌斯:(羅馬又稱狄安娜)Artemis 俏竞,月神绸硕,又是狩獵之神堂竟、婦女之神,是女性純潔的化身玻佩,與阿波羅是孿生姐弟出嘹。
狄俄尼索斯:(羅馬又稱巴克科斯)Dionysus,酒神與狂飲歡樂(lè)之神咬崔。
阿佛洛狄德:(羅馬又稱維納斯)Aphrodite税稼,愛(ài)情女神。她的忠實(shí)隨從小愛(ài)神愛(ài)羅斯Eros(羅馬又稱邱比特)手持弓箭垮斯,被其金箭射中者即與隨后見(jiàn)到的第一個(gè)人墜入情網(wǎng)郎仆,而被其鉛箭射中者會(huì)對(duì)另一個(gè)人產(chǎn)生莫名的仇恨。
赫斐斯托斯:(羅馬又稱烏爾肯)Hephaestus兜蠕,火神和鍛冶之神扰肌。
阿瑞斯:(羅馬又稱瑪爾斯)Ares ,戰(zhàn)神熊杨。
星座
水瓶座 ? Aquarius Water Carrier / Water Bearer
雙魚(yú)座 ? Pisces Fish / Fishes
牧羊座 ? Aries Ram
金牛座 ? Taurus Bull
雙子座 ? Gemini Twins
巨蟹座 ? Cancer Crab
獅子座 ? Leo Lion
處女座 ? Virgo Virgin
天秤座 ? Libra Scales / Balance
天蠍座 ? Scorpio Scorpion
射手座 ? Sagittarius Archer
摩羯座 ? Capricorn Goat / Sea Goat
參考: https://juejin.cn/post/6995342820512890893#heading-14
最后曙旭, 命名是一個(gè)過(guò)程,是 life long journey 晶府。