Code Review 那點事兒

這周也幫其他人看了看代碼锌历,發(fā)現(xiàn)大家對一些規(guī)范不以為然,所以我想借這個機會聊聊峦筒。代碼規(guī)范的重要性說的太多了究西,我來說說代碼不規(guī)范的危害。

為什么要統(tǒng)一勘天、規(guī)范的命名

舉個例子怔揩,我們有公寓表 suites捉邢、房間表 roomsrooms 里有個關(guān)聯(lián)到公寓的字段叫 suite_id商膊。試問把 suite_id 改成 house_id 是否合理伏伐?

單從這個例子來說,好像并無不妥晕拆,suitehouse 都能表示公寓的意思藐翎。

但是如果我告訴你我們現(xiàn)在還有額外的兩張表:

  • house_resources 信息采集端的外部房源,是外部房源進入收房系統(tǒng)的入口
  • resource_house 樓盤字典中的公寓实幕,沉淀下來的外部房源吝镣,暫定

這個時候,假如你是非直接開發(fā)人員昆庇,比如其他工程師末贾、需要看數(shù)據(jù)庫的運營、財務(wù)或是 BI整吆,你第一感覺拱撵,rooms 表的 house_id 是到哪個表的關(guān)聯(lián)?我覺得猜到 house_resources 的人會多一些表蝙,但如果是 suite_id拴测,再輔之以注釋,就會好很多府蛇。可即便如此集索,BI 同學(xué)也經(jīng)常過來問字段的關(guān)系。汇跨。

這個例子想說明务荆,當(dāng)你的系統(tǒng)已經(jīng)復(fù)雜到無法靠簡單的 “望文生義” 去識別&區(qū)分時,你就得靠統(tǒng)一的規(guī)范去保證大家不會亂扰法。我們約定所有的 xx_id 都是到 xx 表的關(guān)聯(lián)蛹含,大家就不會再困惑。

如果只是自己私下寫一個二三十行的小腳本塞颁,你用 abcdefg 命名沒啥問題浦箱,但在這里,你 hold 不住的祠锣。

信息采集端的幾個表前綴都是 house_resource 酷窥,渠道就是house_resource_users ,渠道費就是 house_resource_bills 伴网,也算一個識別標(biāo)記蓬推。其實從更大的角度來說,房源和客源的跟進澡腾,也都該放一起沸伏,歷史遺留問題糕珊。。

為什么要抽象和封裝

思考:為什么我和孟德都沒有參與過合同毅糟、活動的開發(fā)红选,但都能在幾分鐘內(nèi)添加一個可以自定義規(guī)則的新活動?答案是姆另,因為現(xiàn)有的封裝已經(jīng)滿足現(xiàn)階段的需要喇肋,我們無須關(guān)注整個實現(xiàn)邏輯,只需要改一個文件里的一小段(其實就一個 array)就能實現(xiàn)了迹辐。

如果之前沒有做這些工作蝶防,那么市場部今天下午告訴你12點前要上一個活動,你要從頭熟悉整個代碼明吩,要熟悉每個節(jié)點的處理方式间学。恐怕你就是不吃飯不睡覺也來不及贺喝。

其他的系統(tǒng)里菱鸥,遇到的問題也是一樣的:

  • 做支付平臺,能否在不涉及業(yè)務(wù)邏輯的情況下躏鱼,快速添加一個支付平臺
  • 做分期平臺,能否在不涉及業(yè)務(wù)邏輯的情況下殷绍,快速添加一個分期公司
  • 做房源對接染苛,能否在不涉及業(yè)務(wù)邏輯的情況下,快速添加一個信息平臺
  • 做供應(yīng)商管理主到,能否在不涉及業(yè)務(wù)邏輯的情況下茶行,快速添加一個供應(yīng)商

如果你為了省一天的時間,在將來卻給每個人加了一天的工作量登钥,那么你的代碼就是有毒的畔师。

