原文首發(fā)于我的微信公眾號(hào):GeekArtT.
將代碼分層,當(dāng)然是為了控制復(fù)雜度,讓你的管理井井有條。那為什么非得要建立多個(gè)不同的獨(dú)立文件夾,再創(chuàng)建不同的文件呢?
一個(gè)直接的考慮是,在同一個(gè)文件下,也就是同一個(gè)文本環(huán)境之下,當(dāng)然會(huì)有非常大的自由度去增添代碼,沒有任何的條款限制。但同樣是因?yàn)檫@樣的“自由”,它會(huì)讓管理處于失控。因?yàn)榭刂茝?fù)雜度,就意味著將多個(gè)不確定性的東西固定下來,就需要有強(qiáng)制性的限制,而不是自由。有了更多的限制條件,才能讓你控制的主體按照你的思路去發(fā)展,去向同一個(gè)方向用力,而不是散沙一團(tuán)。這是一個(gè)經(jīng)典的因?yàn)橛辛烁嗟木窒扌?,反而讓系統(tǒng)發(fā)揮出更強(qiáng)大的力量的例子。正如山路賽車,為了更快一點(diǎn),就必須要用更小的馬力。
所以,為了讓你的“UI部分的代碼成一堆”,“數(shù)據(jù)連接的代碼成一堆”,“業(yè)務(wù)邏輯的代碼成一堆”,你必須給予這些部分強(qiáng)硬的限制,讓它們只能在特定的范圍內(nèi)出現(xiàn)。這就需要?jiǎng)?chuàng)建不同的文件夾,以及不同的源代碼文件。其背后的思維方式是:要用制度去控制組織,而不是依賴組織中每個(gè)成員的自身素質(zhì);要用代碼去控制流程,而不是依靠腦海中的行為規(guī)范。
另一個(gè)需要提到的優(yōu)勢(shì)是,通過不同的文件創(chuàng)建以及不同文件夾的劃分,可以很好地解決名字沖突。每一個(gè)模塊都可能提供一些相同的功能,但卻需要不同的實(shí)現(xiàn)。如果你將所有這些“具備相同功能但需要不同實(shí)現(xiàn)”的函數(shù)放在同一個(gè)文本環(huán)境下,你將難以區(qū)分這些函數(shù),并且會(huì)造成沖突。你當(dāng)然可以通過增添前綴的方式來解決沖突,但這樣會(huì)造成函數(shù)名的臃腫。但更為關(guān)鍵的是:如果你真的寫過稍微復(fù)雜一點(diǎn)的系統(tǒng),你會(huì)發(fā)現(xiàn)在“數(shù)量龐大的一堆沒有分類”的文本中尋找一個(gè)代碼片段是件多么讓人焦躁的事情!你完全無