国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

你見(jiàn)過(guò)的“垃圾”項(xiàng)目是這樣子么?

開(kāi)發(fā) 項(xiàng)目管理
我相信每一位程序員最怕遇到代碼質(zhì)量堪憂的項(xiàng)目,畢竟增加一個(gè)同樣的功能,在一個(gè)代碼整潔、清晰的項(xiàng)目里與在一個(gè)代碼混亂不堪的項(xiàng)目里,效率和質(zhì)量上的差距達(dá)到一個(gè)數(shù)量級(jí)一點(diǎn)也不奇怪。

[[387241]]

本文轉(zhuǎn)載自微信公眾號(hào)「跨界架構(gòu)師」,作者Zachary。轉(zhuǎn)載本文請(qǐng)聯(lián)系跨界架構(gòu)師公眾號(hào)。

大家好,我是Z哥。

我相信每一位程序員最怕遇到代碼質(zhì)量堪憂的項(xiàng)目,畢竟增加一個(gè)同樣的功能,在一個(gè)代碼整潔、清晰的項(xiàng)目里與在一個(gè)代碼混亂不堪的項(xiàng)目里,效率和質(zhì)量上的差距達(dá)到一個(gè)數(shù)量級(jí)一點(diǎn)也不奇怪。

但是殘酷的現(xiàn)實(shí)是,“垃圾項(xiàng)目”到處存在,哪怕是大廠里也不例外。畢竟,沒(méi)有人天生就能寫(xiě)出無(wú)比優(yōu)雅的代碼,都是通過(guò)寫(xiě)“垃圾代碼”一步一步成長(zhǎng)起來(lái)的,唯一的區(qū)別可能就是成長(zhǎng)的速度不同罷了。

一個(gè)項(xiàng)目如果運(yùn)氣好,未來(lái)成為受重視的項(xiàng)目,那么它還有機(jī)會(huì)擺脫不少的“垃圾代碼”,但是如果沒(méi)那么好運(yùn),那就苦了后來(lái)人了。

所以,如果你是一位新人程序員,那么我得提醒你,一定要有一個(gè)合理的預(yù)期,這個(gè)合理的預(yù)期就是——與垃圾代碼長(zhǎng)期為伴。因此,如果你以后因?yàn)橛龅?ldquo;垃圾代碼”而破口大罵,這是不講“碼德”的。什么?那么索性跳槽?你怎么能確保下一個(gè)接手的項(xiàng)目會(huì)更好?

在Z哥看來(lái),一個(gè)項(xiàng)目走向“垃圾”、人見(jiàn)人棄的地步,原因只有一個(gè),代碼垃圾,而什么樣的代碼才算垃圾代碼?這就多了,我與你分享一些常見(jiàn)的。

01 組件顆粒度過(guò)大

現(xiàn)在三層架構(gòu)基本已經(jīng)成為一個(gè)基礎(chǔ)共識(shí)了,只要不是太古老的項(xiàng)目,不太會(huì)存在UI、業(yè)務(wù)邏輯、數(shù)據(jù)操作寫(xiě)在一起的情況。(雖然架構(gòu)設(shè)計(jì)方面的后起之秀很多,但是三層架構(gòu)因?yàn)楦菀桌斫猓允袌?chǎng)占有率依舊最高)

但是三層架構(gòu)的每一層又該如何進(jìn)一步細(xì)分,如何建模?還沒(méi)有能夠成為共識(shí)的統(tǒng)一標(biāo)準(zhǔn)或者最佳實(shí)踐出來(lái)。

所以,很多項(xiàng)目在經(jīng)歷了一年以上的業(yè)務(wù)發(fā)展和變更后,業(yè)務(wù)邏輯層往往率先淪陷,開(kāi)始出現(xiàn)大對(duì)象,成為開(kāi)發(fā)效率的瓶頸。

近幾年的火熱的領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)其實(shí)已經(jīng)開(kāi)始深入到每一層的內(nèi)部該如何劃分上了。但是離達(dá)到共識(shí)還有很長(zhǎng)的路要走。

02 API數(shù)量泛濫

有一些經(jīng)驗(yàn)的程序員們會(huì)用一招來(lái)讓自己在垃圾代碼中游走自如。這招就是盡量通過(guò)“增加”的方式實(shí)現(xiàn)功能而不是“修改”歷史代碼。