誠然有很多情況,你并不能預(yù)測將來發(fā)生的情況牧牢,但是按照軟件工程的原則看锉,你應(yīng)該留有擴展的空間。如果其他人已經(jīng)幫你預(yù)料到接下來會有一個類似的東西時塔鳍,你就必須考慮了伯铣。

小故事,退轉(zhuǎn)換上線前的一個晚上轮纫,10點多腔寡。我在那里吐槽又要改需求,高靖聽到了就跑出來跟我說掌唾,你們的系統(tǒng)要做的模塊化放前,在碰到這種情況的時候就能快速組合幾個模塊達到他們的目的忿磅,我們以前巴拉巴拉省略500字。凭语。

我當(dāng)時一陣驚訝贝乎,一個不寫代碼的人都懂這個道理,可為什么我們這些“專業(yè)人員”卻要對幾十年的行業(yè)經(jīng)驗嗤之以鼻叽粹。

為什么會有必讀源碼

必讀源碼最大的用處就是讓新人知道這個系統(tǒng)是怎么運作的览效。

當(dāng)時我挑了好多個文件才決定選用這幾份代碼,有幾個考慮:

  • 里面包含了laravel虫几、orm 的基本用法和文檔锤灿,能讓你快速上手
  • 有我們沉淀下來的各種輪子,能讓你快速實現(xiàn)常用的功能
  • 有我們最一般最一般的產(chǎn)品設(shè)計規(guī)范辆脸,避免你為了達到某一個效果費勁腦汁

看這三份代碼花不了個把小時但校,但是不看呢,有幾個人都踩了坑啡氢,其結(jié)果是本來幾十行代碼的事状囱,花了幾百行才搞完。費時費力還有坑

分享兩例小故事倘是,

  • 有天雷雷一激動說我們能不能把完成標(biāo)成紅色(好像是喜慶的意思)亭枷,我還沒開口,旁邊一個銷售就說我們習(xí)慣綠色了搀崭,然后我才說我們把紅色作為警告的意思叨粘。

  • 還有我們的列表里按鈕一般都在首列,結(jié)果就是無論第一列是“編輯”還是一個圖標(biāo)瘤睹,大家都知道那個修改的地方升敲。

紅和綠、行首或行尾轰传,都不是什么原則問題驴党。但是在現(xiàn)有環(huán)境下,隨機改動就增加了其他人的識別和使用成本获茬,那就屬于不合理的設(shè)計港庄。

系統(tǒng)內(nèi)部的 Error、Flash(小提示)锦茁、Confirm 以及 DataEditor 的錯誤提醒攘轩,都是統(tǒng)一的組件,即能提高你的開發(fā)效率码俩,也能保證絕大多數(shù)人快速上手你的作品度帮。

總結(jié)就是,強調(diào)代碼規(guī)范,不是閑的蛋疼去滿足個人的代碼潔癖笨篷,而是不想讓大家再去踩之前已經(jīng)踩過的坑瞳秽,提升整個團隊的效率。

至于什么是代碼潔癖率翅,我可以分享一下我的一些潔癖:

  • 我不喜歡一大行從半截折開练俐,我自己設(shè)的最大寬度是160,后來妥協(xié)于 psr 規(guī)范冕臭,改成了120腺晾,出現(xiàn)了很多我覺得奇丑無比的折行。而且經(jīng)過“科學(xué)試驗”辜贵,我認為我們的項目設(shè)140比較合適悯蝉,為此和張衛(wèi)還爭論過。托慨。
  • 我寫 json鼻由,key/val 之間的冒號我要對齊,工具不支持我就手動對齊厚棵,但是為了統(tǒng)一蕉世,我也放棄了。絕大多數(shù)工具是冒號左邊有空格婆硬,右邊卻沒空格狠轻,我也覺得丑,但柿祈。哈误。你懂的。
  • 一個表達式a + b*c躏嚎,仔細看,+ 兩邊有空格菩貌,但 * 兩邊沒有空格卢佣,這是 Go 官方fmt 工具的標(biāo)準格式,它會把優(yōu)先級高的運算放一起箭阶,低的才有空格虚茶。在接觸 Go 之前,我自己其實也這么干仇参,特長的表達式嘹叫,幾個空格、幾對括號的情況都有過诈乒。就為了閱讀清晰罩扇。
  • 有貝原名 uubee ,我在后臺都寫的 Ubee,是因為首字母要大寫喂饥,我覺得 Uubee 又極丑無比消约,所以就省了 u。好在有 namespace 擋著员帮,應(yīng)該不會干擾其他人或粮。

