首先,先說明一下“規(guī)劃項(xiàng)目結(jié)構(gòu)”具體的工作內(nèi)容是什么贮勃。以二個(gè)常見的程序開發(fā)平臺(tái)來說忆矛,不管是用 Visual Studio 來開發(fā) .NET 的程序舌剂,還是用各種 IDE 來開發(fā) Java 的程序气破,都會(huì)有一組用來輔助 IDE 進(jìn)行代碼項(xiàng)目管理的文件聊浅、甚至?xí)殡S著一到數(shù)個(gè)特定的目錄結(jié)構(gòu)。只不過,這些都不是這篇文章要涉及的部份低匙。而是除了這些內(nèi)容以外旷痕,由開發(fā)人員自行產(chǎn)生的文件該如何妥適的進(jìn)行分門別類的工作,就是這篇文章所提到“規(guī)劃項(xiàng)目結(jié)構(gòu)”要主要工作內(nèi)容顽冶。
對很多的從業(yè)人員來說欺抗,“規(guī)劃項(xiàng)目結(jié)構(gòu)”可能是個(gè)無足輕重的工作項(xiàng),心里會(huì)想:不就是開幾個(gè)目錄把文件往里面丟就完事了嗎强重?能編能跑才是王道佩迟!會(huì)這樣想,大部份應(yīng)該都是以開發(fā)小型項(xiàng)目為主竿屹,所以好與不好的項(xiàng)目結(jié)構(gòu)在效益上并沒有太大的差別。
舉個(gè)例子灸姊,如果你是網(wǎng)拍的賣家拱燃,打算做個(gè)小本生意,只有一人負(fù)責(zé)接單力惯、發(fā)貨碗誉。貨品的種類和數(shù)量都不會(huì)很多的情況下,進(jìn)來的貨可能就只是隨手扔在腳邊父晶,不管怎么堆只要有一套自己的邏輯就行了哮缺,不愁找不到貨。但是如果網(wǎng)拍的事業(yè)開始小有名氣了甲喝、要逐步地?cái)U(kuò)大規(guī)模尝苇,發(fā)貨的品項(xiàng)或數(shù)量都不再是一個(gè)人可以負(fù)荷得來時(shí),就得要增加人手埠胖。一旦人手增加了糠溜,同樣的模式下問題就跟著出現(xiàn)。如果放任新加入的人隨個(gè)人喜好來擺放貨物直撤、大家各做各的非竿,要如何才能有效地掌握目前存貨的情形?況且人吃五谷雜糧哪有不生病谋竖,沒有統(tǒng)一的理貨方法红柱,其他的人要如何接手?所以把例子的層級拉高來看蓖乘,對于一個(gè)成熟的網(wǎng)購業(yè)者來說锤悄,倉儲(chǔ)就是一門學(xué)問,如何設(shè)計(jì)貨架以便分門別類地來存放貨品嘉抒,是維持營運(yùn)的重要環(huán)節(jié)铁蹈。
同理可證,很多大型開發(fā)項(xiàng)目也都是由小系統(tǒng)開始,應(yīng)該很少有人會(huì)聽到自己的老板一照面就說:咱們來做個(gè)功能無敵豐富的系統(tǒng)唄握牧!大部份應(yīng)該都是:我有個(gè)想法容诬,先做個(gè)小系統(tǒng)來看看市場的反應(yīng),如何沿腰?好吧览徒,既然是個(gè)小系統(tǒng),那開發(fā)就隨性一點(diǎn)颂龙,看起來有個(gè)樣子习蓬、功能正常就行了。
跟先前網(wǎng)拍的例子一樣措嵌,你怎么知道你現(xiàn)在的小系統(tǒng)不會(huì)意外地發(fā)展成大系統(tǒng)躲叼?有些人也許會(huì)覺得:等到了適當(dāng)?shù)碾A段,再一次性地投入資源企巢,進(jìn)行重構(gòu)就好啦枫慷!不要花時(shí)間在無謂的事情上。然而浪规,系統(tǒng)的發(fā)展很多時(shí)候就像是溫水煮青蛙一般或听,等察覺到系統(tǒng)已經(jīng)大到需要有一個(gè)較好的分類模式時(shí),代碼早就已經(jīng)盤根錯(cuò)節(jié)笋婿。在大部分的人都會(huì)有的因循茍且心態(tài)下誉裆,重構(gòu)?別傻了缸濒,只要能夠如期交付工作就上天保祐了足丢,哪有多余的力氣去做吃力不討好的事。
好的項(xiàng)目結(jié)構(gòu)也是工作質(zhì)量指標(biāo)其中一環(huán)庇配,當(dāng)代碼依據(jù)著規(guī)則分門別類地放置霎桅,在后續(xù)的維護(hù)上自然會(huì)有一定程度的助益。不論是開發(fā)人員間工作上的指派讨永、輪調(diào)滔驶,或是在降低新進(jìn)人員的學(xué)習(xí)曲線上,都會(huì)比雜亂無章的項(xiàng)目結(jié)構(gòu)要來得成本低卿闹。
另外一方面揭糕,在面向?qū)ο蟮脑瓌t之下,每一個(gè)類的任務(wù)應(yīng)該要盡可能的單純锻霎,其中的一個(gè)效果就是讓單元測試可以更容易地被開發(fā)著角。在測試程序的代碼覆蓋率達(dá)到一定的程度,有自動(dòng)化回歸測試的輔助旋恼,這時(shí)候談重構(gòu)才會(huì)有足夠的利基吏口。否則談到重構(gòu),最大的恐懼都是來自于對于系統(tǒng)穩(wěn)定度的疑慮,在這種情況下自然不會(huì)有人甘冒風(fēng)險(xiǎn)去更動(dòng)已經(jīng)完成的部份产徊。
這時(shí)合宜的結(jié)構(gòu)規(guī)劃就可以輔助開發(fā)人員昂勒,做為類內(nèi)容是否過于復(fù)雜的衡量基準(zhǔn)。如果每一個(gè)類功能夠單純舟铜,則在分類上就會(huì)減少很多模棱兩可的情況出現(xiàn)戈盈。反之,則會(huì)因?yàn)轭愗?fù)擔(dān)了多個(gè)任務(wù)谆刨,在分類上容易出現(xiàn)歧見塘娶,或是無法決定該放在哪一個(gè)分類之下。
所以古人說“慎始”痊夭,同時(shí)也說了“勿以惡小而為之”刁岸,養(yǎng)成良好的習(xí)慣是很重要的一件事。當(dāng)你是架構(gòu)師時(shí)“規(guī)劃項(xiàng)目結(jié)構(gòu)”是你要思考的細(xì)節(jié)她我。就算是一人項(xiàng)目虹曙,也應(yīng)該認(rèn)真地考慮替自己設(shè)定一個(gè)可以因應(yīng)系統(tǒng)擴(kuò)大的準(zhǔn)則,為未來承接更大的系統(tǒng)而做好準(zhǔn)備鸦难。
附注
新開了一個(gè)架構(gòu)師的文集,未來打算在這個(gè)文集里不定期地放一些在擔(dān)任架構(gòu)師時(shí)的工作經(jīng)驗(yàn)或心得员淫,有興趣的朋友可以關(guān)注合蔽、期待一下。