軟體設計的切入點是什麼?如何從最初的需求提取出一個粗粒度的軟體結構?
一切設計的切入點是什麼呢?我們必須從最初的需求和約束條件的混沌中提取出一個粗粒度的軟體結構,然後再把它劃分為構成待開發系統的有實際意義的各個部分,這就形成了一個清晰的初期概念設計,並形成一種理性、深入、細膩及智慧的設計風格。
“頂層架構設計”相關模式的思維導圖如下。
分散式系統模式語言的根模式和切入點。這些模式有助於我們從最初的需求和約束條件的混沌中提取出一個粗粒度的軟體結構,然後再把它劃分為構成待開發系統的有實際意義的各個部分。
1)憑直覺設計容易形成大泥球
要設計出可持續軟體,必須關注質量的幾個關鍵因素,包括:執行方面質量因素(如效能和可用性)和開發方面質量因素(如擴充套件性和可維護性)。
設計大的分散式系統很容易讓它變得複雜。剛開始,我們所擁有的只是關於要開發的軟體系統的一系列需求和約束條件,或者是一個不成熟的開發方案。如果只是憑著直覺來設計,其結果很可能是“一個大泥球”、一個設計和編碼都很混亂的軟體,這會導致最終無法分辨其內在的元素。
這一類軟體難於理解、維護和改進,並且隨著時間的流逝很容易在穩定性、效能、可伸縮性.以及其它核心執行架構質量上陷入困境。
2)結構應該易於理解
決定軟體開發成功與否的一個重要因素是結構。結構應該易於被開發人員理解,應該對系統及其開發所面臨的壓力具有彈性,應該支援圍繞它而推進的開發過程,應該兼顧使用並維護它的組織和個體的需求。
簡單的說,這種結構應該給軟體系統的開發人員和其他相關人員提供一個良好的環境。然而,如果軟體的結構設計沒有遠見和適當的指導,它就很容易變得混亂,而且還會導致不僅系統的全域性難以把握,甚至區域性也是難以把握,其表現在於程式碼中充滿零碎的細節和假設而難以理解。
3)需要一個粗粒度的概念設計
因此,在這樣的軟體開發過程中,我們需要一個粗粒度的系統概念,在抽象和分離這兩個手段的幫助下,可以暫時忽略不必要的細節,在更廣的層次上組織系統的核心概念。這種概念設計需要考慮兩個層面的問題:
客戶需求:軟體必須是對系統應用領域來說是有意義的表現。特別是系統提供的功能需求和質量特性必須支援具體的業務,否則對使用者來說這樣的設計就沒有實際價值。
生態環境:系統設計更進一步考慮的問題是生態環境。我們是處於一個不斷變化的世界中,需求的變化不可避免。變化可能是因為質量上的新要求、新的的功能需求加入、業務流程的改變、具體業務演算法的選擇、以及系統表現層的不同選項等。如果不能明確地知道應用領域中哪些東西會發生變化,或者軟體必須支援什麼樣的變化,就很難為軟體系統或產品提供適當層次和程度的靈活性。
作為整個設計的入口,必須應對上述挑戰,從而不僅反映軟體系統的功能需求,還能為技術架構的進一步細化打下堅實的基礎。
“頂層架構設計”相關模式的思維導圖如下。
分散式系統模式語言的根模式和切入點。這些模式有助於我們從最初的需求和約束條件的混沌中提取出一個粗粒度的軟體結構,然後再把它劃分為構成待開發系統的有實際意義的各個部分。
1)憑直覺設計容易形成大泥球
要設計出可持續軟體,必須關注質量的幾個關鍵因素,包括:執行方面質量因素(如效能和可用性)和開發方面質量因素(如擴充套件性和可維護性)。
設計大的分散式系統很容易讓它變得複雜。剛開始,我們所擁有的只是關於要開發的軟體系統的一系列需求和約束條件,或者是一個不成熟的開發方案。如果只是憑著直覺來設計,其結果很可能是“一個大泥球”、一個設計和編碼都很混亂的軟體,這會導致最終無法分辨其內在的元素。
這一類軟體難於理解、維護和改進,並且隨著時間的流逝很容易在穩定性、效能、可伸縮性.以及其它核心執行架構質量上陷入困境。
2)結構應該易於理解
決定軟體開發成功與否的一個重要因素是結構。結構應該易於被開發人員理解,應該對系統及其開發所面臨的壓力具有彈性,應該支援圍繞它而推進的開發過程,應該兼顧使用並維護它的組織和個體的需求。
簡單的說,這種結構應該給軟體系統的開發人員和其他相關人員提供一個良好的環境。然而,如果軟體的結構設計沒有遠見和適當的指導,它就很容易變得混亂,而且還會導致不僅系統的全域性難以把握,甚至區域性也是難以把握,其表現在於程式碼中充滿零碎的細節和假設而難以理解。
3)需要一個粗粒度的概念設計
因此,在這樣的軟體開發過程中,我們需要一個粗粒度的系統概念,在抽象和分離這兩個手段的幫助下,可以暫時忽略不必要的細節,在更廣的層次上組織系統的核心概念。這種概念設計需要考慮兩個層面的問題:
客戶需求:軟體必須是對系統應用領域來說是有意義的表現。特別是系統提供的功能需求和質量特性必須支援具體的業務,否則對使用者來說這樣的設計就沒有實際價值。
生態環境:系統設計更進一步考慮的問題是生態環境。我們是處於一個不斷變化的世界中,需求的變化不可避免。變化可能是因為質量上的新要求、新的的功能需求加入、業務流程的改變、具體業務演算法的選擇、以及系統表現層的不同選項等。如果不能明確地知道應用領域中哪些東西會發生變化,或者軟體必須支援什麼樣的變化,就很難為軟體系統或產品提供適當層次和程度的靈活性。
作為整個設計的入口,必須應對上述挑戰,從而不僅反映軟體系統的功能需求,還能為技術架構的進一步細化打下堅實的基礎。
相關文章
- 什麼是軟體架構設計?- Grady架構
- 軟體架構師必讀!什麼是設計?如何進行設計?架構
- 軟體架構1.什麼是軟體架構架構
- 什麼是好的軟體
- 嵌入式軟體開發的特點、設計流程、嵌入式軟體的結構
- 軟體設計是怎樣煉成的(1)——什麼是優秀的設計?
- 軟體開發的是什麼
- 什麼是Poly軟體架構?架構
- 什麼是軟體架構(轉)架構
- [軟體人生]什麼是程式設計師程式設計師
- [技術討論]什麼是最好的軟體設計方法
- 軟體設計是怎樣煉成的(2)——優秀設計從分析需求開始
- BI軟體是做什麼用的,有哪些好用的BI軟體?
- 中介軟體是什麼?Linux中介軟體是什麼意思?Linux
- 軟體架構, 軟體框架,設計模式的區別架構框架設計模式
- 好用的代理ip軟體是什麼?
- 軟體測試是幹什麼的
- [軟體人生]什麼是男人的心胸
- 什麼是軟體測試架構架構
- 如何設計一個簡單的訊息中介軟體
- 勒索軟體即服務(RaaS)是什麼?這個模型是如何工作的?模型
- 一個好的設計簽名軟體
- 軟體測試用例設計中的結構設計
- 軟體設計是怎樣煉成的(4)——軟體設計的“大道理”
- 作為一個開源軟體的作者是一種什麼樣的感受?
- 什麼是軟體工程?軟體工程
- pl是什麼軟體
- Prisma是什麼軟體?
- 什麼是中介軟體?
- 什麼是CRM軟體
- 探尋軟體架構的本質,到底什麼是架構?架構
- 探尋軟體架構的本質,到底什麼是架構架構
- 軟體結構設計,具體分為幾個步驟?
- 什麼是工時表軟體 它是如何運作的?
- 軟體的效能設計(一)介面設計對軟體效能的影響 (轉)
- 什麼是SAP中介軟體的CSA queue
- 什麼是軟體測試架構師架構
- 最好用的遠端桌面軟體,最好用的遠端桌面軟體是什麼?該如何使用?