架構設計是分與合的藝術
通讀並總結了溫昱老師的《軟體架構設計》,並有幸聽過李哲珠博士對架構設計的講解。對其讀後的自我領悟並提煉出核心內容分享出來,希望從思想高度上能提公升你對軟體架構設計的認知。
架構設計
架構設計不等於框架設計,框架也可能有架構,所有的原子元件(被拆分的模組)都需要架構設計,所有元件可以組合成復合元件,組合而成的元件也有自己的架構。最簡單的架構模式就是介面卡模式,因為原子元件隨時可能被替換,或介面不統一。
兩檢視法
三個原則
架構新手和有經驗的架構師的區別之一,在於是否懂得、並能有效地進行概念架構的設計。作為架構新手,尤其害怕碰上自己沒做過的系統;系統較大時,一旦祭出「架構 = 模組 + 介面」的法寶卻不太奏效,架構新手就往往亂了陣腳。相反,有經驗的架構師不會一上來就關注如何定義「介面」,他們在大型系統架構設計的早期比較注重識別1)重大需求、2)特色需求、3)高風險需求,據此來決定如何劃分頂級子系統、採用什麼架構風格和開發技術、整合是否要支援、二次開發是否要支援。
六個成果
三大階段,分別遵守三個原則,六大步驟可以得到六個成果(每一階段兩個步驟)。
一定要全,必須涵蓋功能、質量、約束這三個方面
兩縱:第一,溝通功能需求。第二,確定非功能需求(效能需求、便利性需求、友好性需求)
三橫:第一,上下文圖(待開發系統作為黑盒在中心,周邊都關聯了哪些系統、環境和活動)
業務決定功能,功能決定模型
領域建模的目的:透過問題領域的重重現象,捕捉其背後最為穩固的領域概 念,以及這些概念之間的關係。在專案前期,所建立的領域模型將為所有團 隊成員之間、團隊成員和客戶之間的交流提供共同認可的語言核心。
領域建模的形式:可以用類圖或者狀態圖也可以用文字
類圖:描述靜態的關係(一對
一、一對多、多對多。繼承,關聯等)
狀態圖:描述動態的變化(從某乙個狀態變為另乙個狀態,能做哪些功能,在靜態完成後著重考慮)。此項分析能夠挖掘更多的需求,避免後期的變更(例如:公司-僱傭-雇員,因為雇員會有狀態的變化,所以產生僱傭)
文字:直接描述乙個具體的模型(位數、格式等規則)
關鍵需求決定架構,其餘需求驗證架構
對功能需求和非功能需求進行篩選,最終確定對軟體架構起關鍵做用的需求子集(佔總需求的20%左右)
確定關鍵質量:確定關鍵質量時考慮質量數型之間的矛盾關係:效能-安全性
確定關鍵功能:關鍵功能涉及(或串起)的模組最多、協作方式最有代表性
關鍵需求受專案級別影響(部門級應用、企業級應用、集團級應用),同乙個專案關鍵需求可能不同
是直指系統設計目標的設計思想合重**擇
是關乎任何複雜系統成敗的最關鍵的、指向性的設計
如何劃分頂級子系統(面向整合的整合模組、為效能把訪問資源隔離的各個子系統)
架構風格選型(b/s、c/s、b/s+c/s。。。是最簡單的風格)
開發技術選型
整合技術選型
二次開發技術選型
利用五檢視法進行設計
乙個真正可以執行的應用程式
五檢視法
複雜的專案,兩檢視法就不夠用了
模組劃分
水平分層
通用模組、通用機制
來自需求
介面定義:模組或子系統之間的通訊介面
領域模型
技術選型
開發語言
開發工具
技術框架、第三封類庫
檔案劃分
編譯關係
硬體分布
單板機微控制器專用機
pc伺服器
拓撲結構
網路型別
匯流排規範
軟體部署
桌面軟體安裝
燒寫嵌入式系統
部署web應用
方案優化
高效能(付出)
可用性【持續可用性/高可用性】(付出)
伸縮性(付出)
經濟性(節約)
可行性(節約)
易維護性(節約)
技術選型
程序執行緒中斷服務程式(嵌入式應用的併發機制)
控制流劃分
同步關係:資源爭搶時需要加鎖
技術選型
關聯式資料庫
非關聯式資料庫
flash
(分布式)檔案
儲存格式
資料分布
《軟體架構設計》是2023年電子工業出版社出版,溫昱編著的書籍。本書可作為計算機軟體專業本科生、研究生和軟體工程碩士的軟體架構設計教材,也可作為軟體開發高階培訓、軟體開發管理培訓的培訓教材,更是第一線高階開發人員和開發管理人員的必備參考書。學習架構知識首先要提公升看問題的高度,而且不能天馬行空或者拿來主義,一定要學習方**。思想和方法都已經告訴給大家了,附贈常用架構風格表:
架構漫談 軟體架構師
通過對架構漫談九篇部落格的閱讀,我了解到了軟體架構以及軟體架構師的工作狀況等內容 對於架構,我的理解是,在乙個系統中,存在乙個系統中多個角色共有的問題,為了更快更好地解決問題,將問題進行拆分,交由不同的角色來完成,並在各角色中建立溝通機制,進行有機的聯絡,總成乙個整體,完成目標系統的工作。了解到架構...
軟體架構師
軟體企業中有乙個角色叫做軟體架構師,不同公司或者不同的環境下,對該職位的定位可能不盡相同。微軟首席架構師ray ozzie 對自己職位的一些看法,倒是給人很多啟發 1.不管是設計一座橋梁還是一幢大廈,你是在特定的情況下應用各種設計模式 2.在做程式設計師的時候你要花時間讓自己理解各種不同的模式,並能...
軟體架構師
軟體企業中有乙個角色叫做軟體架構師,不同公司或者不同的環境下,對該職位的定位可能不盡相同。微軟首席架構師ray ozzie 對自己職位的一些看法,倒是給人很多啟發 1.不管是設計一座橋梁還是一幢大廈,你是在特定的情況下應用各種設計模式 2.在做程式設計師的時候你要花時間讓自己理解各種不同的模式,並能...