1軟件架構概念
Architecture架構,每個人的理解都不同。
分為組成派和決策派。
組成派:軟件系統的架構將系統描述為計算組件以及組件之間的交互(The architecture of a software system defines that system in term of computational components and interactions among those components. )。更多地關注軟件,分析軟件組成。
決策派:某個軟件或計算機系統的架構是該系統的一個或多個結構,每個結構均由軟件元素、這些元素的外部可見屬性、這些元素之間的關系組成(The software architecture of a program or computing system is the structure or structures of the system, which comprise software elements, the externally visible properties of those elements, and the relationships among them. )。更關注人,歸納了架構決策的類型。
系統、子系統、框架都可以有架構,只是粒度不同。
架構不僅僅是接口的問題,還有並發、部署、性能、安全等因素需要考慮設計方案,而分層很重要,迭代地細化設計,並且靈活應用設計模式。
2架構設計視圖
架構設計需要面向:用戶、客戶、開發人員、管理人員等,為項目相關不同人員而設計。
物理視圖+邏輯視圖。
使用分而治之和迭代式設計(而非瀑布式)。
經歷設計在前,成為架構師在后。
盡量找機會看看別人的設計成果、多體會別人的設計過程、多試着自己來設計設計。
3架構設計過程
程序員向架構師轉型難在哪里?難在必須要能開始“試着做起來”,並慢慢積累感覺,進而積累經驗。
洞察節奏3個原則:1、看透需求(基礎);2、架構大方向正確(確定正確的概念架構);3、設計好架構的各個方面(通過多視圖方法“細化架構”,通過“架構原型”驗證架構)。
看透需求:需求要全(功能需求、質量需求、約束需求),矛盾關系,追溯關系(如追溯系統目標)。
架構大方向正確:概念架構,是策略,如架構模式、集成技術選型。(重要!!!直指系統設計目標的設計思想和重大選擇,是關乎任何復雜系統成敗的最關鍵的指向性的設計。對比分析幾種可能的概念架構)
設計好架構的各個方面:架構師必須具備“忘卻”的能力,避免設計太多具體的技術細節,5視圖。
有經驗的架構師不會一上來就關注如何定義“接口”,他們在大型系統架構設計的早期比較注重識別:重大需求;特色需求;高風險需求;據此來決定如何划分頂級子系統,采用什么架構風格和開發技術,集成是否要支持,二次開發是否要支持(1個決定4個選型)。
掌握過程6個步驟:(1)需求分析(2)領域建模(3)確定關鍵需求(4)概念架構設計(5)細化架構設計(模塊+接口)(6)架構驗證(對后續工作產生重大影響返工代價很高的任何工作都應該進行驗證,包括需求和架構設計方案)。
領域建模:以提煉領域概念,建立領域模型為目的的活動。精髓是“業務決定功能,功能決定模型”。領域建模活動的輸入:功能和可擴展性具體要求。
4需求分析
願景分析:要解決項目、產品或解決方案的起源問題。所謂明確願景,就是針對系統目標、主要特性、功能范圍、成功要素等進行構思並達成一致。(需求分析,得到需求文檔)
願景=業務目標+規范+Feature+上下文圖。
《軟件需求規格說明書》(Software Requirements Specification, SRS)需求分層次,需求分不同方面。
ADMEMS矩陣(需求層次-需求方面矩陣)
軟件質量:運行期質量屬性和開發期質量屬性。(性能,安全性,易用性,持續可用性,可伸縮性,互操作性,可靠性,魯棒性,易理解性,可擴展性,可重用性,可測試性,可維護性,可移植性)
約束需求=業務環境因素+使用環境因素+構建環境因素+技術環境因素
需求=功能+質量+約束
6細化架構設計
5個視圖。15個設計任務。
邏輯架構(模塊划分、接口定義、領域模型)。
開發架構(技術選型、文件划分、編譯關系)。
運行架構(技術選型、控制流划分、同步關系)。
物理架構(硬件分布、軟件部署、方案優化)。
數據架構(技術選型、存儲格式、數據分布)。