
我認(rèn)為一天最好的開(kāi)始是早上起床后泡杯好咖啡??Х葯C(jī)里散發(fā)出迷人的香味,太美味了。煮好之后,倒進(jìn)杯子里,放點(diǎn)糖,就O了。
你有沒(méi)有想過(guò)用圖標(biāo)來(lái)表示泡咖啡的流程?或者其他普通的事情,例如洗澡?當(dāng)然沒(méi)有!
對(duì)于其他比這些麻煩一點(diǎn)的事情,比如軟件項(xiàng)目開(kāi)發(fā),少量的設(shè)計(jì)工作是很有用的,或者說(shuō)是必須的。
問(wèn)題就出來(lái)了,架構(gòu)設(shè)計(jì)值得花那么多時(shí)間和精力么?好吧,還是先回答這個(gè)問(wèn)題:早期的設(shè)計(jì)能降低項(xiàng)目中的風(fēng)險(xiǎn)么?
項(xiàng)目的目標(biāo)和挑戰(zhàn)越大,風(fēng)險(xiǎn)越多,成功完成的難度就越大。
如何識(shí)別風(fēng)險(xiǎn):最簡(jiǎn)單的就是從需求出發(fā),找出看起來(lái)最難實(shí)現(xiàn)的事情。
收集需求是決定做什么和怎么做的基礎(chǔ)。當(dāng)然,有時(shí)候?qū)е马?xiàng)目失敗的問(wèn)題從這一開(kāi)始就出現(xiàn)了,有一些假設(shè)低估了這一關(guān)鍵關(guān)鍵階段并且從根本上動(dòng)搖了架構(gòu)師的角色:
1. 需求分析是別人的職責(zé)
(業(yè)務(wù))領(lǐng)域驅(qū)動(dòng)架構(gòu)選擇,而不是反過(guò)來(lái),(業(yè)務(wù))需求會(huì)產(chǎn)生架構(gòu)問(wèn)題。至少你得協(xié)助業(yè)務(wù)分析師(進(jìn)行業(yè)務(wù)分析)。
2. 我一邊寫(xiě)代碼一邊學(xué)習(xí)領(lǐng)域知識(shí)
雖然軟件原型(開(kāi)發(fā))是降低工程上的風(fēng)險(xiǎn)的好辦法,并且可以識(shí)別出最困難的問(wèn)題,但是寫(xiě)代碼對(duì)分析業(yè)務(wù)領(lǐng)域來(lái)說(shuō)就是浪費(fèi)時(shí)間。提前進(jìn)行建模才是提出產(chǎn)出比最好的方式。
3. 相關(guān)方已經(jīng)完全理解了需求
人和人之間徹底的溝通是很難的。如果別人不明白你在做什么和為什么做這些的話,軟件架構(gòu)師的角色是很難做的。
4. 業(yè)務(wù)領(lǐng)域和架構(gòu)決策是無(wú)關(guān)的
開(kāi)發(fā)人員可能會(huì)從過(guò)去的項(xiàng)目中拷貝架構(gòu)(設(shè)計(jì))。也可能是遵循公司的標(biāo)準(zhǔn),但是卻忽略了之前做出選擇的原因,他們很可能就不知道現(xiàn)在這個(gè)項(xiàng)目的(實(shí)際)要求。
5. 我已經(jīng)明白了需求
至少你腦子里應(yīng)該有需求文檔,但是設(shè)計(jì)人員應(yīng)該使用模型來(lái)增強(qiáng)推理能力并且暴露出有風(fēng)險(xiǎn)但并不是很清晰的方面。
