程序組織:
系統(tǒng)架構(gòu)首先要以概括的形式對(duì)有關(guān)系統(tǒng)做一個(gè)綜述,如果沒有綜述培遵,要想將成千上萬的局部圖片(或十多個(gè)單獨(dú)的類)拼為一副完整的圖畫是相當(dāng)傷腦筋的,如果你不能將它們拼接起來菱肖,那么就無法理解你正在開發(fā)的那個(gè)類對(duì)系統(tǒng)有何貢獻(xiàn)疚宇!
如果在編寫一個(gè)類的時(shí)候亡鼠,對(duì)這個(gè)類在系統(tǒng)中的角色沒有一個(gè)很清晰的構(gòu)思,那么編寫這個(gè)類就是一件十分令人灰心喪氣的工作敷待。需要對(duì)每個(gè)類進(jìn)行慎重考慮间涵!(功能->模塊->類->模塊->功能)
應(yīng)該明確定義各個(gè)構(gòu)造塊的責(zé)任。每個(gè)構(gòu)造塊應(yīng)該負(fù)責(zé)某一個(gè)區(qū)域的事情榜揖,并且對(duì)其它區(qū)域的事情知道的越少越好浑厚。通過使構(gòu)造塊對(duì)其他構(gòu)造塊的了解達(dá)到最小,你能將設(shè)計(jì)的信息局限于各個(gè)構(gòu)造塊之內(nèi)根盒。
應(yīng)該明確定義每個(gè)構(gòu)造塊的通信規(guī)則钳幅,對(duì)于每個(gè)構(gòu)造塊,架構(gòu)應(yīng)該描述它能夠直接使用哪些構(gòu)造塊炎滞,能間接使用哪些構(gòu)造塊敢艰,不能使用哪些構(gòu)造塊。
主要的類:
架構(gòu)應(yīng)該詳細(xì)定義所用的主要的類册赛。它應(yīng)該指出每個(gè)主要的類的責(zé)任钠导,以及該類如何與其它類交互(類的繼承體系/狀態(tài)轉(zhuǎn)換/對(duì)象持久化等描述),根據(jù)80/20 規(guī)則對(duì)系統(tǒng)內(nèi)部那些構(gòu)成系統(tǒng)80%的行為的20%的類進(jìn)行詳細(xì)說明森瘪。
數(shù)據(jù)設(shè)計(jì):
架構(gòu)應(yīng)該描述所用到的主要文件和數(shù)據(jù)表設(shè)計(jì)牡属。它應(yīng)該描述曾經(jīng)考慮過的其他方案,并說明選擇的理由(理由也寫一寫扼睬,特別是方案變更選取的時(shí)候)逮栅。
架構(gòu)應(yīng)該定義所用數(shù)據(jù)庫的高層組織結(jié)構(gòu)和內(nèi)容。指出與其他訪問同一數(shù)據(jù)的程序的可能交互方式窗宇,說明會(huì)創(chuàng)建哪些數(shù)據(jù)視圖等
業(yè)務(wù)規(guī)則:
如果架構(gòu)依賴于詳細(xì)的業(yè)務(wù)規(guī)則措伐,那么就應(yīng)該詳細(xì)的描述這些規(guī)則,并描述這些規(guī)則對(duì)系統(tǒng)設(shè)計(jì)的影響军俊。(比如客戶信息過時(shí)時(shí)間不超過30秒侥加,在此情況下,架構(gòu)就應(yīng)該描述這條規(guī)則對(duì)架構(gòu)采用的“保持客戶信息及時(shí)更新且同步”的方法的影響)
用戶界面設(shè)計(jì):
用戶界面常在需求階段進(jìn)行詳細(xì)說明.如果沒有就應(yīng)該在軟件架構(gòu)進(jìn)行詳細(xì)說明粪躬。
架構(gòu)應(yīng)該模塊化担败,以便在替換為新用戶界面時(shí)不影響業(yè)務(wù)規(guī)則和程序的輸出部分。架構(gòu)應(yīng)該使我們很容易的做到:砍掉交互式的界面镰官,插入一組命令行的類提前。
資源管理:
架構(gòu)設(shè)計(jì)應(yīng)該描述一份管理稀缺資源的計(jì)劃。稀缺資源包括數(shù)據(jù)庫連接/線程/句柄等朋魔。應(yīng)該嘗試估算正常和極端情況下的資源使用量岖研。各個(gè)類或者各個(gè)對(duì)象空間和時(shí)間的預(yù)算。
安全性:
緩沖區(qū)/處理非受信數(shù)據(jù)規(guī)則,加密孙援,錯(cuò)誤信息的細(xì)致程度害淤,保存內(nèi)存中的秘密數(shù)據(jù),以及其他事項(xiàng)拓售。
錯(cuò)誤處理:
最后也是最重要的:
錯(cuò)誤處理是進(jìn)行糾正還是僅僅進(jìn)行檢測(cè)窥摄?如果是糾正,那么程序可以嘗試從錯(cuò)誤中恢復(fù)出來础淤,如果僅僅是檢測(cè)崭放,那么程序就可以像沒發(fā)生任何事情一樣繼續(xù)運(yùn)行,也可也退出鸽凶,但是無論哪種情況都應(yīng)該通知用戶說檢測(cè)到了一個(gè)錯(cuò)誤币砂!
錯(cuò)誤監(jiān)測(cè)是主動(dòng)的還是被動(dòng)的?
程序如何傳播錯(cuò)誤玻侥?(直接進(jìn)行錯(cuò)誤處理/等到所有處理完成决摧,再通知說某個(gè)地方發(fā)現(xiàn)了錯(cuò)誤!)
錯(cuò)誤處理有什么約定?(架構(gòu)應(yīng)該有一套完整的錯(cuò)誤消息約定)
如何處理異常?(架構(gòu)應(yīng)該規(guī)定代碼何時(shí)能夠拋出異常,在什么地方拋出異常凑兰,如何記錄(log)這些異常以及如何在文檔中描述這些異常)
每個(gè)類在驗(yàn)證其輸入數(shù)據(jù)的有效性方面需要負(fù)何種責(zé)任掌桩?是每個(gè)類負(fù)責(zé)驗(yàn)證自己數(shù)據(jù)的有效性還是有一組專門的類負(fù)責(zé)驗(yàn)證整個(gè)系統(tǒng)數(shù)據(jù)的有效性?
容錯(cuò)性:
檢查錯(cuò)誤的時(shí)候倒退回去;
系統(tǒng)有一套輔助代碼姑食,已備在主代碼出錯(cuò)的時(shí)候使用;
表決算法;
系統(tǒng)使用不會(huì)對(duì)系統(tǒng)產(chǎn)生危害的虛假值來替代這個(gè)錯(cuò)誤值;