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