5.1設計中的挑戰
設計就是把需求分析和編碼除錯連在一起的活動。
險惡的問題就是那種只有通過解決或部分解決才能被明確的問題。
設計是個了無章法的過程。
設計就是確定取捨和調整順序的過程。
設計受到諸多限制。
設計是不確定的。
設計是乙個啟發式過程。
設計是自然而然形成的。
5.2關鍵的設計概念
好的設計源於對一小批關鍵設計概念的理解。
軟體的首要技術使命:管理複雜度
本質屬性。
偶然屬性。
軟體開發就是不斷地去發掘錯綜複雜,相互連線的整套概念的所有細節。
在軟體架構的層次上,可以通過把整個系統分解為多個子系統來降低問題的複雜度。
子系統的相互依賴越少,你就越容易在同一時間裡關注問題的一小部分。
精心設計的物件關係使關注點相互分離,從而能每個時刻只專注於一件事。在更高匯聚層次上,包提供了相同的好處。
保持子程式的短小精悍能減少思考的負擔。
高代價,低效率的設計源於下面三種根源:
1.用複雜的方法解決簡單的問題。
2.用簡單但錯誤的方法解決複雜的問題。
3.用不恰當的複雜方法解決複雜的問題。
管理方法:
1.把任何人在同一時間需要處理的本質複雜度的量減到最小。
2.不要讓偶然性的複雜度無謂的快速增長。
理想的設計特徵:
1.最小的複雜度。
2.易於維護
3.鬆散耦合
4.可擴充套件性
5.可重用性
6.高扇入。
7.低扇出。
8.可移植性。
9.精簡性。
10.層次性。
11.標準技術。
設計層次:
1.軟體系統
2.分解為子系統或包
常用的子系統:業務規則,使用者介面,資料庫訪問,對系統的依賴性。
3.分解為類。
4.分解為子程式。
5.子程式內部設計。
5.3設計構造塊:啟發式方法。
找出現實世界中的物件
形成一致的抽象。
封裝實現細節。
當繼承能簡化設計時就繼承。
隱藏秘密。
秘密和隱私權。兩種秘密:隱藏複雜度,隱藏變化源。資訊隱藏的障礙。
找出容易改變的區域。變化區域:業務規則,對硬體的依賴性,輸入輸出,非標準的語言特性,困難的設計區域和構建區域,狀態變數,資料量限制。
保持鬆散耦合。
耦合標準:
規模,模組之間的連線數。
可見性,兩個模組之間的連線的顯著程度。
靈活性,模組之間的連線是否容易改動。
耦合的種類:
簡單資料引數耦合。
簡單物件耦合。
物件引數耦合。
語義上的耦合。
查閱常用的設計模式:
設計模式通過把常見解決方案的細節予以制度化來減少出錯。
設計模式通過提供多種設計方案而帶來啟發性的價值。
設計模式通過把設計對話提公升到乙個更高的層次上來簡化交流。
其他的啟發式方法:
高內聚。
構造分層結構。
嚴格描述類契約。
分配職責。
為測試而設計。
避免失誤。
有意識的選擇繫結時間。
建立**控制點。
考慮使用蠻力突破。
畫乙個圖。
保持設計的模組化。
5.4設計實踐
迭代。設計是一種迭代過程。
你從高層視角中得出的大範圍圖景會有助於你把相關的底層細節納入考慮。你從底層視角中所獲得細節也會為你的高層決策奠定基礎。這種高低層面之間的互動被認為是一種良性的原動力,它所建立的結構要遠遠穩定於單純自上而下或者自下而上建立的結構。
分而治之。
建立試驗性原型。
合作設計。
要做多少設計才夠:最大的設計問題來自於那些我認為是很簡單的,而沒有做出任何設計的區域。
記錄你的設計成果:把設計文件插入到**裡,用wiki來記錄設計討論和決策。寫總結郵件。使用數位相機,保留設計掛圖。使用crc卡片,在適當的細節層建立uml圖。
第五章 軟體構建中的設計
5.1 5.2 設計相關概念 一 理想設計的特徵 設計範疇內的特徵有 1 最小複雜度 設計應該簡單且易於理解。2 易於維護 3 鬆散耦合 合理抽象 封裝 資訊隱藏,設計出相互關聯盡可能少得類。4 可擴充套件性 5 可重用性 6 高扇入 讓大量的類使用某個給定的類 如工具類 7 低扇入 乙個類裡適量使...
第五章 軟體構建中的設計
軟體設計意味著去構思 創造或發明一套方案,把乙份計算機軟體的規格說明書轉變為可實際執行的軟體。設計就是把需求分析和編碼除錯連在一起的活動。設計是乙個險惡的問題 只有通過解決或部分解決才能被明確的問題。設計是個了無章法的過程 即使他能得出清爽的成果 設計就是確定取捨和調整順序的過程。設計受到諸多限制。...
構建之法第五章
構建之法第五章 本章為團隊和流程,主要介紹了典型的軟體團隊模式和開發流程以及它們的優缺點 tsp mvp mbp rup團隊 並不是幾個人湊到一起就叫團隊,稱之為團隊 1 應該有一致的集體目標,團隊要一起完成這目標 2 團隊成員有各自的分工,互相依賴合作,共同完成任務 軟體團隊的模式 1 主治醫師模...