所以,不要覺得我是在故意刁難捞高,為了遵循psr 規(guī)范我已經(jīng)很委屈了氯材。。

其實說這些東西硝岗,并不是因為水平多么厲害才提氢哮,這些規(guī)范都和技術(shù)本身無關(guān)。提到的東西辈讶,也都是一路顛簸的血淚教訓(xùn)命浴。誰沒被自己的代碼惡心過幾回?

今天這些更多的是想說為什么要好好設(shè)計你的代碼贱除,至于怎么設(shè)計生闲,以后一點點的整理吧 _

最后

我堅信,寫代碼不是砌磚月幌,不是畫條線放塊磚就完成任務(wù)了碍讯。奧對了,即便是砌磚工人扯躺,發(fā)現(xiàn)有塊磚爛掉了也會毫不猶豫的扔掉捉兴,也不會以“趕工期”為由說“就這樣吧,反正又不會塌”录语。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末倍啥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子澎埠,更是在濱河造成了極大的恐慌虽缕,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒲稳,死亡現(xiàn)場離奇詭異氮趋,居然都是意外死亡,警方通過查閱死者的電腦和手機江耀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門剩胁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人祥国,你說我怎么就攤上這事昵观。” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵索昂,是天一觀的道長建车。 經(jīng)常有香客問我,道長椒惨,這世上最難降的妖魔是什么缤至? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮康谆,結(jié)果婚禮上领斥,老公的妹妹穿的比我還像新娘。我一直安慰自己沃暗,他們只是感情好月洛,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著孽锥,像睡著了一般嚼黔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惜辑,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天唬涧,我揣著相機與錄音,去河邊找鬼盛撑。 笑死碎节,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的抵卫。 我是一名探鬼主播狮荔,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼介粘!你這毒婦竟也來了殖氏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤姻采,失蹤者是張志新(化名)和其女友劉穎受葛,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體偎谁,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年纲堵,在試婚紗的時候發(fā)現(xiàn)自己被綠了巡雨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡席函,死狀恐怖铐望,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤正蛙,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布督弓,位于F島的核電站,受9級特大地震影響乒验,放射性物質(zhì)發(fā)生泄漏愚隧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一锻全、第九天 我趴在偏房一處隱蔽的房頂上張望狂塘。 院中可真熱鬧,春花似錦鳄厌、人聲如沸荞胡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泪漂。三九已至,卻和暖如春歪泳,著一層夾襖步出監(jiān)牢的瞬間萝勤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工夹囚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纵刘,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓荸哟,卻偏偏與公主長得像假哎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鞍历,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理舵抹,服務(wù)發(fā)現(xiàn),斷路器劣砍,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,106評論 25 707
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法惧蛹,類相關(guān)的語法,內(nèi)部類的語法刑枝,繼承相關(guān)的語法香嗓,異常的語法,線程的語...
    子非魚_t_閱讀 31,630評論 18 399
  • 和平像云,是和平主義者帶來的嗎锌雀? 今天的羅輯思維專欄,講了一戰(zhàn)后二戰(zhàn)前迅诬,英國首相鮑德溫的遭遇腋逆。 不過我更關(guān)注的是,在經(jīng)...
    水平生閱讀 438評論 0 0
  • 朋友說:“在大數(shù)據(jù)時代侈贷,經(jīng)驗的作用已降到最谐颓浮;在機器的轟鳴中铐维,手工制作將被代替柬泽。”在行走的路上嫁蛇,認識了很多用匠人精...
    惠風(fēng)和暢806閱讀 735評論 0 2