一個(gè)優(yōu)質(zhì)的項(xiàng)目應(yīng)該具有什么特點(diǎn)

我的 知識(shí)星球 里有人問到 Coding-iOS 這個(gè)開源項(xiàng)目值得學(xué)習(xí)嗎,這個(gè)開源客戶端有著 3500 + stars商源,看起來很受歡迎车份。

我把代碼下載下來后看了一會(huì),我的結(jié)論是:這個(gè)項(xiàng)目不值得作為優(yōu)秀項(xiàng)目進(jìn)行學(xué)習(xí)牡彻。說明一下扫沼,我并不是說這個(gè)項(xiàng)目代碼寫的爛,只是作為一個(gè)模范項(xiàng)目來學(xué)習(xí)的話庄吼,這個(gè)項(xiàng)目整體水平一般缎除。

這個(gè)項(xiàng)目的問題

細(xì)節(jié)處代碼質(zhì)量差

這個(gè)項(xiàng)目里的代碼我看到時(shí)間比較早的有 2014 年,意味著這是一個(gè)已經(jīng)持續(xù)多年的項(xiàng)目总寻。代碼的細(xì)節(jié)質(zhì)量做的很馬虎器罐,小到語法格式,大一點(diǎn)的命名渐行,再大一點(diǎn)到函數(shù)的實(shí)現(xiàn)邏輯都很普通轰坊。


image

隨手舉個(gè)例子,上面的代碼聲明了一組 Label祟印,本身 UILabel 縮寫成 L 已經(jīng)不是一個(gè)規(guī)范的做法了肴沫。但是如果團(tuán)隊(duì)都約定成 L 表示 Label 也是接受的,但是同一行里蕴忆,還被縮寫成了 T 和 V颤芬。團(tuán)隊(duì)稍微對(duì)代碼質(zhì)量有點(diǎn)要求應(yīng)該都不會(huì)允許這樣代碼的出現(xiàn)。

落后的資源管理

都 9012 年了,項(xiàng)目里的圖片資源沒有使用 Assets 管理站蝠,還是使用古老的 @2x @3x 圖片進(jìn)行圖片管理汰具。可以說因?yàn)闅v史原因沉衣,這個(gè)項(xiàng)目剛啟動(dòng)的時(shí)候沒有用 Assets郁副,但是到現(xiàn)在這么簡單的遷移都沒做,說明開發(fā)者對(duì)新技術(shù)的運(yùn)用很不敏感豌习。


image

簡單的架構(gòu)

這個(gè)項(xiàng)目里的代碼組織非常的單純存谎。繼承了 MVC 的光榮傳統(tǒng),項(xiàng)目主要邏輯分成三個(gè)文件夾 Models肥隆、Views既荚、Controllers。也許項(xiàng)目剛啟動(dòng)的時(shí)候按照這個(gè)思路去管理代碼文件還能接受栋艳,但是項(xiàng)目稍微發(fā)展大一點(diǎn)恰聘,這個(gè)結(jié)構(gòu)就會(huì)非常的不利于項(xiàng)目的維護(hù)。

比如有一個(gè)業(yè)務(wù) A吸占,為了實(shí)現(xiàn)這個(gè)業(yè)務(wù)你寫入了 XModel晴叨、YView、CController矾屯。過了一段時(shí)間后發(fā)現(xiàn)業(yè)務(wù) A 效果不好兼蕊,需要對(duì)其進(jìn)行下線。這個(gè)時(shí)候維護(hù)的人需要非常清楚的找到分散在三個(gè)文件夾里的三個(gè)代碼文件將其刪除件蚕。否則項(xiàng)目里有了無用的多余代碼孙技。這么說起來感覺也還好,實(shí)際業(yè)務(wù)中可能一個(gè)業(yè)務(wù)對(duì)應(yīng)了很多個(gè) View排作、Cell牵啦。執(zhí)行下線任務(wù) A 的開發(fā)者很可能不是之前負(fù)責(zé)的開發(fā)者。下線的可能是一個(gè) 3 年前的業(yè)務(wù)妄痪,當(dāng)時(shí)負(fù)責(zé)開發(fā)的程序員已經(jīng)離職了哈雏。這個(gè)時(shí)候維護(hù)的人是很難確切的把業(yè)務(wù)相關(guān)的代碼都找到的,就算找到了也要花很多時(shí)間衫生。尤其是這個(gè)項(xiàng)目里 MVC 下一級(jí)的層級(jí)也沒怎么區(qū)分僧著,要在幾十個(gè) Cell 里找到一個(gè)文件還是挺費(fèi)勁的。

組件化

這個(gè)項(xiàng)目沒有對(duì)業(yè)務(wù)模塊進(jìn)行組件化劃分障簿。所有的業(yè)務(wù)代碼都堆在一個(gè)項(xiàng)目里盹愚。項(xiàng)目增長的越大,維護(hù)成本就越高站故。新人的理解成本就越高皆怕。也不利于多人同時(shí)開發(fā)毅舆。

建議的學(xué)習(xí)路徑

想通過學(xué)習(xí)優(yōu)質(zhì)的開源項(xiàng)目,提高自己的編程水平這個(gè)心情可以理解愈腾。不過大多數(shù)時(shí)候?qū)W習(xí)一個(gè)真實(shí)的項(xiàng)目性價(jià)比是很低的憋活。

