- 程序員必讀之軟件架構(gòu)
- (英)Simon Brown
- 971字
- 2020-05-06 16:48:13
第21章 架構(gòu)驅(qū)動力
不管你采用哪種流程(傳統(tǒng)和計劃驅(qū)動,或者輕量和可適配的),都有一套常見的東西真正驅(qū)動、影響和塑造了最終的軟件架構(gòu)。
1.功能需求
為了設(shè)計軟件,你需要了解要滿足的目標。如果這聽起來天經(jīng)地義,那是因為確實如此。話雖如此,但有的團隊對軟件應(yīng)該向最終用戶提供的特性還沒有高層次理解,就設(shè)計甚至構(gòu)建軟件。有人可能會稱之為敏捷,但我說這叫愚蠢。特性或用戶故事清單(比如Scrum產(chǎn)品訂單),即使粗糙短小,也是必不可少的。需求驅(qū)動架構(gòu)。
2.質(zhì)量屬性
非功能需求代表的質(zhì)量屬性反映了服務(wù)等級,如性能、可伸縮性、可用性、安全性等。這些屬性主要是技術(shù)方面的,可以對最終的架構(gòu)產(chǎn)生巨大影響,特別是如果你正在構(gòu)建“高性能”系統(tǒng),或者你想達到“谷歌級”的運行規(guī)模。實現(xiàn)非功能需求的技術(shù)解決方案通常是交叉的,因此需要合并到你所構(gòu)建系統(tǒng)的基礎(chǔ)中。向已有的代碼庫加入高性能、可伸縮性、安全性、可用性等通常極其困難且耗時。
3.約束
我們生活在有約束的現(xiàn)實世界中。例如,你任職的組織可能對技術(shù)選型、部署平臺等有一系列細致的約束,能做什么,不能做什么。
4.原則
約束通常是強加于你的,而原則是你為了將一致性和清晰度引入最終代碼庫而想采用的原則(例如編碼規(guī)范、自動化測試的使用等)或架構(gòu)的原則(如分層策略,架構(gòu)模式等)。
5.理解影響
任何時候當你開始為一個新的軟件系統(tǒng)工作或擴展已有的軟件系統(tǒng),在高層次上理解需求、約束和原則都至關(guān)重要。為什么?簡言之,要開始設(shè)計選型,這是你所需知識的基本水平。
首先,了解這些東西可以幫助減少擺在你面前的可選項,特別是如果你發(fā)現(xiàn)驅(qū)動力包括了復(fù)雜的非功能性需求或者像部署平臺的限制之類的主要約束。T. S.艾略特(T. S. Eliot)說過:
當被迫工作在一個嚴格的框架下,想象力被迫發(fā)揮到極限,迸發(fā)出豐富的點子。完全的自由可能會讓工作變得雜亂無序。
其次,也許是最重要的,那就是根據(jù)特定的目標和語境,做出“明智”的設(shè)計決策。如果不了解金融風險系統(tǒng)相關(guān)的性能(比如計算復(fù)雜度)、可伸縮性(比如數(shù)據(jù)量)、安全性和審計等需求,就開始為其設(shè)計解決方案,你設(shè)計出的解決方案很可能不符合目標。
軟件架構(gòu)談?wù)摰氖侵匾脑O(shè)計決策,其重要性以變動的成本來衡量。對于那些從根本上塑造了最終軟件架構(gòu)的重要決策而言,起點是在高層次上對需求、約束和原則的理解。早些理解它們,將有助于避免將來昂貴的返工。
- Spring源碼深度解析
- CAE分析大系:ANSYS?Workbench結(jié)構(gòu)分析與實例詳解
- Docker源碼分析
- 知行合一: 實現(xiàn)價值驅(qū)動的敏捷和精益開發(fā)
- 中文版Revit 2018基礎(chǔ)培訓教程(全彩版)
- 微服務(wù)架構(gòu)原理與開發(fā)實戰(zhàn)
- 軟件架構(gòu)的藝術(shù)
- CATIA V5 從入門到精通(第二版)
- Visual Basic編程寶典(十年典藏版)
- 項目實踐精解:基于EJB 3.0和Web Services的Java應(yīng)用開發(fā)
- 精益軟件度量——實踐者的觀察與思考
- 軟件研發(fā)行業(yè)創(chuàng)新實戰(zhàn)案例解析
- Bootstrap實戰(zhàn)
- Unity 3D游戲開發(fā)技術(shù)詳解與典型案例
- UG NX 8.0實例教程(第2版)