1.1 哪些是軟件架構(gòu),哪些不是

一.什么是軟件架構(gòu)

在這一章我們主要從一個軟件工程師的角度出發(fā),來看軟件架構(gòu)對一個正在進(jìn)行的工程有什么影響。

哪些是軟件架構(gòu),哪些不是

對于有關(guān)軟件架構(gòu)的概念,我們推崇如下定義:

一個系統(tǒng)的軟件架構(gòu)(Software-Architecture)是指,在構(gòu)建這個系統(tǒng)的過程中使用的一系列結(jié)構(gòu)(Structure)的集合,包括軟件中的元素,元素之間的關(guān)系以及元素和關(guān)系擁有的屬性。

有些定義寬泛的認(rèn)為軟件架構(gòu)就是系統(tǒng)"最初"或者"最主要"的設(shè)計決定,這是不對的,盡管對于大多數(shù)的架構(gòu)決定的制定確實(shí)在系統(tǒng)開發(fā)的早期,但是在敏捷和螺旋增量開發(fā)的項(xiàng)目中,許多在系統(tǒng)初期做的決定并不是有關(guān)架構(gòu)方面的。同時我們也很難有一個判斷標(biāo)準(zhǔn)去衡量一個決定是否是最主要的,通常對重要與否的判斷在時間而不是我們。鑒于,架構(gòu)是結(jié)構(gòu)的集合,對結(jié)構(gòu)進(jìn)行設(shè)計,會相對簡單一些。

下面是對軟件架構(gòu)定義的一些推論


架構(gòu)是一系列軟件結(jié)構(gòu)的集合

結(jié)構(gòu),是由一系列的元素和它們之間的關(guān)系組成,而軟件系統(tǒng)就是由許多這樣的結(jié)構(gòu)組成,一個單獨(dú)的結(jié)構(gòu)不能被稱為是一個架構(gòu),畢竟架構(gòu)是一系列結(jié)構(gòu)的集合,那么也可以這么理解,一個軟件系統(tǒng)對應(yīng)一個架構(gòu),而一個架構(gòu)對應(yīng)的是軟件結(jié)構(gòu)的集合,以下三種結(jié)構(gòu)在對軟件架構(gòu)的設(shè)計,記錄和分析中起到重要的作用。

  • 第一類結(jié)構(gòu):把系統(tǒng)按照功能分為不同的實(shí)現(xiàn)單元,在這本書中,我們把這些實(shí)現(xiàn)單元稱為"模塊"(module),模塊有各自的任務(wù)并被分配給不同的任務(wù)團(tuán)隊去實(shí)現(xiàn),同時,對于那些比較復(fù)雜的模塊,還可以繼續(xù)對模塊進(jìn)行劃分,在模塊內(nèi)部產(chǎn)生劃分結(jié)構(gòu),比如以類圖,層等,并分配給子團(tuán)隊去實(shí)現(xiàn)。

  • 第二類結(jié)構(gòu):這些結(jié)構(gòu)被稱為是動態(tài)的,它們更多的關(guān)注于元素在交互過程中產(chǎn)生的系統(tǒng)功能,在這本書中我們把這樣的結(jié)構(gòu)稱為"組件-聯(lián)系結(jié)構(gòu)(component-and-connector,C&C)",術(shù)語"組件(component)"理解為一個實(shí)體。

  • 第三類結(jié)構(gòu):描述了軟件結(jié)構(gòu)和系統(tǒng)之間的映射,比如模塊和系統(tǒng)硬件方面的映射,這些映射通常也被稱為是分配結(jié)構(gòu)(allocation structure)

盡管組成軟件的結(jié)構(gòu)有很多,但不是任何一個結(jié)構(gòu)的組合都可以被稱為是架構(gòu)的,當(dāng)且僅當(dāng)它們支持了系統(tǒng)的某些功能(重要干系人的需求)或者體現(xiàn)了系統(tǒng)的某些屬性的時候才被稱為是架構(gòu)。

