程序=數(shù)據(jù)結(jié)構(gòu)+算法
這句話如何理解?一個項(xiàng)目可以理解為一個程序,那么數(shù)據(jù)分為兩種數(shù)據(jù):項(xiàng)目本身要獲取的數(shù)據(jù)、為了實(shí)現(xiàn)項(xiàng)目而做的中間數(shù)據(jù)。算法呢?聽起來很厲害的樣子?實(shí)際做項(xiàng)目時候很少接觸到所謂的算法,所以大家理解它為行為就好了。所以,個人認(rèn)為對大多數(shù)做業(yè)務(wù)的同學(xué)來說:程序=數(shù)據(jù)+行為。多思考一下我上面說的,看看能否頓悟。
個人獨(dú)立負(fù)責(zé)過多個中小型互聯(lián)網(wǎng)項(xiàng)目,接下來就分享一下個人在做項(xiàng)目的時候如何進(jìn)行系統(tǒng)設(shè)計(jì)。
如果是負(fù)責(zé)整個項(xiàng)目的需求分析、系統(tǒng)設(shè)計(jì)工作,那么第一要務(wù)是把需求文檔看透,分析出這個項(xiàng)目的主業(yè)務(wù)流程,覺得自己可以掌握個七七八八的時候,把這個項(xiàng)目的業(yè)務(wù)流程圖畫出來,在畫圖的過程中,我相信你一定會對需求的細(xì)節(jié)有更深一層的理解和掌握,這樣也方便你后續(xù)的系統(tǒng)設(shè)計(jì)工作,所以先把業(yè)務(wù)主線抓住!剩下的細(xì)節(jié)再慢慢考慮。
如果是負(fù)責(zé)項(xiàng)目中的某一個功能點(diǎn),那么也得對這個功能的相關(guān)功能有一個大概的了解,同時在詳細(xì)閱讀需求文檔的過程中,如果你有疑問,也不要自己憋著,有問題就問,包括合理的或者不合理的。參考敏捷開發(fā)中一個故事的描述:誰想要什么功能以便能夠做什么?例如:作為一個產(chǎn)品經(jīng)理,我想要一個用戶打標(biāo)簽的功能以便我可以根據(jù)不同的用戶分類推薦不同的內(nèi)容,做更進(jìn)一步的精細(xì)化運(yùn)營。那么在分析這個功能的同時,數(shù)據(jù)即用戶的標(biāo)簽,行為呢?給用戶打標(biāo)簽!那么設(shè)計(jì)一張用戶標(biāo)簽表,一個用戶可以打多個標(biāo)簽,用戶已經(jīng)有這個標(biāo)簽就不再重復(fù)標(biāo)記了。相信說到這里大家已經(jīng)知道這個表怎么設(shè)計(jì)了,這個功能就是這么簡單。
一個完整的項(xiàng)目由多個獨(dú)立的功能模塊組成的,這些獨(dú)立的功能模塊之間保持著一定的組合關(guān)系,便形成的一個完整的項(xiàng)目。程序員一般都由獨(dú)立負(fù)責(zé)設(shè)計(jì)和開發(fā)一個模塊做起,再慢慢摸清楚多個模塊之間的上下游關(guān)系,便有了設(shè)計(jì)一個小型系統(tǒng)的能力。當(dāng)然一開始不用著急是否設(shè)計(jì)的合理,以滿足功能需求為前提,再慢慢考慮系統(tǒng)設(shè)計(jì)的合理性,功能模塊之間的依賴性。想做到高內(nèi)聚,低耦合也非一朝一夕的事情。當(dāng)然,成長的道路不會一帆風(fēng)順,只有持續(xù)學(xué)習(xí),砥礪前行,終會有成為大神的那一天。
上面都說的是如何進(jìn)行功能設(shè)計(jì),如何根據(jù)功能設(shè)計(jì)表呢?其實(shí)把功能設(shè)計(jì)好了,表設(shè)計(jì)也就自然而然的出來了。為了實(shí)現(xiàn)這個功能,我們依賴哪些上游數(shù)據(jù)?這個功能最終要記錄哪些數(shù)據(jù)?考慮好這兩個問題,表設(shè)計(jì)也就出來了。