這種方式的確能避開(kāi)很多“屎坑”,但是從長(zhǎng)期來(lái)看,這大概率是在創(chuàng)造新的“屎坑”。

某些核心class里幾百個(gè)function,成千上萬(wàn)行的代碼就是這么來(lái)的。

03 低內(nèi)聚、高耦合

「高內(nèi)聚、低耦合」是軟件開(kāi)發(fā)領(lǐng)域的一條黃金法則,相信每一位程序員都知道。但是現(xiàn)實(shí)是,很多項(xiàng)目都存在低內(nèi)聚、高耦合的問(wèn)題。

出現(xiàn)這個(gè)問(wèn)題倒也不是說(shuō)是由于大量的重復(fù)代碼導(dǎo)致,而是過(guò)度的追求消除重復(fù)代碼。盲目的追求減少重復(fù)代碼,自然會(huì)導(dǎo)致代碼被過(guò)度拆分,原本一個(gè)完整的業(yè)務(wù)處理清清楚楚,硬生生被拆分到多個(gè)function里去。

復(fù)用當(dāng)然是好的,但應(yīng)該有個(gè)前提條件:不增加系統(tǒng)復(fù)雜度的情況下的復(fù)用。如果不這樣做,損害了穩(wěn)定性,增加了復(fù)雜性,還會(huì)造成代碼可讀性降低。

04 業(yè)務(wù)邏輯和程序處理邏輯糾纏

Z哥認(rèn)為,代碼的作用其實(shí)就分為兩種,業(yè)務(wù)邏輯和程序處理邏輯。前者體現(xiàn)的是這個(gè)軟件的現(xiàn)實(shí)價(jià)值,后者則是讓軟件能在計(jì)算機(jī)上run起來(lái)必不可少的部分。

程序處理邏輯主要就是各種數(shù)據(jù)的存取、dao操作、序列化/反序列化、緩存操作,以及異常處理、參數(shù)和返回值準(zhǔn)備等等。

如果程序的處理邏輯與業(yè)務(wù)邏輯混在一起,就好比芝士拌飯,都黏在一起,隨便改一小點(diǎn)功能就扯出一大段代碼要看。

更加可怕的是,如果里面還充斥著大量Magic Number,比如if (errCode == 50001) 。那你得忍住不要罵人。

05 又長(zhǎng)又寬的if else

這點(diǎn)其實(shí)長(zhǎng)期以來(lái)就是一直被人詬病的陋習(xí)。但是這又幾乎是每一門(mén)編程語(yǔ)言都有的語(yǔ)法,那么問(wèn)題到底在哪里?

因?yàn)椴还苁莍f else也好,還是switch case也好,其實(shí)是一種硬編碼的方式。這就會(huì)導(dǎo)致它不容易被修改。

想象一個(gè)場(chǎng)景:某個(gè)枚舉增加了一個(gè)新的值,這個(gè)時(shí)候你需要將原先判斷這個(gè)枚舉的所有if else都檢查一遍,以確保新增的業(yè)務(wù)能正確執(zhí)行。真正做過(guò)這件事的人相信有過(guò)深刻地感受,如果這個(gè)枚舉被用到幾十上百的地方,檢查一遍外加弄懂上下文,估計(jì)至少半天時(shí)間就沒(méi)了,而且很有可能最終還是漏改或者改錯(cuò)什么。

以上就是一些常見(jiàn)的垃圾代碼的樣子。那么,在你的工作中如果遇到充滿垃圾代碼的垃圾項(xiàng)目該怎么辦呢?從流派上說(shuō),主要有三大流派,激進(jìn)派、保守派、重頭再來(lái)派。

保守派的做法,主要是從局部修改問(wèn)題代碼入手。比如前面提到的這些“垃圾”代碼,常見(jiàn)的處理思路是以下這些。

01 業(yè)務(wù)層禁止層內(nèi)依賴

你可以留意觀察一下,業(yè)務(wù)層內(nèi)的內(nèi)部相互依賴,是導(dǎo)致代碼高耦合低內(nèi)聚的主要推手。因?yàn)檫@會(huì)導(dǎo)致一個(gè)業(yè)務(wù)方法體內(nèi)部經(jīng)常容易囊括一些不在當(dāng)前業(yè)務(wù)邏輯內(nèi)的分支邏輯,使得每個(gè)方法的耦合逐漸提高。