一個(gè)真實(shí)的項(xiàng)目常常會(huì)有這樣的問題:

  • 很多設(shè)計(jì)是針對(duì)具體業(yè)務(wù)展開的,如果你不了解業(yè)務(wù)場景虱黄,你就不能明白代碼為什么這么寫悦即。這樣就導(dǎo)致你需要先熟悉這個(gè)項(xiàng)目的業(yè)務(wù),才能看的懂代碼橱乱。
  • 實(shí)際開發(fā)中大概率會(huì)遇到一些 featrue 來不及開發(fā)了辜梳,先用成本的實(shí)現(xiàn)發(fā)布一版再說。所以項(xiàng)目里的代碼可能有些不錯(cuò)泳叠,有些實(shí)現(xiàn)的很差作瞄。作為項(xiàng)目而言是無所謂的,功能穩(wěn)定就行危纫,用戶使用的時(shí)候不管代碼實(shí)現(xiàn)的好不好宗挥。但是對(duì)于學(xué)習(xí)的開發(fā)者而言,花時(shí)間學(xué)習(xí)的是很爛的代碼种蝶,得不償失契耿。
  • 真實(shí)項(xiàng)目中的需求是持續(xù)迭代的。很多項(xiàng)目本來是按照需求 A 設(shè)計(jì)的螃征,結(jié)果做著做著客戶要求再加一個(gè)需求 B搪桂。那么原來代碼的設(shè)計(jì)沒考慮到這點(diǎn)需求,繼續(xù)在原來的代碼上實(shí)現(xiàn)就會(huì)很蛋疼会傲。如果大家維護(hù)一個(gè)老的項(xiàng)目也會(huì)遇到這樣的場景,有個(gè)地方命名直接實(shí)現(xiàn)就好了拙泽,卻用了一個(gè)蹩腳的方式淌山。其實(shí)是因?yàn)樵瓉淼男枰骖?另外一塊功能,只是后來需求變了顾瞻,不再需要兼顧了泼疑。那么最后看代碼的人就覺得為什么不按照直接的方式來實(shí)現(xiàn)。

因此即便有一個(gè)優(yōu)質(zhì)的項(xiàng)目荷荤,學(xué)習(xí)前的成本也是挺高的退渗。

我認(rèn)為一個(gè)優(yōu)質(zhì)的項(xiàng)目分為兩塊:良好的架構(gòu)和優(yōu)秀的實(shí)現(xiàn)。就像一個(gè)大的項(xiàng)目會(huì)拆分成很多模塊一樣蕴纳,想要提高自己的編程能力也要拆分成很多小模塊去達(dá)成会油。比如你的覺得你的命名不好,代碼可讀性差古毛,你就去找這方面相關(guān)的資料去針對(duì)性的學(xué)習(xí)翻翩《夹恚可以看看《編寫可讀代碼的藝術(shù)》《Clean code》。如果你覺得自己模塊抽象能力不好嫂冻,學(xué)習(xí)一下面向?qū)ο蠼赫鳌⒃O(shè)計(jì)模式之類的。如果本身這些具體模塊的好壞自己不了解桨仿,直接學(xué)習(xí)一個(gè)優(yōu)質(zhì)項(xiàng)目也是囫圇吞棗睛低。假設(shè)有一個(gè)老外只喝過咖啡,沒喝過茶服傍。然后你給他一堆好茶葉給他喝钱雷,最后讓他總結(jié)好的茶葉有什么特點(diǎn),他也講不出個(gè)所以然來伴嗡。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末急波,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瘪校,更是在濱河造成了極大的恐慌澄暮,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阱扬,死亡現(xiàn)場離奇詭異泣懊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)麻惶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門馍刮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人窃蹋,你說我怎么就攤上這事卡啰。” “怎么了警没?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵匈辱,是天一觀的道長。 經(jīng)常有香客問我杀迹,道長亡脸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任树酪,我火速辦了婚禮浅碾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘续语。我一直安慰自己垂谢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布疮茄。 她就那樣靜靜地躺著埂陆,像睡著了一般苛白。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上焚虱,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天购裙,我揣著相機(jī)與錄音,去河邊找鬼鹃栽。 笑死躏率,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的民鼓。 我是一名探鬼主播薇芝,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼丰嘉!你這毒婦竟也來了夯到?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤饮亏,失蹤者是張志新(化名)和其女友劉穎耍贾,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體路幸,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡荐开,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了简肴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晃听。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖砰识,靈堂內(nèi)的尸體忽然破棺而出能扒,到底是詐尸還是另有隱情,我是刑警寧澤辫狼,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布初斑,位于F島的核電站,受9級(jí)特大地震影響予借,放射性物質(zhì)發(fā)生泄漏越平。R本人自食惡果不足惜频蛔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一灵迫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晦溪,春花似錦瀑粥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽避咆。三九已至,卻和暖如春修噪,著一層夾襖步出監(jiān)牢的瞬間查库,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國打工黄琼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留樊销,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓脏款,卻偏偏與公主長得像围苫,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子撤师,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

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