本書討論如下內(nèi)容:
- 架構(gòu)模式:許多架構(gòu)決策的技術(shù)基礎(chǔ)。
- 組件:識(shí)別款青、耦合做修、內(nèi)聚、分區(qū)和粒度抡草。
- 軟技能:有效的團(tuán)隊(duì)管理饰及、會(huì)議、談判康震、演示等燎含。
- 現(xiàn)代性:在過(guò)去幾年中發(fā)生了根本性變化的工程實(shí)踐和操作方法。
- 架構(gòu)作為一門工程學(xué)科:可重復(fù)的結(jié)果腿短、指標(biāo)和具體的評(píng)估為軟件體系結(jié)構(gòu)增加了嚴(yán)格性屏箍。
"軟件架構(gòu)師"職位出現(xiàn)在眾多最佳職位列表的頂部。但卻沒(méi)有科學(xué)的方法教授如何成為架構(gòu)師的原因橘忱?
- 首先赴魁,業(yè)界對(duì)軟件架構(gòu)本身沒(méi)有很好的定義。
- 第二钝诚,軟件架構(gòu)師的角色的職責(zé)范圍不斷地?cái)U(kuò)大颖御。
- 第三,由于快速發(fā)展的軟件開發(fā)生態(tài)系統(tǒng)凝颇,軟件架構(gòu)的目標(biāo)不斷發(fā)生變化潘拱。
- 第四,關(guān)于軟件架構(gòu)的許多材料都已成為過(guò)去時(shí)拧略。
軟件架構(gòu)由系統(tǒng)的結(jié)構(gòu)(表示支持架構(gòu)的粗黑線)和系統(tǒng)必須支持的架構(gòu)特征(``-ilities'')芦岂、架構(gòu)決策以及最終的設(shè)計(jì)原則組成。
系統(tǒng)的結(jié)構(gòu)是指系統(tǒng)所實(shí)現(xiàn)的架構(gòu)樣式的類型(如微服務(wù)垫蛆,分層或微內(nèi)核)盔腔。 僅通過(guò)結(jié)構(gòu)來(lái)描述架構(gòu)并不能完全闡明架構(gòu)。
架構(gòu)特征是定義軟件架構(gòu)的另一個(gè)維度。 架構(gòu)特征定義了系統(tǒng)的成功標(biāo)準(zhǔn)弛随,該標(biāo)準(zhǔn)通常與系統(tǒng)的功能正交瓢喉。 請(qǐng)注意,列出的所有特征都不需要了解系統(tǒng)功能舀透,但是它們是使系統(tǒng)正常運(yùn)行所必需的栓票。
架構(gòu)決策定義了應(yīng)如何構(gòu)建系統(tǒng)的規(guī)則。
如果由于某種條件或其他約束而無(wú)法在系統(tǒng)的某個(gè)部分中實(shí)施特定的體系結(jié)構(gòu)決策愕够,則可以通過(guò)稱為方差的方法打破該決策(或規(guī)則)走贪。 大多數(shù)組織都有架構(gòu)審查委員會(huì)(ARB)或首席架構(gòu)師使用的差異模型。 這些模型將尋求與特定標(biāo)準(zhǔn)或架構(gòu)決策的差異的過(guò)程形式化惑芭。 ARB將分析特定架構(gòu)決策的例外情況(如果沒(méi)有ARB坠狡,則由首席架構(gòu)師進(jìn)行分析),并根據(jù)理由和權(quán)衡取舍批準(zhǔn)或拒絕該例外情況遂跟。
設(shè)計(jì)原則與體系結(jié)構(gòu)決定的不同之處在于逃沿,設(shè)計(jì)原則是一種準(zhǔn)則,而不是一成不變的規(guī)則幻锁。
與給定的角色凯亮,職務(wù)或職位描述無(wú)關(guān),對(duì)軟件架構(gòu)師有八項(xiàng)核心期望:
- 制定架構(gòu)決策
期望架構(gòu)師定義用于指導(dǎo)團(tuán)隊(duì)哄尔、部門或整個(gè)企業(yè)的技術(shù)決策的架構(gòu)決策和設(shè)計(jì)原則假消。 - 持續(xù)分析架構(gòu)
期望架構(gòu)師不斷分析架構(gòu)和當(dāng)前技術(shù)環(huán)境,然后提出改進(jìn)建議岭接。 - 緊跟最新趨勢(shì)
希望建筑師能夠了解最新的技術(shù)和行業(yè)趨勢(shì)富拗。 - 確保遵守決定
期望架構(gòu)師確保遵守架構(gòu)決策和設(shè)計(jì)原則。 - 多樣的曝光和經(jīng)驗(yàn)
架構(gòu)師應(yīng)具有多種多樣的技術(shù)鸣戴、框架媒峡、平臺(tái)和環(huán)境。 - 具有業(yè)務(wù)領(lǐng)域知識(shí)
架構(gòu)師應(yīng)具備一定水平的業(yè)務(wù)領(lǐng)域?qū)I(yè)知識(shí)葵擎。 - 具有人際交往能力
建筑師應(yīng)具備出色的人際交往能力谅阿,包括團(tuán)隊(duì)合作、促進(jìn)和領(lǐng)導(dǎo)才能酬滤。 - 了解和駕馭政治
期望架構(gòu)師了解企業(yè)的政治氛圍并能夠駕馭政治签餐。
架構(gòu)交叉點(diǎn)
- 工程實(shí)踐
傳統(tǒng)上,軟件體系結(jié)構(gòu)與用于創(chuàng)建軟件的開發(fā)過(guò)程是分開的盯串。 存在數(shù)十種流行的方法來(lái)構(gòu)建軟件氯檐,包括瀑布式和許多敏捷的風(fēng)格(例如Scrum方法、極限編程体捏、精益和Crystal方法)冠摄,這些方法大部分不會(huì)影響軟件體系結(jié)構(gòu)糯崎。 - 運(yùn)維/DevOps
由于對(duì)架構(gòu)公認(rèn)的一些重新思考,DevOps的出現(xiàn)是架構(gòu)與相關(guān)領(lǐng)域之間最近最明顯的交集河泳。 多年以來(lái)沃呢,許多公司都將運(yùn)維視為與軟件開發(fā)分開的功能。 他們通常將運(yùn)維外包給另一家公司以節(jié)省成本拆挥。 在1990年代和2000年代設(shè)計(jì)的許多架構(gòu)都假定架構(gòu)師無(wú)法控制運(yùn)維薄霜,并且圍繞該限制進(jìn)行防御性的構(gòu)建。 - 流程
另一個(gè)公理是纸兔,軟件架構(gòu)通常與軟件開發(fā)過(guò)程正交惰瓜。構(gòu)建軟件(過(guò)程)的方式對(duì)軟件架構(gòu)(結(jié)構(gòu))的影響很小。因此汉矿,盡管團(tuán)隊(duì)使用的軟件開發(fā)過(guò)程對(duì)軟件架構(gòu)有一定影響(特別是在工程實(shí)踐方面)崎坊,但從歷史上看,它們大多是分開的洲拇。大多數(shù)有關(guān)軟件架構(gòu)的書都忽略了軟件開發(fā)過(guò)程奈揍,對(duì)可預(yù)測(cè)性等問(wèn)題做出了虛假的假設(shè)。但是呻待,團(tuán)隊(duì)開發(fā)軟件的過(guò)程會(huì)影響軟件架構(gòu)的許多方面。例如队腐,由于軟件的性質(zhì)蚕捉,在過(guò)去的幾十年中,許多公司都采用了敏捷開發(fā)方法柴淘。敏捷項(xiàng)目中的架構(gòu)師可以進(jìn)行迭代開發(fā)迫淹,因此可以更快地反饋決策。反過(guò)來(lái)为严,這使架構(gòu)師可以更加積極地進(jìn)行實(shí)驗(yàn)以及依賴反饋的其他知識(shí)敛熬。 - 數(shù)據(jù)
應(yīng)用程序開發(fā)中有很大一部分包括外部數(shù)據(jù)存儲(chǔ),通常是關(guān)系數(shù)據(jù)庫(kù)(或越來(lái)越多的NoSQL)第股。 但是应民,許多有關(guān)軟件架構(gòu)的書都只包含對(duì)架構(gòu)這一重要方面的簡(jiǎn)要介紹。 代碼和數(shù)據(jù)具有共生關(guān)系:沒(méi)有其他代碼夕吻,一個(gè)代碼就無(wú)用诲锹。
軟件架構(gòu)法則
軟件體系結(jié)構(gòu)中的所有內(nèi)容都是一個(gè)折衷方案。 ——軟件架構(gòu)第一定律
為什么比如何更重要涉馅。 ——軟件架構(gòu)第二定律