所以,禁止層內(nèi)依賴對(duì)降低耦合有立竿見(jiàn)影的效果,這也是領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)提倡專(zhuān)門(mén)拉出一個(gè)Application Layer來(lái)協(xié)調(diào)各個(gè)Domain之間的交互的目的。

02 將大函數(shù)拆小

讓代碼恢復(fù)健康,最難啃的骨頭就是那些動(dòng)輒幾百上千行的函數(shù)。保守派雖然避免了大量應(yīng)用新框架進(jìn)行替換所帶來(lái)的工作量。但是這個(gè)最難啃的骨頭是避不開(kāi)的坎,否則所謂的代碼重構(gòu)只是隔靴搔癢而已,并沒(méi)有多大效果。

03 減少代碼

減少代碼最高效的方式是調(diào)用新的系統(tǒng)api或者使用新的框架或者工具。他們可以大批量的代替原先冗余的「程序處理邏輯」。只是對(duì)保守派來(lái)說(shuō),他們會(huì)更謹(jǐn)慎地使用新的框架。畢竟,運(yùn)用一個(gè)新框架可是一個(gè)不小的手術(shù)。

激進(jìn)派與保守派最大的區(qū)別在于,他們更傾向于使用新的框架、工具甚至是新的技術(shù)棧、編程語(yǔ)言來(lái)解決問(wèn)題。不過(guò)在我看來(lái),這些新東西,可能在短期的確能解決眼前的問(wèn)題,但是這些問(wèn)題到底是新技術(shù)解決的?還是因?yàn)槭褂眯录夹g(shù)而大量重寫(xiě)“新鮮”的代碼解決的?值得打上一個(gè)問(wèn)號(hào)。

最后的重頭再來(lái)派很有意思。他們認(rèn)為老項(xiàng)目已經(jīng)沒(méi)救了,必須重做才行,這是比激進(jìn)派更激進(jìn)的一個(gè)流派。

可是我見(jiàn)過(guò)好多重頭再來(lái)派的人員,重頭再來(lái)做出的項(xiàng)目,在其他人眼里可能并沒(méi)有比之前好多少,甚至在過(guò)了一段時(shí)間之后,發(fā)現(xiàn)重新陷入了之前的困境之中。

因?yàn)槊つ繕?lè)觀是我們?nèi)诵缘娜觞c(diǎn)。這就像創(chuàng)業(yè)者總覺(jué)得自己是九死一生中唯一生的那個(gè),買(mǎi)彩票的人總覺(jué)得自己是那個(gè)千萬(wàn)分之一的幸運(yùn)兒一樣。

這三個(gè)流派,并沒(méi)有絕對(duì)的好壞之分,不同的流派都有不同的適用場(chǎng)景,區(qū)別就在于「時(shí)間、成本、質(zhì)量」這三個(gè)要素上的取舍不同。所以,我們?cè)谶x擇方案的時(shí)候可以根據(jù)這三個(gè)要素的具體情況來(lái)判斷。

因?yàn)閆哥認(rèn)為一個(gè)項(xiàng)目的核心要素就是這三者,并且這三者無(wú)法兼得,最多只能取其二,類(lèi)似于分布式系統(tǒng)領(lǐng)域的CAP定理。

Z哥有幸分別參與和主導(dǎo)過(guò)這三個(gè)流派的工作,以我的經(jīng)驗(yàn)來(lái)看,我認(rèn)為這三個(gè)流派分別適用的項(xiàng)目情況如下:

  • 保守派。時(shí)間快,成本低,對(duì)質(zhì)量?jī)H有最基本的要求。
  • 激進(jìn)派。有較高的質(zhì)量要求,滿足時(shí)間較寬裕或者接受成本大幅增加其中的一點(diǎn)。
  • 推倒重來(lái)派。時(shí)間和成本完全給質(zhì)量讓步,追求可見(jiàn)范圍內(nèi)的最好。

其實(shí)這么一分析你也能發(fā)現(xiàn),總是推倒重來(lái)是不現(xiàn)實(shí)的,時(shí)間和成本這種屬于資源,資源總是有限的。所以,大多數(shù)情況下,保守派的選擇才是最常見(jiàn)的。因此我們更應(yīng)該思考的是如何通過(guò)保守改造最大化提高項(xiàng)目的質(zhì)量,讓他擺脫“垃圾”的標(biāo)簽。這需要我們沉下心來(lái)才能完成,不要老想著推翻重做。

