//
系統(tǒng)設(shè)計(jì)心得 - 大數(shù)據(jù)和云計(jì)算技術(shù) (歡迎關(guān)注同名微信公眾號(hào)) - ITeye技術(shù)網(wǎng)站
http://jiezhu2007.iteye.com/blog/1914638
初做系統(tǒng)設(shè)計(jì),積累一些心得笆檀,大家一起討論。
1已骇、 關(guān)于需求:
初做系統(tǒng)設(shè)計(jì),容易先入為主票编,收集需求的時(shí)候就考慮人力褪储,技術(shù)等原因,在很前面的就把某些功能砍掉慧域。
如果這樣分析問題鲤竹,整個(gè)系統(tǒng)就沒有全貌,容易出現(xiàn)需求遺漏昔榴,設(shè)計(jì)不清楚辛藻,整個(gè)系統(tǒng)不完全,后續(xù)無法擴(kuò)展互订。
A吱肌、 收集需求時(shí),應(yīng)該梳理系統(tǒng)全景圖仰禽,業(yè)務(wù)場(chǎng)景氮墨,輸入纺蛆,輸出,流程描述等规揪。
B桥氏、 盡量用客戶的語言,而不是抽象后的設(shè)計(jì)語言猛铅。用客戶化的語言方便和客戶做需求澄清字支,同時(shí)避免過早提煉設(shè)計(jì)導(dǎo)致需求變形。
C奸忽、 做需求排序堕伪。
D、 需求收集清楚后栗菜,映射到具體的系統(tǒng)架構(gòu)/功能組件上刃跛,評(píng)估工作量。
E苛萎、 工作量評(píng)估出來之后,根據(jù)工作量和需求排序裁剪功能和需求检号。
2腌歉、 關(guān)于系統(tǒng)架構(gòu):
A、 需求澄清之后齐苛,抽象成系統(tǒng)架構(gòu)翘盖,常用UML,0/1層架構(gòu)圖等工具凹蜂。
B馍驯、 根據(jù)需求列出功能全景。
C玛痊、 列出關(guān)鍵技術(shù)點(diǎn)汰瘫。
D、 做競(jìng)爭(zhēng)分析擂煞,業(yè)界是否有開源項(xiàng)目分析混弥。
E、 對(duì)業(yè)務(wù)在做系統(tǒng)架構(gòu)時(shí)对省,對(duì)功能和技術(shù)要做足夠的抽象蝗拿,抽象層次不充分,后續(xù)考慮系統(tǒng)的擴(kuò)展性會(huì)極大受限蒿涎。
3哀托、 技術(shù)選擇:
選擇合適的技術(shù),這塊需要經(jīng)驗(yàn)積累劳秋。有經(jīng)驗(yàn)積累才了解每種技術(shù)的優(yōu)劣以及和業(yè)務(wù)的適合度仓手。而同時(shí)因?yàn)樵O(shè)計(jì)師本身對(duì)某項(xiàng)技術(shù)有積累胖齐,而傾向于選擇熟悉的技術(shù)。
這塊建議重點(diǎn)參考業(yè)界經(jīng)驗(yàn)俗或。每項(xiàng)技術(shù)有優(yōu)勢(shì)市怎,也必然有坑。
A辛慰、 編程語言方面:
對(duì)系統(tǒng)性能要求高区匠,優(yōu)先考慮C/C++。
企業(yè)級(jí)應(yīng)用帅腌,優(yōu)先考慮JAVA驰弄。
要求快速開發(fā),可以考慮PYTHON速客。
B戚篙、 組件/框架:
各種開源框架很多Spring,OSGi溺职,MVC岔擂,ESB等。
要充分考慮系統(tǒng)的擴(kuò)展性浪耘,選用成熟的組件框架乱灵。這塊對(duì)于JAVA程序員來說,比較容易理解七冲,C/C++程序員需要轉(zhuǎn)變思路痛倚。
C、 系統(tǒng)
選擇比較少澜躺,一般就是windows/linux蝉稳,而且往往根據(jù)系統(tǒng)的應(yīng)用很早就確定了。如果要支持多系統(tǒng)掘鄙,就要考慮代碼移值性耘戚,越是高級(jí)預(yù)言,一般來說操漠,移值性越好毕莱。
4、 編碼:
業(yè)界這方面很多思想颅夺,如
A朋截、 面向接口編程
B、 組件化/模塊化
C吧黄、 設(shè)計(jì)模式
D部服、 開放封邊原則
歸根結(jié)低,就是要足夠抽象拗慨,足夠開放廓八,足夠易擴(kuò)展奉芦。
另外一個(gè)原則是在系統(tǒng)設(shè)計(jì)的時(shí)候就要充分考慮編碼問題,以及代碼框架剧蹂,風(fēng)格等声功。