綜上,組成架構(gòu)的結(jié)構(gòu)集合并不是固定或者被限制的,這個取決于你的系統(tǒng)真正需要的是什么。

架構(gòu)是一種抽象

在前面我們有說,架構(gòu)是結(jié)構(gòu)的集合,而結(jié)構(gòu)又是由元素和元素之間的關(guān)系組成。所以可以推出,架構(gòu)是由軟件元素和元素之間的的關(guān)系組成。架構(gòu)站在系統(tǒng)的功能角度,只會關(guān)心元素中那些有用的細(xì)節(jié)而不會去關(guān)心那些對實(shí)現(xiàn)系統(tǒng)功能沒有什么貢獻(xiàn)的元素或者可有可無的元素信息。所以,架構(gòu)就是對系統(tǒng)的抽象,選擇一些細(xì)節(jié)和忽略另一些。在現(xiàn)代的模型中,元素之間依靠接口進(jìn)行交互,接口把實(shí)現(xiàn)細(xì)節(jié)分為公有和私有部分,架構(gòu)更多的關(guān)注公有部分,而不會去關(guān)注那些元素內(nèi)部的實(shí)現(xiàn),所以私有部分不屬于架構(gòu)??偟膩碚f,抽象對于簡化問題的復(fù)雜性來說非常重要。

每一個軟件系統(tǒng)都存在一個軟件架構(gòu)

每一個軟件系統(tǒng)都可以通過展示元素和元素之間的關(guān)系來說明系統(tǒng)支持的功能。

盡管每一個軟件系統(tǒng)都有軟件架構(gòu),但是沒必要所有人都知道它,有可能當(dāng)初設(shè)計架構(gòu)的人已經(jīng)離開了,但是文檔和實(shí)現(xiàn)代碼可能依舊存在,或者干脆當(dāng)初就沒有記錄文檔,代碼也丟失了,只有一個可以運(yùn)行的結(jié)果存在,但這都沒有關(guān)系,架構(gòu)可以不依賴他具體的描述和實(shí)現(xiàn)存在。

架構(gòu)包含行為

行為(behavior)可以體現(xiàn)出元素之間是如何交互的達(dá)到說明系統(tǒng)的目的,從我們對架構(gòu)的定義可以看出,行為是屬于架構(gòu)的。
對元素的行為的定義不能單純的依靠專有名詞,比如database...,雖然有些用戶看到這個名詞馬上就可以聯(lián)想到對應(yīng)的功能,但是依靠用戶的想象去定義是不科學(xué)的。相反,也不是說所有元素的功能和行為都需要被詳細(xì)記錄,而是那些會對其他元素產(chǎn)生影響的行為或者對整個系統(tǒng)產(chǎn)生影響的行為需要被記錄,并作為軟件架構(gòu)的一部分存在。

不是所有的架構(gòu)都是好的架構(gòu)

當(dāng)然,選擇一個最好的架構(gòu),并用它來構(gòu)建系統(tǒng)是我們需要做的,這就體現(xiàn)了在架構(gòu)設(shè)計的重要性。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,872評論 25 709
  • 我上次去杭州學(xué)習(xí),姑姑來照顧的兒子,回來后兒子跟我說他九點(diǎn)要回家,十點(diǎn)前要睡覺,我特別高興,這孩子被姑姑調(diào)...
    楠兀喔彌閱讀 194評論 0 0
  • 物是人非,人事已非,我最喜歡你,這是我。
    島民Massi閱讀 110評論 0 0
  • 今天和小樂一起去參加奧賽組織的親子制作月餅活動還有親子比賽項(xiàng)目。 月餅做好之后,趁著烤制的空檔舉行了親子運(yùn)動項(xiàng)目。...
    一瓶花開閱讀 399評論 0 5
  • 我嘗試在行進(jìn)的列車前喊停, 站在月臺上的都只是觀眾, 在呼嘯而過的人群中,你 笑了,我依舊感到易碎的冰冷 我轉(zhuǎn)過身...
    馬叮閱讀 487評論 0 0

友情鏈接更多精彩內(nèi)容