好了,總結(jié)一下。

這篇呢,Z哥和你分享了我對(duì)如何應(yīng)對(duì)“垃圾項(xiàng)目”的看法。

首先和你分析了5個(gè)常見(jiàn)的使得項(xiàng)目逐漸變得垃圾的陋習(xí)。

  1. 組件顆粒度過(guò)大
  2. API數(shù)量泛濫
  3. 低內(nèi)聚高耦合
  4. 業(yè)務(wù)邏輯和程序處理邏輯糾纏
  5. 又長(zhǎng)又寬的if else

然后分享了三個(gè)常見(jiàn)的保守派做法:

  1. 業(yè)務(wù)層禁止層內(nèi)依賴
  2. 將大函數(shù)拆小
  3. 減少代碼

最后分享了應(yīng)對(duì)“垃圾項(xiàng)目”時(shí)的三大流派,分別是:

  1. 保守派
  2. 激進(jìn)派
  3. 推倒重來(lái)派

從時(shí)間、成本、質(zhì)量三個(gè)維度的權(quán)衡來(lái)看。保守派才是主流,所以不要?jiǎng)硬粍?dòng)就想著推倒重來(lái),收起浮躁的心,沉下心來(lái)。

好了,希望對(duì)你有所啟發(fā)。

 

責(zé)任編輯:武曉燕 來(lái)源: 跨界架構(gòu)師
相關(guān)推薦

2023-01-04 11:35:21

預(yù)測(cè)模型預(yù)售

2018-02-01 21:34:38

戴爾

2020-09-18 07:05:34

Java編程語(yǔ)言

2017-12-11 15:04:58

404錯(cuò)誤HTTP代碼

2010-04-08 14:16:21

Linux

2019-08-20 16:58:14

戴爾

2013-10-28 13:30:21

Windows 9微軟

2013-12-16 13:58:55

Win9Windows 9概念圖

2018-06-22 08:13:21

2022-05-09 08:37:43

IO模型Java

2015-02-04 10:46:59

AppleWatchuber

2020-02-25 11:15:46

代碼開(kāi)發(fā)AI

2020-12-10 08:43:17

垃圾回收JVM

2015-09-19 13:45:27

2015-04-16 09:48:12

APP測(cè)試

2020-12-15 08:05:40

路由器服務(wù)器網(wǎng)絡(luò)層

2012-03-05 20:57:46

Siri

2011-06-10 12:57:22

seo垃圾鏈接

2009-03-11 14:42:57

面試求職案例

2016-12-28 14:51:46

大數(shù)據(jù)應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

