架构之美-读书笔记之一
每次讀第一章都覺得不是很好懂,這些概念在別的地方都見過,唯一讓我覺得新穎的和流連忘返的就是品質(zhì)關(guān)注點(diǎn)與功能需求的論述,先后關(guān)系。一般寫程序,首先考慮的是功能分解,模塊分解,實(shí)現(xiàn),然后根據(jù)實(shí)際場(chǎng)景,再做出一些隱含的、默認(rèn)的品質(zhì)需求決定,無書面的思考和確認(rèn),而本書明確提出的品質(zhì)關(guān)注點(diǎn),并理順其中的關(guān)系,讓設(shè)計(jì)三思而后行。
架構(gòu)之美 第一章
什么是架構(gòu)?
架構(gòu)應(yīng)該是一組結(jié)構(gòu),來源于一組設(shè)計(jì)規(guī)則,能減少?gòu)?fù)雜性。常見定義是,每種結(jié)構(gòu)由各種類型的組件和關(guān)系組成,它們?nèi)绾谓M合、相互調(diào)用、通信、同步、及其其他交互。
以我的理解,簡(jiǎn)單講:組件及組件間的關(guān)系。
架構(gòu)存在的目的是什么?
確保利益相關(guān)人員的關(guān)注點(diǎn)能夠得到滿足,而在構(gòu)想、計(jì)劃、構(gòu)建和維護(hù)系統(tǒng)時(shí),系統(tǒng)架構(gòu)能夠處理復(fù)雜性。
為了對(duì)付復(fù)雜性,系統(tǒng)被分解為一些交互的組件。
而每種結(jié)構(gòu)都有特定的關(guān)注點(diǎn),如可變性和性能。各種關(guān)注點(diǎn)需要相互妥協(xié)、折中。
而架構(gòu)師的工作就是:
1)滿足客戶需要
2)整個(gè)系統(tǒng)應(yīng)用相同的設(shè)計(jì)原則
3)滿足法規(guī)和安全性需求
架構(gòu)與需求的關(guān)系?
外部行為的描述,展示了產(chǎn)品如何與它的用戶、其他系統(tǒng)和外部設(shè)備之間的交互,這應(yīng)該表現(xiàn)為需求。
結(jié)構(gòu)描述,展示了產(chǎn)品如何劃分為多個(gè)部分,以及這些部分的關(guān)系
內(nèi)部行為描述,用于描述組件之間的交互接口
需求一般理解為系統(tǒng)的功能,但其隱含的品質(zhì)性要求,也需要架構(gòu)考慮。
架構(gòu)與設(shè)計(jì)的關(guān)系?
這個(gè)是針對(duì)架構(gòu)師和開發(fā)者的工作區(qū)別而言。
架構(gòu)是系統(tǒng)設(shè)計(jì)的一部分,架構(gòu)忽略了系統(tǒng)的一些細(xì)節(jié),更側(cè)重于系統(tǒng)如何組裝起來。而開發(fā)者更側(cè)重中部分組件的設(shè)計(jì),不用太注意系統(tǒng)組件的裝配問題。
如何創(chuàng)建一個(gè)架構(gòu)?
兩個(gè)優(yōu)秀的實(shí)踐:
1. 讓利益相關(guān)人參與
2. 同時(shí)關(guān)注功能和品質(zhì)
典型的利益相關(guān)人員:
1. 投資人、老板: 項(xiàng)目需要的資源、能否在工期內(nèi)完成
2. 項(xiàng)目經(jīng)理: 團(tuán)隊(duì)、項(xiàng)目計(jì)劃、項(xiàng)目進(jìn)度
3. 架構(gòu)師、開發(fā)、測(cè)試人員: 項(xiàng)目的構(gòu)建、以及維護(hù)和演進(jìn)
4. 市場(chǎng)人員: 品質(zhì)特點(diǎn),超越競(jìng)爭(zhēng)者
5. 用戶(包括最終用戶、安裝、管理等人員): 可用性
架構(gòu)師需要與利益相關(guān)人員協(xié)作,理解他們的品質(zhì)關(guān)注點(diǎn),然后考慮折中,排列優(yōu)先級(jí)。
如:
1. 安全性和性能。如對(duì)信息加密將加強(qiáng)安全性,但會(huì)損失性能。
2. 可變性與可用性。如利用配置文件,可以增加可變性,但會(huì)降低可用性。以及如何創(chuàng)建配置文件的格式。
為什么要首先給品質(zhì)關(guān)注點(diǎn)排優(yōu)先級(jí)?而不是從功能需求開始?
因?yàn)橄到y(tǒng)的功能分解通常有很多種方式,如從數(shù)據(jù)模型出發(fā),和從業(yè)務(wù)模型出發(fā)會(huì)得到不同的系統(tǒng)架構(gòu),極端情況下,系統(tǒng)無分解,被開發(fā)成單一的軟件,可能會(huì)滿足所有需求,但不滿足品質(zhì)關(guān)注點(diǎn)。如可變性、可擴(kuò)展性、可維護(hù)性、可伸縮性等。
1. 可變性。將系統(tǒng)內(nèi)的參數(shù),轉(zhuǎn)移到配置文件中,便于修改。
2. 可以伸縮性、性能。將系統(tǒng)從單機(jī)遷移到分布式部署,從單線程轉(zhuǎn)移到多線程。
1)功能性(Functionality)
產(chǎn)品要像他們的用戶提供哪些功能?
2)可變性(Changeability)
軟件將來可能需要哪些改變?哪些改變不太可能發(fā)生,不需要特別容易進(jìn)行這些改變?
3)性能(Performance)
產(chǎn)品將達(dá)到什么樣的性能?
4)容量(Capacity)
多少用戶將并發(fā)使用該系統(tǒng)?該系統(tǒng)將為用戶保存多少數(shù)據(jù)?
5)生態(tài)系統(tǒng)(Ecosystem)
在部署的生態(tài)環(huán)境中,該系統(tǒng)將與其他系統(tǒng)進(jìn)行哪些交互?
6)模塊化(Modularity)
如何將編寫軟件的任務(wù)分解為工作指派(模塊),特別是這些模塊可以獨(dú)立地開發(fā),并能夠準(zhǔn)確而容易地滿足彼此需要?
7)可構(gòu)建性(Buildability)
如何將軟件構(gòu)建為一組組件,并能夠獨(dú)立實(shí)現(xiàn)和驗(yàn)證這些組件?哪些組件應(yīng)該復(fù)用其他的產(chǎn)品,哪些應(yīng)該從外部供應(yīng)商處獲得?
8)產(chǎn)品化(Producibility)
如果產(chǎn)品將以集中變體的形式存在,如何開發(fā)一個(gè)產(chǎn)品線,并利用這些變體的共性?產(chǎn)品線中的產(chǎn)品以怎樣的步驟開發(fā)?在創(chuàng)建一條產(chǎn)品線時(shí),要進(jìn)行哪些投資?開發(fā)產(chǎn)品線中不同的變體的選擇,預(yù)期會(huì)得到怎樣的回報(bào)?
特別是是否可能先開發(fā)最小的有用產(chǎn)品然后再添加(擴(kuò)展)組件,在不改變以前編寫的代碼的情況下,開發(fā)產(chǎn)品線的其他成員?
9)安全性(Security)
產(chǎn)品是否需要用戶認(rèn)證,或者必須限制對(duì)數(shù)據(jù)的訪問?數(shù)據(jù)的安全性如何得到保證?如何抵擋“拒絕服務(wù)”工具或者其他攻擊?
常見的幾種架構(gòu)的結(jié)構(gòu) 1. 信息隱藏結(jié)構(gòu)。 ?包含關(guān)系 2. 使用結(jié)構(gòu)。 層次關(guān)系 3. 進(jìn)程結(jié)構(gòu)。 共享 4. 訪問結(jié)構(gòu)。 ?
文中使用了一個(gè)表格,很簡(jiǎn)潔地表達(dá)了結(jié)構(gòu)、組件、關(guān)系、品質(zhì)關(guān)注點(diǎn)。
本章其他一些要點(diǎn):
1. 架構(gòu)要盡量簡(jiǎn)單,但不要過于簡(jiǎn)單。 盡量簡(jiǎn)單可以便于修改。而過分犧牲簡(jiǎn)單性的修改要抵制。
2. 系統(tǒng)設(shè)計(jì)需要保持概念完整性、一致性。
3. 優(yōu)秀的架構(gòu)示例:
A-7E OFP 艦載飛行處理器
朗訊53SS電話交換機(jī)
萬維網(wǎng)WWW
UNIX系統(tǒng)
總結(jié)
以上是生活随笔為你收集整理的架构之美-读书笔记之一的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安徽大学软件工程考研历程
- 下一篇: 额温枪大揭秘-你的额温枪为什么测不准