官术网_书友最值得收藏!

第21章 架構(gòu)驅(qū)動力

不管你采用哪種流程(傳統(tǒng)和計劃驅(qū)動,或者輕量和可適配的),都有一套常見的東西真正驅(qū)動、影響和塑造了最終的軟件架構(gòu)。

1.功能需求

為了設(shè)計軟件,你需要了解要滿足的目標。如果這聽起來天經(jīng)地義,那是因為確實如此。話雖如此,但有的團隊對軟件應(yīng)該向最終用戶提供的特性還沒有高層次理解,就設(shè)計甚至構(gòu)建軟件。有人可能會稱之為敏捷,但我說這叫愚蠢。特性或用戶故事清單(比如Scrum產(chǎn)品訂單http://en.wikipedia.org/wiki/Scrum_%28software_development%29#Product_backlog),即使粗糙短小,也是必不可少的。需求驅(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)的重要決策而言,起點是在高層次上對需求、約束和原則的理解。早些理解它們,將有助于避免將來昂貴的返工。

主站蜘蛛池模板: 岗巴县| 辽宁省| 林州市| 招远市| 日喀则市| 缙云县| 巧家县| 庄浪县| 山东省| 岳池县| 阳春市| 锦屏县| 周宁县| 商城县| 临澧县| 高要市| 福贡县| 天柱县| 绩溪县| 呼伦贝尔市| 逊克县| 内丘县| 庆阳市| 东莞市| 固阳县| 千阳县| 鄢陵县| 紫金县| 岳普湖县| 咸丰县| 伊金霍洛旗| 金川县| 珲春市| 彭水| 宁陵县| 高台县| 龙游县| 察雅县| 崇礼县| 铜陵市| 那坡县|