1pon在线| 国产 日韩 欧美| 国产精品网站在线| 亚洲精品一区二区三区av| 日韩一区二区在线| 日韩免费观看高清| 极品束缚调教一区二区网站| 少妇高潮久久77777| 色呦呦呦在线观看| 日韩一级视频免费观看在线| 国产永久免费高清在线观看 | 亚洲丝袜美腿综合| 成人午夜在线视频| 久热爱精品视频线路一| www黄色在线| 狠狠做六月爱婷婷综合aⅴ| 精品一区二区三区欧美| 欧美性猛交xxxx乱大交3| 伊人色综合影院| 国产精品卡一卡二卡三| 亚洲伦在线观看| 91.com在线| 成人在线免费看黄| 一级日本不卡的影视| 97超碰免费观看| 成人综合婷婷国产精品久久免费| 免费成人黄色网址| 国产a精品视频| 国产欧美日韩综合一区在线观看| 国产尤物久久久| 久久6免费高清热精品| 日韩一级淫片| 日韩精品一区二区三区老鸭窝 | 综合电影一区二区三区 | 正在播放一区| 玖玖视频精品| 久久久久久免费看| 成人午夜影院在线观看| 日韩精品丝袜美腿| 性欧美亚洲xxxx乳在线观看| 亚洲欧美tv| 国产在线精品播放| 亚洲精选国产| 亚洲综合视频一区| 91论坛在线播放| 免费福利片在线观看| 红桃视频成人在线观看| 老司机精品视频在线观看6| 欧美va亚洲va香蕉在线| 综合在线影院| 日本午夜精品理论片a级appf发布| 91精品国产乱码久久久久久久| 精品卡一卡二| 夫妻av一区二区| 黑巨人与欧美精品一区| 欧美精选午夜久久久乱码6080| 卡通欧美亚洲| 国产va免费精品高清在线| 亚洲精品色图| 久在线观看视频| 欧美日韩午夜激情| 日本三级韩国三级欧美三级| 久久久国产一区二区| 99国产**精品****| 99中文字幕在线观看| 亚洲久草在线视频| 高h视频在线播放| 日韩免费av片在线观看| 天堂аⅴ在线最新版在线 | 综合在线观看色| 69久久夜色| 欧美成年人视频| 欧美精品1区| 香港三级韩国三级日本三级| 亚洲图片欧美色图| www.com.cn成人| 国产91精品网站| 韩国欧美一区二区| 欧美13~18sex性hd| 日韩成人中文电影| 欧美h版在线| 无码播放一区二区三区| 91福利精品视频| 99久久久成人国产精品| 国模精品娜娜一二三区| 国产精品久久久久久久久免费桃花 | 亚洲欧美日韩精品综合在线观看| 久久综合九色综合97_久久久| 国产香蕉在线| 九九热99久久久国产盗摄| 99热这里只有精品8| 香蕉视频网站入口| 日韩h在线观看| 欧美激情麻豆| 成人xxx免费视频播放| 精品无人区乱码1区2区3区在线| 91麻豆精品国产91久久久平台| 人人干视频在线| 日韩欧美国产不卡| 手机在线电影一区| 濑亚美莉vs黑人在线观看| 亚洲欧美激情精品一区二区| 激情欧美日韩一区| 在线看国产视频| 97视频com| 久久影院电视剧免费观看| 成人福利影视| 欧美精品一区二区视频| 精品成人av一区| 国产ts一区| 91免费视频网站在线观看| 亚洲国产天堂久久综合| 激情欧美一区| 日本精品久久久久影院| 蜜臀精品一区二区三区在线观看| 四色成人av永久网址| 午夜精品久久久久久久99热| av一区二区三区四区| 亚洲精品mv| av磁力番号网| 亚洲精品久久久久国产| 在线一区欧美| 蜜芽在线免费观看| 久久人人九九| 欧美日韩国产高清一区二区 | 欧美国产亚洲视频| 成人av免费在线播放| 日韩脚交footjobhdboots| 欧美日本亚洲| 日韩一区二区麻豆国产| 国产欧美一级| 91精品久久| 欧美极品一区二区| 91精品国产免费久久综合| 在线国产一区二区| 国产视频网址在线| 国产成人看片| 欧美亚洲日本一区| 伊人精品成人久久综合软件| 黄视频在线播放| 91精品综合久久久久久五月天| 亚洲妇女屁股眼交7| 久久福利影院| 男人的天堂av高清在线| 国产精品一区二区三区免费 | 在线观看视频99| 99国产精品久久久| 中文字幕视频精品一区二区三区| 黄色一级大片在线观看| 国内精品免费午夜毛片| 亚洲欧美偷拍卡通变态| 日韩专区精品| 午夜视频在线观看免费视频| 精品久久久三级| 欧美成人福利视频| 国产91丝袜在线播放0| 欧美专区视频| 在线观看免费国产小视频| 国产日韩欧美一区二区| 日韩欧美你懂的| 成人午夜电影久久影院| 疯狂欧洲av久久成人av电影| 国产黄色网页| 成人9ⅰ免费影视网站| 精品福利av导航| 在线免费观看a视频| 日韩欧美三级一区二区| 亚洲欧美激情一区| 国产精品水嫩水嫩| 色88久久久久高潮综合影院| 黄网站app在线观看| 妞干网在线视频观看| 欧美重口另类videos人妖| 精品久久久久久中文字幕一区奶水 | 中文在线аv在线| 日韩视频在线免费看| 国产精品福利片| 欧美一级高清大全免费观看| av一区二区三区四区| 91久久国产| 免费福利视频一区二区三区| 岛国毛片在线播放| 久久99精品久久久久久秒播放器 | 日韩福利一区二区| 中文字幕一区二区中文字幕| 久久久视频精品| 欧美高清视频www夜色资源网| 国产一区久久久| 欧美人妖在线| 色呦呦在线资源| 精品999在线| 欧美精品在线一区| 2019中文字幕在线| 亚洲精品999| 有坂深雪av一区二区精品| 久久福利视频一区二区| 欧美mv日韩| 91精品啪在线观看国产爱臀| 91一区二区三区在线| 黄色三及免费看|