<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Cyh的博客

    Email:kissyan4916@163.com
    posts - 26, comments - 19, trackbacks - 0, articles - 220

    ~ 第二章   什么是軟件構(gòu)架

    • 軟件構(gòu)架概念的澄清      下面我們給出軟件構(gòu)架的確切定義: 某個(gè)軟件或計(jì)算系統(tǒng)的軟件構(gòu)架是該系統(tǒng)的一個(gè)或多個(gè)結(jié)構(gòu),它們由軟件元素、這些元素的外部可見(jiàn)屬性以及這些元素之間的關(guān)系組成。 這里所說(shuō)的某個(gè)元素的“外部可見(jiàn)屬性”是指其他元素對(duì)該元素所做的假設(shè),如它所提供的服務(wù)、性能特性、錯(cuò)誤處理、共享資源的使用,等等。下面我們深入闡述一下該構(gòu)架的含義。

      1. 構(gòu)架定義了軟件元素。構(gòu)架中包含了關(guān)于各元素應(yīng)如何彼此相關(guān)的信息。也就是說(shuō),構(gòu)架必須省略各元素中與其交互無(wú)關(guān)的某些信息。因此,構(gòu)架首先是對(duì)系統(tǒng)的抽象,該抽象去除了不影響它們?nèi)绾问褂谩⑵渌厝绾问褂靡约叭绾闻c其他元素關(guān)聯(lián)或交互的細(xì)節(jié)。在幾乎所有的現(xiàn)代系統(tǒng)中,各元素是通過(guò)接口實(shí)現(xiàn)交互的,而這些接口又將各元素的細(xì)節(jié)劃分為共有和私有兩大類(lèi)。根據(jù)這種劃分,構(gòu)架屬于共有部分,而私有部分--即僅與內(nèi)部具體實(shí)現(xiàn)有關(guān)的細(xì)節(jié)--是不屬于構(gòu)架的。
      2. 該定義明確指出系統(tǒng)可能而且確實(shí)由多個(gè)結(jié)構(gòu)組成,而且,其中任何一個(gè)結(jié)構(gòu)并不能與構(gòu)架等同。
      3. 該定義意味著具有軟件的每個(gè)計(jì)算系統(tǒng)都有一個(gè)軟件構(gòu)架,這是因?yàn)槊總€(gè)軟件系統(tǒng)都可以看做是由若干個(gè)元素及其相互聯(lián)系構(gòu)成的。在最簡(jiǎn)單的情況下,我們可以把一個(gè)系統(tǒng)看做是一個(gè)元素。雖然僅有一個(gè)元素的構(gòu)架沒(méi)有多大價(jià)值,而且也不實(shí)用,但它符合我們的定義。每個(gè)系統(tǒng)都有構(gòu)架,但這并不意味這任何人都知曉該構(gòu)架的存在。或許當(dāng)時(shí)參與設(shè)計(jì)某個(gè)系統(tǒng)的所有人員都已故去,文檔已經(jīng)不存在了(或者根本沒(méi)有將其編成文檔),源代碼已經(jīng)丟失(或根本就沒(méi)發(fā)布過(guò)),我們所能得到的就是可執(zhí)行的機(jī)器代碼。這就是系統(tǒng)構(gòu)架和對(duì)構(gòu)架具體表述的區(qū)別。遺憾的是,構(gòu)架可以獨(dú)立于對(duì)構(gòu)架的描述而存在,這也讓我們更加認(rèn)識(shí)到構(gòu)架編檔構(gòu)架重構(gòu)的重要性。
      4. 只要某個(gè)元素的行為可以從其他元素的角度觀察到或區(qū)別開(kāi),這個(gè)元素的行為就是構(gòu)架的內(nèi)容。這是這種行為的存在,才使各元素的交互成為可能,而這種交互顯然是構(gòu)架的一部分。這是被當(dāng)作構(gòu)架的框線圖其實(shí)根本就不是構(gòu)架的另一個(gè)原因。它們只是框線圖,提供了所展示的元素做什么的更多信息。 這并不是說(shuō)在各種情況下都要對(duì)各元素的行為和性能給出精確的描述,但如果某個(gè)元素的行為對(duì)與之交互的另一個(gè)元素的代碼編寫(xiě)有特定的要求,或者影響到整個(gè)系統(tǒng)的可接受性,則該行為就是軟件構(gòu)架的一部分。

           最后,我們所給的這個(gè)定義并不涉及對(duì)構(gòu)架優(yōu)劣的評(píng)價(jià),這意味著構(gòu)架將支持或阻止系統(tǒng)滿足其行為、性能和生命期需求。我們并不把試錯(cuò)法--即任意選用一個(gè)構(gòu)架,在該構(gòu)架之上展開(kāi)系統(tǒng)的開(kāi)發(fā),并期望得到理想的結(jié)果--當(dāng)作為系統(tǒng)選擇構(gòu)架的最佳方法,因此,這就提出了構(gòu)架評(píng)估和構(gòu)架設(shè)計(jì)。

      其他觀點(diǎn)      大多數(shù)常見(jiàn)的定義的要點(diǎn)都是一致的--結(jié)構(gòu)、元素以及元素之間的元素--但它們?cè)诩?xì)節(jié)上有很大不同,不能互換。對(duì)系統(tǒng)設(shè)計(jì)中內(nèi)在的共性進(jìn)行抽象是一種嘗試,由此它必須說(shuō)明各種活的、概念、方法、途徑和結(jié)果。鑒于此,軟件工程團(tuán)體中存在其他構(gòu)架定義:因?yàn)槟芸赡軙?huì)遇到其中的一些定義,因此應(yīng)該理解這些定義的含義并能夠?qū)ζ溥M(jìn)行討論。下面是幾個(gè)最常見(jiàn)的定義。

      • 構(gòu)架是一種高層設(shè)計(jì)。與設(shè)計(jì)相關(guān)的其他任務(wù)并不是屬于構(gòu)架,如確定將要封裝的重要數(shù)據(jù)結(jié)構(gòu)。訪問(wèn)數(shù)據(jù)結(jié)構(gòu)的接口肯定屬于構(gòu)架的范疇,但實(shí)際做出的選擇卻不是。
      • 構(gòu)架是系統(tǒng)的總體結(jié)構(gòu)。 這個(gè)常見(jiàn)說(shuō)法(不正確地)暗含的意思是系統(tǒng)只有一個(gè)結(jié)構(gòu)。我們知道這種說(shuō)法是錯(cuò)誤的,如果有人持這種觀點(diǎn),不妨問(wèn)問(wèn)他所說(shuō)的結(jié)構(gòu)到底是什么。這種觀點(diǎn)不僅僅具有教學(xué)上的重要性。后面我們將會(huì)看到,不同的結(jié)構(gòu)提供了一個(gè)關(guān)鍵的工程設(shè)計(jì)平衡點(diǎn),這些平衡點(diǎn)使系統(tǒng)中具有了導(dǎo)致系統(tǒng)成功或失敗的質(zhì)量屬性。構(gòu)架中結(jié)構(gòu)的多樣性位于概念的核心。
      • 構(gòu)架是一個(gè)軟件或系統(tǒng)的組件、組件之間的相互關(guān)系以及管理其設(shè)計(jì)和演變的原理和方針的結(jié)構(gòu)。 任何系統(tǒng)都有一個(gè)構(gòu)架,并且可以獨(dú)立于設(shè)計(jì)或演變?cè)摌?gòu)架的過(guò)程的知識(shí)對(duì)其進(jìn)行探索和分析。
      • 構(gòu)架是組件和連接器。  連接器是指系統(tǒng)運(yùn)行時(shí)為傳送控制和數(shù)據(jù)信息而采用的機(jī)制。因此,該定義主要強(qiáng)調(diào)了系統(tǒng)運(yùn)行時(shí)的構(gòu)架。

      構(gòu)架模式、參考模型和參考構(gòu)架      在框線骨架和已經(jīng)填充了關(guān)于系統(tǒng)的所有適當(dāng)信息的構(gòu)架之間,有很多中間階段。每個(gè)階段都是執(zhí)行一組構(gòu)架決策的結(jié)果。其中的一些中間階段是非常重要的。要討論構(gòu)架結(jié)構(gòu)前,我們先給出以下3個(gè)定義:

      1. 構(gòu)架模式是對(duì)元素和關(guān)系類(lèi)型以及一組對(duì)其使用方式的限制的描述。可以把構(gòu)架模式看作是對(duì)構(gòu)架的一組制約條件--即對(duì)各元素類(lèi)型及其交互模式的限制條件,而這些制約條件就確定了一組或一系列能滿足它們的構(gòu)架。   模式最有用的一個(gè)方面就是它們展示了已知的質(zhì)量。這就是為什么設(shè)計(jì)師選擇某個(gè)特定的模式,而不是隨機(jī)選擇模式的原因。一些模式代表了性能問(wèn)題的已知解決方案,一些模式使用于高安全性系統(tǒng),還有一些模式成功應(yīng)用在了高可用性系統(tǒng)中。選擇構(gòu)架模式通常是設(shè)計(jì)師做出的第一個(gè)主要的設(shè)計(jì)決策。   術(shù)語(yǔ)構(gòu)架樣式的使用也非常廣泛,它用于描述相同的概念。
      2. 參考模型是一種考慮數(shù)據(jù)流的功能劃分。參考模型是對(duì)已知問(wèn)題的標(biāo)準(zhǔn)分解,分解所得的各個(gè)部分相互協(xié)作,構(gòu)成問(wèn)題的解決方案。產(chǎn)生于實(shí)踐經(jīng)驗(yàn)的參考模型是熟知某個(gè)領(lǐng)域的體現(xiàn)。
      3. 參考構(gòu)架是映射到軟件元素(它們相互協(xié)作,共同實(shí)現(xiàn)在參考模型中定義的功能)及元素之間數(shù)據(jù)流上的參考模型。參考模型實(shí)現(xiàn)了功能劃分,而參考構(gòu)架則將這種功能劃分與系統(tǒng)分解對(duì)應(yīng)起來(lái)。這種對(duì)應(yīng)可能(但不一定必須)是一一映射。一個(gè)軟件元素可以實(shí)現(xiàn)某個(gè)功能的一部分,也可以實(shí)現(xiàn)若干個(gè)功能。  參考模型、構(gòu)架模式和參考構(gòu)架都不是構(gòu)架,但它們都是捕獲構(gòu)架元素的有用的概念。這三者都是早期設(shè)計(jì)決策的產(chǎn)物。圖2.2給出了這些設(shè)計(jì)元素之間的關(guān)系。  人們經(jīng)常拿構(gòu)架這個(gè)詞與該詞的其他用法進(jìn)行類(lèi)比,他們對(duì)這些用法有更多認(rèn)識(shí)。他們經(jīng)常將構(gòu)架與某些物理結(jié)構(gòu)或物理分布聯(lián)系在一起。建筑設(shè)計(jì)師在設(shè)計(jì)大樓時(shí)必須要考慮方便性、美觀、光照、可維護(hù)性等方面的要求。軟件設(shè)計(jì)師在設(shè)計(jì)中也必須考慮并發(fā)性、可移植性、可修改性、易用性、安全性等因素,并且要在這些需求之間進(jìn)行適當(dāng)?shù)臋?quán)衡。

      為什么說(shuō)軟件構(gòu)架非常重要      第1章討論了構(gòu)架對(duì)企業(yè)的重要性。本章將從技術(shù)的角度重點(diǎn)討論構(gòu)架的重要性。軟件構(gòu)架之所以重要,主要有以下3個(gè)基本原因:

      1. 涉眾之間的交流。   軟件構(gòu)架是一種常見(jiàn)的對(duì)系統(tǒng)的抽象,絕大多數(shù)(如果不是全部的話)系統(tǒng)的涉眾都以此作為彼此理解、協(xié)商、達(dá)成共識(shí)或相互溝通的基礎(chǔ)。
      2. 早期設(shè)計(jì)決策。  軟件構(gòu)架是所開(kāi)發(fā)系統(tǒng)的最早設(shè)計(jì)決策的體現(xiàn),而這些早期決策對(duì)系統(tǒng)的后續(xù)開(kāi)發(fā)、部署和維護(hù)具有重要影響。這也是能夠?qū)λ_(kāi)發(fā)系統(tǒng)進(jìn)行分析的最早時(shí)間點(diǎn)。
      3. 可傳遞的系統(tǒng)抽象。   軟件構(gòu)架是關(guān)于系統(tǒng)構(gòu)造及系統(tǒng)各元素工作機(jī)制的相對(duì)較小、卻又能突出反映問(wèn)題的模型。這種模型可以在多個(gè)系統(tǒng)之間傳遞,特別是可以應(yīng)用刀具有相似質(zhì)量屬性和功能需求的系統(tǒng)中,并能促進(jìn)大規(guī)模的重用。  
      • 構(gòu)架是涉眾進(jìn)行交流的手段      軟件系統(tǒng)的涉眾--客戶、用戶、項(xiàng)目經(jīng)理、程序員、測(cè)試人員等--分別關(guān)注系統(tǒng)的不同特征,而這些特征都受構(gòu)架影響。例如,用戶關(guān)心的是系統(tǒng)的可靠性和可用性;客戶關(guān)心的是構(gòu)架能否在規(guī)定時(shí)間內(nèi)實(shí)現(xiàn),并且開(kāi)支不超出預(yù)算;項(xiàng)目經(jīng)理關(guān)心的是如果按此構(gòu)架進(jìn)行開(kāi)發(fā),能否保證各小組的任務(wù)在很大程度上都獨(dú)立完成,各部分的交互方式是否規(guī)范、可控;而設(shè)計(jì)師所關(guān)心的則是實(shí)現(xiàn)構(gòu)架的所有這些目標(biāo)的策略。

              構(gòu)架提供了一種共同語(yǔ)言,有關(guān)各方可借助它表達(dá)和協(xié)商各自的需求,并理性地找到解決方案,即使對(duì)大型、復(fù)雜系統(tǒng)的開(kāi)發(fā)也是如此。如果沒(méi)有這樣一種語(yǔ)言,要想充分理解大型系統(tǒng)并理智地做出對(duì)系統(tǒng)質(zhì)量和易用性都具有重要影響的早期決策將十分困難。構(gòu)架分析不僅依賴(lài)于而且促進(jìn)了這個(gè)層次上的交流。

        構(gòu)架是早期設(shè)計(jì)決策的體現(xiàn)      構(gòu)架明確了對(duì)系統(tǒng)實(shí)現(xiàn)的約束條件。如果系統(tǒng)實(shí)現(xiàn)遵循構(gòu)架設(shè)計(jì)中所做出的關(guān)于系統(tǒng)結(jié)構(gòu)的決策,則系統(tǒng)實(shí)現(xiàn)將能夠體現(xiàn)出構(gòu)架的特色。

              資源分配方面的決策也制約著系統(tǒng)實(shí)現(xiàn)。這些決策對(duì)從事各元素開(kāi)發(fā)的實(shí)現(xiàn)人員來(lái)說(shuō)可能是不可見(jiàn)的。這些限制條件使將各方關(guān)心的問(wèn)題分離開(kāi)成為可能,從而使管理者能夠做出科學(xué)的決策,最大限度地利用人才和計(jì)算資源。各元素的開(kāi)發(fā)者對(duì)自己所從事的開(kāi)發(fā)任務(wù)的要求必須十分清楚,但沒(méi)有必要了解在構(gòu)架上所做的權(quán)衡。相反,構(gòu)架設(shè)計(jì)師未必要精通算法設(shè)計(jì)或編程語(yǔ)言的各個(gè)方面,但必須能夠做出構(gòu)架上的合理權(quán)衡。

        構(gòu)架決定了開(kāi)發(fā)組織的組織結(jié)構(gòu)。因?yàn)橄到y(tǒng)的構(gòu)架中包含了對(duì)系統(tǒng)的最高層次的分解,因而一般被作為工作分解結(jié)構(gòu)的基礎(chǔ);這反過(guò)來(lái)也規(guī)定了計(jì)劃、調(diào)度及預(yù)算的單元,組內(nèi)交流的渠道,配置控制和文件系統(tǒng)的組織,集成與測(cè)試計(jì)劃和規(guī)程,甚至提出了對(duì)一些瑣事的要求。各開(kāi)發(fā)小組根據(jù)構(gòu)架中各主要元素的接口規(guī)范進(jìn)行交流。一旦進(jìn)入維護(hù)階段,維護(hù)活動(dòng)也會(huì)反映出軟件的結(jié)構(gòu),常由不同的小組分別負(fù)責(zé)各具體部分的維護(hù)。

              建立工作分解結(jié)構(gòu)的一個(gè)副作用:它限定了軟件構(gòu)架的某些方面。如果已經(jīng)將某個(gè)子系統(tǒng)的開(kāi)發(fā)交由某個(gè)小組完成,則該小組會(huì)對(duì)將此任務(wù)分派給其他小組提出異議。如果這種責(zé)任劃分已經(jīng)用合同的形式確定下來(lái),則改變?nèi)蝿?wù)分配的代價(jià)可能是昂貴的。對(duì)分配到各小組的任務(wù)的進(jìn)展情況的跟蹤也要困難得多。

              因此,一旦對(duì)構(gòu)架達(dá)成一致,不管是由于管理上的還是商業(yè)傷的原因,想要對(duì)它進(jìn)行修改,幾乎都是不可能的。這也是為什么在確定某個(gè)大型系統(tǒng)的構(gòu)架之前必須進(jìn)行全面分析的原因之一。

        構(gòu)架阻止或支持系統(tǒng)的質(zhì)量屬性的實(shí)現(xiàn)。  系統(tǒng)能否具有所期望的質(zhì)量屬性主要是由其構(gòu)架決定的。第5章將詳細(xì)討論構(gòu)架和質(zhì)量屬性之間的關(guān)系,現(xiàn)在僅需牢記以下幾點(diǎn):

        • 如果您的系統(tǒng)要求高性能,就需要管理元素基于時(shí)間的行為以及元素間通信的頻率和數(shù)量。
        • 如果可修改性很重要,就需要給元素分配責(zé)任,以使對(duì)系統(tǒng)的修改不會(huì)產(chǎn)生很大的影響。
        • 如果系統(tǒng)必須非常安全,就需要管理和保護(hù)元素間的通信以及允許哪些元素訪問(wèn)哪些信息。可能還需要在構(gòu)架中引入專(zhuān)門(mén)的元素(如受信的內(nèi)核)
        • 如果您認(rèn)為系統(tǒng)需要可擴(kuò)展性,就必須仔細(xì)定位資源的使用,以有利于引入容量更高的更換組件。
        • 如果項(xiàng)目需要交付系統(tǒng)的增量式子集,就必須仔細(xì)管理組件間的使用。
        • 如果希望可以在其他系統(tǒng)中重要該系統(tǒng)的元素,就需要限制元素間的耦合,以便提取元素時(shí),它能發(fā)揮作用,且不會(huì)與當(dāng)前環(huán)境有過(guò)多依賴(lài)。

            這些和其他質(zhì)量屬性策略都與構(gòu)架有很大關(guān)系。然而,僅靠構(gòu)架也無(wú)法保證系統(tǒng)功能和質(zhì)量屬性的實(shí)現(xiàn),理解這一點(diǎn)非常重要。

        通過(guò)研究構(gòu)架來(lái)預(yù)測(cè)系統(tǒng)質(zhì)量。能否在系統(tǒng)開(kāi)發(fā)和部署前就知道做出了適當(dāng)?shù)臉?gòu)架決策(也就是系統(tǒng)是否將表現(xiàn)出所期望的質(zhì)量屬性)? 所幸的是,僅僅依靠對(duì)構(gòu)架的評(píng)估來(lái)預(yù)測(cè)系統(tǒng)未來(lái)的質(zhì)量屬性是可能的。

        構(gòu)架使推理判斷和控制更改更簡(jiǎn)單。每個(gè)構(gòu)架都將可能的更改劃分為3類(lèi):本地的、非本地的和構(gòu)架上的。本地更改只需修改某一個(gè)元素就可以實(shí)現(xiàn)。非本地更改的實(shí)現(xiàn)則需對(duì)多個(gè)元素進(jìn)行修改,但并不改動(dòng)構(gòu)架。構(gòu)架的更改會(huì)影響各元素之間交互的基本方式--即構(gòu)架模式--并很可能要求系統(tǒng)做全面的修改。顯然,僅做本地更改是最理想的。所以,一個(gè)富有生命力的構(gòu)架應(yīng)該是這樣的:最有可能發(fā)生的更改也是最容易進(jìn)行的更改。    構(gòu)架有助于循序漸進(jìn)的原型設(shè)計(jì)。一旦確定了構(gòu)架,就可以對(duì)其進(jìn)行分析,并將其原型構(gòu)造為一個(gè)骨架系統(tǒng)。這從兩個(gè)方面協(xié)助開(kāi)發(fā)過(guò)程的順利進(jìn)行:

        1. 在產(chǎn)品生命期的早期就能得到一個(gè)可執(zhí)行的系統(tǒng)。隨著原型中的各部分逐漸被真實(shí)系統(tǒng)各部分的最終實(shí)現(xiàn)所代替,原型的這種真實(shí)性將越來(lái)越明顯地體現(xiàn)出來(lái)。原型的各組成部分可能與系統(tǒng)的最終實(shí)現(xiàn)有較大差異,也可能能夠比較逼真地處理和產(chǎn)生數(shù)據(jù)。
        2. 使系統(tǒng)在早期執(zhí)行的一個(gè)特例就是在產(chǎn)品生命期的早期確定潛在的性能問(wèn)題。

        可以通過(guò)構(gòu)架進(jìn)行更準(zhǔn)確的成本和進(jìn)度估計(jì)。  成本和進(jìn)度估計(jì)是一個(gè)重要的管理工具,它能夠使管理人員獲得必要的資源并了解項(xiàng)目開(kāi)發(fā)中是否遇到了困難。與了解整個(gè)系統(tǒng)相比,了解系統(tǒng)的某些部分本質(zhì)上可以使成本估計(jì)更加準(zhǔn)確。正如我們已經(jīng)說(shuō)過(guò)的,項(xiàng)目的組織結(jié)構(gòu)基于它的構(gòu)架。與項(xiàng)目經(jīng)理相比,每個(gè)小組能夠?qū)ζ渌_(kāi)發(fā)的部分進(jìn)行更準(zhǔn)確的估計(jì),并且在使估計(jì)成為現(xiàn)實(shí)的過(guò)程中,擁有強(qiáng)烈的主人翁責(zé)任感。第二,構(gòu)架的最初定義意味著已經(jīng)評(píng)審了系統(tǒng)的需求,從某種意義上來(lái)說(shuō),已經(jīng)對(duì)需求進(jìn)行了驗(yàn)證。對(duì)系統(tǒng)范圍了解的越多,估計(jì)就會(huì)越準(zhǔn)確。

        構(gòu)架是可傳遞、可重用的模型       在整個(gè)生命期中,重要的越早,收益就越大。代碼的重用能帶來(lái)極大的便利,而在構(gòu)架層次上的重用則為具有類(lèi)似需求的系統(tǒng)開(kāi)發(fā)提供了有利的手段。不僅可以實(shí)現(xiàn)代碼的重用,還可以實(shí)現(xiàn)決定構(gòu)架選用的系統(tǒng)需求及構(gòu)建構(gòu)架的經(jīng)驗(yàn)的重用。如果構(gòu)架決策能夠在多個(gè)系統(tǒng)中得到重用,則也可以獲得上面講到的早期決策所帶來(lái)的所有好處。     產(chǎn)品線共享一個(gè)公共的構(gòu)架。   軟件產(chǎn)品線或家族是一組軟件密集型系統(tǒng),這些系統(tǒng)共享一個(gè)公共的、可管理性的特性集,滿足了待定市場(chǎng)或任務(wù)的具體需要,是 按照規(guī)定的方式根據(jù)一組公共的核心資產(chǎn)開(kāi)發(fā)的。在這些核心資產(chǎn)中,主要部分就是設(shè)計(jì)用來(lái)處理整個(gè)家族需要的構(gòu)架。產(chǎn)品線設(shè)計(jì)師通過(guò)制定在早期適用與整個(gè)家族的設(shè)計(jì)決策,以及在后期僅適用于單個(gè)成員的其他決策,來(lái)選擇一個(gè)滿足產(chǎn)品線的所有預(yù)想成員的構(gòu)架。該構(gòu)架定義了對(duì)產(chǎn)品線的所有成員來(lái)說(shuō),什么是固定的,什么是可變的。對(duì)多系統(tǒng)開(kāi)發(fā)來(lái)說(shuō),軟件產(chǎn)品線是一種強(qiáng)大的開(kāi)發(fā)方法,它可以在上市時(shí)間、成本、生產(chǎn)率和產(chǎn)品質(zhì)量方面實(shí)現(xiàn)極大的回報(bào)。構(gòu)架的強(qiáng)大源于范例的核心。與其他資本投資類(lèi)似,產(chǎn)品線的構(gòu)架將成為開(kāi)發(fā)組織的核心資產(chǎn)。    系統(tǒng)開(kāi)發(fā)可以使用大型的、由其他組織開(kāi)發(fā)的元素。以前的軟件范例總是將編程作為最根本的任務(wù),把編寫(xiě)了多少行代碼作為衡量項(xiàng)目進(jìn)展情況的依據(jù)。基于構(gòu)架的開(kāi)發(fā)則更強(qiáng)調(diào)對(duì)各元素的組合或裝配,而這些元素很可能已分別甚至是完全獨(dú)立地開(kāi)發(fā)實(shí)現(xiàn)了。由于構(gòu)架定義了可以集成到系統(tǒng)中的元素,因此,這種組合是可能的。構(gòu)架從元素與環(huán)境的交互、對(duì)控制的接收和釋放、所能使用或產(chǎn)生的數(shù)據(jù)、訪問(wèn)數(shù)據(jù)的方式、通信方式以及用于通信和資源共享的協(xié)議等方面對(duì)可能做的更換做了種種約定。   元素結(jié)構(gòu)、接口和操作概念的組織是構(gòu)架的一個(gè)重要方面。互換性是這種組織的最重要的原則。   商業(yè)組件、子系統(tǒng)、兼容的通信接口都是基于互換性原則的。      少就是多:限制選擇范圍是值得的。隨著所積累的構(gòu)架模式和設(shè)計(jì)模式越來(lái)越多,我們將會(huì)越來(lái)越清楚地認(rèn)識(shí)到:雖然計(jì)算機(jī)程序可以以近乎無(wú)限的方式來(lái)組合,但涉及到程序的協(xié)調(diào)和交互時(shí),有意識(shí)地限制在一定范圍內(nèi)選擇將使我們受益匪淺。也就是說(shuō),我們希望使所構(gòu)建系統(tǒng)的設(shè)計(jì)盡可能簡(jiǎn)單。這種方法的優(yōu)勢(shì)包括:重用程度更高、更易于理解和交流的簡(jiǎn)單規(guī)范的設(shè)計(jì)、更為透徹的分析、更短的選擇時(shí)間、更強(qiáng)的可互操作性。       軟件設(shè)計(jì)的特性來(lái)自于構(gòu)架模式的選擇。那些更適用于某個(gè)特定問(wèn)題的構(gòu)架模式將改善設(shè)計(jì)方案的實(shí)現(xiàn),這可能通過(guò)更輕松地在相沖突的設(shè)計(jì)要求之間進(jìn)行權(quán)衡、提高對(duì)設(shè)計(jì)環(huán)境的人認(rèn)識(shí)和/或使需求描述中的不一致性更為突出等方式體現(xiàn)出來(lái)。    系統(tǒng)構(gòu)架與軟件構(gòu)架。在過(guò)去的5到10年中,我們?cè)诤芏鄨?chǎng)合對(duì)軟件構(gòu)架進(jìn)行了討論。每次總會(huì)有人提出如下問(wèn)題:為什么談?wù)撥浖?gòu)架?系統(tǒng)構(gòu)架是否同軟件構(gòu)架一樣重要?或者說(shuō)軟件構(gòu)架和系統(tǒng)構(gòu)架之間的區(qū)別是什么?    在創(chuàng)建軟件構(gòu)架時(shí),通常很少考慮系統(tǒng)。  如果您想讓構(gòu)架具有很高的性能,就需要了解該系統(tǒng)將運(yùn)行的硬件平臺(tái)的物理特性以及該系統(tǒng)將與之交互的任何設(shè)備的特性,您通常還會(huì)關(guān)注網(wǎng)絡(luò)的特性。如果您需要構(gòu)架具有很高的可靠性,也需要關(guān)注硬件,在這種情況下就是關(guān)心其故障率和冗余處理或網(wǎng)絡(luò)設(shè)備的可用性。如此等等,不一而足。設(shè)計(jì)師很少考慮硬件。    因此,設(shè)計(jì)軟件構(gòu)架時(shí),大概需要考慮整個(gè)系統(tǒng)--硬件和軟件,否則就是蠻干。當(dāng)僅規(guī)定了系統(tǒng)的一部分時(shí),任何一個(gè)工程師都不可能預(yù)測(cè)系統(tǒng)的特性。    但我們主要談?wù)摰娜匀皇擒浖?gòu)架而非系統(tǒng)構(gòu)架。這是為什么呢?因?yàn)榇蠖鄶?shù)設(shè)計(jì)師在軟件方面都可以做出選擇,而在硬件方面則沒(méi)有這種自由。  構(gòu)架使基于模板的開(kāi)發(fā)成為可能。構(gòu)架體現(xiàn)了關(guān)于元素交互方式的設(shè)計(jì)決策。這些決策雖然是每個(gè)元素的實(shí)現(xiàn)中體現(xiàn)出來(lái)的,但卻能夠局部化,只需編寫(xiě)一次即可。可以在某處用模板將元素間的交互機(jī)制描述清楚。  構(gòu)架可以做為培訓(xùn)的基礎(chǔ)。 在對(duì)項(xiàng)目新成員介紹所開(kāi)發(fā)的系統(tǒng)時(shí)間,可以首先介紹系統(tǒng)的結(jié)構(gòu),以及對(duì)組件之間如何交互從而實(shí)現(xiàn)系統(tǒng)需求的高層次的描述。我們?cè)?jīng)指出,軟件構(gòu)架的重要用途之一就是支持并促進(jìn)各涉眾之間的交流,這進(jìn)一步印證了我們的觀點(diǎn)。構(gòu)架是一個(gè)公共的參考點(diǎn)。

      構(gòu)架結(jié)構(gòu)和視圖      現(xiàn)代系統(tǒng)非常復(fù)雜,很難一下子領(lǐng)會(huì)它們。相反,在任何時(shí)刻,我們只能把注意力放在軟件系統(tǒng)的一個(gè)或幾個(gè)結(jié)構(gòu)上。為了有意義的傳達(dá)構(gòu)架信息,必須說(shuō)明此刻正在討論哪個(gè)或哪些結(jié)構(gòu)--即采用的是構(gòu)架的哪個(gè)視圖。

         在討論構(gòu)架表示時(shí),我們將使用相關(guān)術(shù)語(yǔ)結(jié)構(gòu)視圖。視圖是構(gòu)架元素的內(nèi)聚集的表示,由系統(tǒng)涉眾編寫(xiě)和閱讀。它由一個(gè)元素集的表示和元素之間的關(guān)系組成。結(jié)構(gòu)是元素本身的集合,它們存在于軟件或硬件中。   大體上可將構(gòu)架分為3組,這取決于它們所展示的元素的主要特性。  大體上可將構(gòu)架結(jié)構(gòu)分為3組,這取決于它們所展示的元素的主要特性。

      • 模塊結(jié)構(gòu)。此處的元素是模塊,它們是實(shí)現(xiàn)單元。模塊表示一種考慮系統(tǒng)的基于代碼的方法。模塊被分配功能責(zé)任區(qū)域。這不怎么強(qiáng)調(diào)所開(kāi)發(fā)出來(lái)的軟件如何在運(yùn)行時(shí)表現(xiàn)自己。模塊結(jié)構(gòu)能夠使我們回答諸如此類(lèi)的問(wèn)題:分配給每個(gè)模塊的主要功能責(zé)任是什么?允許模塊使用的其他軟件元素是什么?它實(shí)際使用的其他軟件是什么?什么模塊通過(guò)泛化或特化關(guān)系與其他模塊相關(guān)?
      • 組件-連接件結(jié)構(gòu)。此處的元素為運(yùn)行時(shí)組件(它們是計(jì)算的主要單元)和連接器(它們是組件間通信的工具)。組件-連接件結(jié)構(gòu)能夠使我們回答諸如此類(lèi)的問(wèn)題:什么是主要的執(zhí)行組件,它們?nèi)绾谓换ィ渴裁词侵饕墓蚕頂?shù)據(jù)存儲(chǔ)?復(fù)制系統(tǒng)的哪些部分?數(shù)據(jù)在系統(tǒng)中經(jīng)過(guò)了哪些地方?系統(tǒng)的哪些部分可以并行運(yùn)行?在系統(tǒng)執(zhí)行時(shí),其結(jié)構(gòu)可能會(huì)發(fā)生怎樣的變化?
      • 分配結(jié)構(gòu)。分配結(jié)構(gòu)展示了軟件元素和創(chuàng)建并執(zhí)行軟件的一個(gè)或多個(gè)外部環(huán)境中的元素之間的關(guān)系。它們回答了諸如此類(lèi)的問(wèn)題:每個(gè)軟件元素在什么處理器上執(zhí)行?在開(kāi)發(fā)、測(cè)試和系統(tǒng)構(gòu)建期間,每個(gè)元素都存儲(chǔ)在什么文件中?分配給開(kāi)發(fā)小組的軟件元素是什么?

      這3種結(jié)構(gòu)與構(gòu)架設(shè)計(jì)所涉及的3大類(lèi)決策一致:

      • 系統(tǒng)如何被組織為一個(gè)代碼單元集合的?
      • 系統(tǒng)如何被組織為一個(gè)具有運(yùn)行時(shí)行為(組件)和交互(連接器)的元素集合的?
      • 系統(tǒng)如何與其環(huán)境中的非軟件結(jié)構(gòu)相關(guān)(也就是CPU、文件系統(tǒng)、網(wǎng)絡(luò)和開(kāi)發(fā)小組等)?
      • 軟件結(jié)構(gòu)      圖2.3展示了一些最常見(jiàn)和最有用的軟件結(jié)構(gòu)。

         

        模塊。基于模塊的結(jié)構(gòu)包括如下內(nèi)容。

        • 分解。   這些單元是通過(guò)“是一個(gè)子模塊”關(guān)系將彼此關(guān)聯(lián)起來(lái)的模塊,展示了如何將較大的模塊遞歸地分解為較小的模塊,直到它們足夠小,很容易理解為之。該結(jié)構(gòu)中的模塊代表了設(shè)計(jì)中一個(gè)常見(jiàn)的起點(diǎn),因?yàn)樵O(shè)計(jì)師列舉了軟件的單元必須做什么工作,并把每個(gè)項(xiàng)目分配給模塊以進(jìn)行隨后的設(shè)計(jì)和最后的實(shí)現(xiàn)。模塊通常有關(guān)聯(lián)的產(chǎn)品。通過(guò)確保很可能會(huì)發(fā)生的變化最多只在幾個(gè)小模塊中,分解結(jié)構(gòu)提供了很大一部分的系統(tǒng)可更改性。通常將其用作開(kāi)發(fā)項(xiàng)目的組織的基礎(chǔ),包括分解結(jié)構(gòu)、其集和測(cè)試計(jì)劃。該結(jié)構(gòu)中的單元通常具有特定于組織的名稱(chēng)。
        • 使用。這一重要但是結(jié)構(gòu)經(jīng)常被忽略的單元也是模塊,或者是過(guò)程,或者是模塊接口上的資源。這些單元通過(guò)“使用”關(guān)系彼此相關(guān)。如果一個(gè)單元的正確性要求另一個(gè)單元提供正確版本的話,那么我們稱(chēng)第一個(gè)單元使用第二個(gè)單元。使用結(jié)構(gòu)用于設(shè)計(jì)可以輕松擴(kuò)展以添加功能的系統(tǒng),或從中可以輕松提取有用功能子集的系統(tǒng)。輕松提取工作系統(tǒng)的子集的能力允許進(jìn)行增量式開(kāi)發(fā)。
        • 類(lèi)或泛化。該結(jié)構(gòu)中的模塊單元被稱(chēng)為類(lèi)。關(guān)系是“繼承自”或“是一個(gè)實(shí)例”。可以根據(jù)該視圖推斷出類(lèi)似行為或能力的集合,以及通過(guò)劃分子類(lèi)所捕獲的參數(shù)化的差別。類(lèi)結(jié)構(gòu)能夠使我們對(duì)重用以及功能的增量式增加進(jìn)行推斷。

        組件-連接器。這些結(jié)構(gòu)包括如下內(nèi)容

        • 進(jìn)程或通信進(jìn)程。向所有組件-連接器結(jié)構(gòu)一樣,該結(jié)構(gòu)與基于模塊的結(jié)構(gòu)是正交的,它處理的是運(yùn)行系統(tǒng)的動(dòng)態(tài)方面。此處的單元為通過(guò)通信、同步和/或排除操作將彼此相連的進(jìn)程或線程。在該結(jié)構(gòu)中(而且在所有組件-連接器結(jié)構(gòu)中)的關(guān)系是“附加”,展示了組件和連接器是如何連接在一起的。進(jìn)程結(jié)構(gòu)非常重要,它有助于設(shè)計(jì)系統(tǒng)的執(zhí)行性能和可用性。
        • 并發(fā)。該組件-連接器結(jié)構(gòu)能夠使設(shè)計(jì)師確定并行的機(jī)會(huì)以及可能出現(xiàn)資源爭(zhēng)用的位置。單元是組件,連接器是“邏輯線程”。邏輯線程是一系列計(jì)算,可以將這些計(jì)算在稍后的設(shè)計(jì)過(guò)程中分配給單獨(dú)的物理線程。并發(fā)結(jié)構(gòu)在設(shè)計(jì)的早期使用,以確定管理與并發(fā)執(zhí)行相關(guān)的問(wèn)題的需求。
        • 共享數(shù)據(jù)或存儲(chǔ)庫(kù)。   該結(jié)構(gòu)由創(chuàng)建、存儲(chǔ)和訪問(wèn)持久數(shù)據(jù)的組件和連接器組成。如果實(shí)際上是系統(tǒng)是根據(jù)一個(gè)或多個(gè)共享數(shù)據(jù)存儲(chǔ)庫(kù)構(gòu)建的,那么,該結(jié)構(gòu)就適于進(jìn)行說(shuō)明。它展示了運(yùn)行軟件元素如何產(chǎn)生數(shù)據(jù)和使用數(shù)據(jù),可以使用該結(jié)構(gòu)確保良好的性能和數(shù)據(jù)完整性。
        • 客戶機(jī)-服務(wù)器。如果系統(tǒng)被構(gòu)建為一組彼此協(xié)作的客戶機(jī)和服務(wù)器,那么,這就是一個(gè)很好的進(jìn)行說(shuō)明的組件--連接器結(jié)構(gòu)。組件是客戶機(jī)和服務(wù)器,連接器是協(xié)議以及它們共享來(lái)執(zhí)行系統(tǒng)工作的消息。這對(duì)于關(guān)注點(diǎn)分離(支持可修改性)、物理分布和負(fù)載平衡(支持運(yùn)行時(shí)性能)都是有用的。

        分配。分配結(jié)構(gòu)包括如下內(nèi)容

        • 部署。部署結(jié)構(gòu)展示了如何將軟件分給硬件處理和通信元素。元素是軟件(從組件-連接器的觀點(diǎn)看通常是進(jìn)程)、硬件實(shí)體(處理器)和通信路徑。關(guān)系是“分配給”和“移植到”,前者展示了軟件元素所駐留的物理單元,后者的條件是分配和動(dòng)態(tài)的。該視圖能夠使工程設(shè)計(jì)人員對(duì)性能、數(shù)據(jù)完整性、可用性和安全性進(jìn)行推斷。在分布式或并行系統(tǒng)中,我們尤其對(duì)部署結(jié)構(gòu)感興趣。
        • 實(shí)現(xiàn)。該結(jié)構(gòu)展示了軟件元素(通常是模塊)是如何映射刀系統(tǒng)開(kāi)發(fā)、集成或配置控制環(huán)境中的文件結(jié)構(gòu)上。這對(duì)于開(kāi)發(fā)活動(dòng)和構(gòu)建過(guò)程的管理非常關(guān)鍵。
        • 工作分配。該結(jié)構(gòu)將實(shí)現(xiàn)和集成模塊的責(zé)任分配給適當(dāng)?shù)拈_(kāi)發(fā)小組。擁有作為構(gòu)架一部分的工作分配結(jié)構(gòu),可以使關(guān)于誰(shuí)做工作的決策具有管理上的和構(gòu)架上的兩層含義變得清晰。設(shè)計(jì)師應(yīng)該知道對(duì)每個(gè)小組的技術(shù)要求。同樣,在大規(guī)模的多源分布式開(kāi)發(fā)項(xiàng)目上,工作分配結(jié)構(gòu)是調(diào)出功能公共的單元并把它們分配給某個(gè)小組的手段,而非讓需要它們的每個(gè)人去實(shí)現(xiàn)。

              表2.1對(duì)軟件結(jié)構(gòu)進(jìn)行了總結(jié)。該表列出了每個(gè)結(jié)構(gòu)中的元素及其關(guān)系的含義,并說(shuō)明了每種結(jié)構(gòu)可能會(huì)用于什么情況。    盡管我們通常從功能的角度理解某個(gè)系統(tǒng)的結(jié)構(gòu),但除了功能外,還有必須在構(gòu)架層次上考慮的系統(tǒng)屬性,如物理分布、進(jìn)程通信和同步。每種結(jié)構(gòu)都提供了一個(gè)對(duì)某些相關(guān)質(zhì)量屬性進(jìn)行推斷的方法。進(jìn)程結(jié)構(gòu)設(shè)計(jì)用于消除死鎖并減少瓶頸。模塊分解結(jié)構(gòu)設(shè)計(jì)用于產(chǎn)生可修改的系統(tǒng),等等。每種結(jié)構(gòu)都為設(shè)計(jì)師提供了一個(gè)考察系統(tǒng)的不同的角度,并為設(shè)計(jì)權(quán)衡提供了不同的支點(diǎn)。

        將結(jié)構(gòu)彼此關(guān)聯(lián)在一起       盡管這些結(jié)構(gòu)提供了不同的考察系統(tǒng)的視角,但它們不是獨(dú)立的。一個(gè)結(jié)構(gòu)的元素與其他結(jié)構(gòu)的元素相關(guān),我們需要對(duì)這些關(guān)系進(jìn)行推斷。  單個(gè)項(xiàng)目有時(shí)會(huì)把一種結(jié)構(gòu)作為主要結(jié)構(gòu),并在可能的情況下,根據(jù)該結(jié)構(gòu)考慮和運(yùn)用其他結(jié)構(gòu)。主要結(jié)構(gòu)通常是模塊分解,但并不總是如此。這是有充足理由的:它容易與組織的項(xiàng)目結(jié)構(gòu)吻合。    并不是所有的系統(tǒng)都需要在構(gòu)架上采用多種結(jié)構(gòu)。系統(tǒng)越大,這些結(jié)構(gòu)之間的差別就越大;然而對(duì)于較小的系統(tǒng),有少數(shù)幾個(gè)結(jié)構(gòu)通常即可滿足要求。在有幾個(gè)組件--連接器結(jié)構(gòu)時(shí),我們不是把每個(gè)結(jié)構(gòu)都用上,一個(gè)即可滿足要求。如果只有一個(gè)進(jìn)程,那么,在設(shè)計(jì)中顯然沒(méi)必要考慮進(jìn)程結(jié)構(gòu)。如果沒(méi)有分布式的特征(也就是說(shuō),僅有一個(gè)處理器),那么,部署結(jié)構(gòu)就沒(méi)有什么價(jià)值,不需要做進(jìn)一步考慮。

               結(jié)構(gòu)代表了構(gòu)架的主要工程設(shè)計(jì)平衡點(diǎn)。單個(gè)結(jié)構(gòu)賦予了它們處理一個(gè)或多個(gè)質(zhì)量屬性的能力。它們代表了一個(gè)用于創(chuàng)建構(gòu)架的強(qiáng)大的關(guān)注點(diǎn)分離方法。

        選擇哪些結(jié)構(gòu)      設(shè)計(jì)師應(yīng)該使用哪些結(jié)構(gòu)?設(shè)計(jì)師應(yīng)該把哪些結(jié)構(gòu)編成文檔?當(dāng)然,肯定不是使用所有結(jié)構(gòu)并把所有的結(jié)構(gòu)編成文檔。   這方面有很多建議。1995年,Philippe Kruchten發(fā)表了一篇很有影響力的論文【Kruchten95】。在這篇論文中,他描述了由單獨(dú)的結(jié)構(gòu)組成的構(gòu)架的概念,并建議把重點(diǎn)放在4種結(jié)構(gòu)上。為了驗(yàn)證這些結(jié)構(gòu)彼此并不沖突,在實(shí)際應(yīng)用中能夠相互協(xié)作,他描述了一個(gè)滿足其需求的系統(tǒng)。Kruchten95建議使用關(guān)鍵的用力進(jìn)行檢查。這一所謂的“4+1”方法變得非常流行,現(xiàn)在已經(jīng)成為Rational統(tǒng)一過(guò)程的概念基礎(chǔ)。

        • 邏輯的。元素為“關(guān)鍵的抽象”,在面向?qū)ο笾斜硎緸閷?duì)象或?qū)ο箢?lèi)。這是一個(gè)模塊視圖。
        • 進(jìn)程。該視圖解決了功能的并發(fā)和分布問(wèn)題。這是一個(gè)組件--連接器視圖。
        • 開(kāi)發(fā)。該視圖展示了軟件模塊、庫(kù)、子系統(tǒng)和開(kāi)發(fā)單元的組織。它是一個(gè)分配視圖,將軟件映射到了開(kāi)發(fā)環(huán)境中。
        • 物理的。該視圖將其他元素映射到了處理和通信節(jié)點(diǎn)上,它是一個(gè)分配視圖(有些人把它叫做部署視圖)。

        幾乎在Kruchten發(fā)表論文的同一時(shí)間,Soni , Nord 和 Hofmeister 共同發(fā)表了一篇非常有影響力的論文。在這篇論文中,它們報(bào)告了其所在的組織中的軟件設(shè)計(jì)師在許多項(xiàng)目中使用的結(jié)構(gòu)。它們的視圖是概念上的模塊互連、執(zhí)行和代碼。這些視圖再一次清晰地映射刀模塊、組件-連接器以及分配模型上。     設(shè)計(jì)師的職責(zé)之一就是理解各種結(jié)構(gòu)如何幫助實(shí)現(xiàn)質(zhì)量屬性,然后選擇能夠最佳地提供這些質(zhì)量屬性的結(jié)構(gòu)。

      小結(jié)      本章給出了軟件構(gòu)架的定義,并介紹了參考模型、參考構(gòu)架和構(gòu)架模式的相關(guān)概念。本章也從早期研究對(duì)系統(tǒng)的認(rèn)識(shí)、構(gòu)架對(duì)各涉眾相互溝通的影響以及作為一種可重用資產(chǎn)的價(jià)值等方面,解釋了構(gòu)架在軟件工程領(lǐng)域的重要意義。



                                                                                                           --    學(xué)海無(wú)涯
            

    主站蜘蛛池模板: 国产精品亚洲专区无码WEB| 好爽好紧好大的免费视频国产| 羞羞网站在线免费观看| 亚洲国产成人精品无码区在线网站 | 美女被免费喷白浆视频| 午夜无码A级毛片免费视频| 久久久久国产精品免费网站| 日韩成人毛片高清视频免费看| 亚洲中字慕日产2021| 亚洲美女视频网址| 久久综合九九亚洲一区| 国产日产亚洲系列| 九月婷婷亚洲综合在线| 在线观看亚洲免费视频| 日本久久久免费高清| 毛片a级毛片免费播放100| 黄色网址免费观看| 99爱免费观看视频在线| 日韩免费在线视频| 99在线热播精品免费99热| 中国毛片免费观看| 97在线免费视频| 伊人久久大香线蕉免费视频| jizz免费一区二区三区| 一二三区免费视频| 一个人看的www在线免费视频| 日韩在线一区二区三区免费视频| 美景之屋4在线未删减免费 | 女人被男人桶得好爽免费视频| 日韩视频在线精品视频免费观看 | 无码欧精品亚洲日韩一区| 亚洲VA中文字幕无码一二三区| 亚洲精品无码mv在线观看网站| 国产亚洲AV夜间福利香蕉149| 中文字幕亚洲激情| 亚洲老妈激情一区二区三区| 亚洲AV无码专区亚洲AV伊甸园| 亚洲成年轻人电影网站www| 亚洲视频在线观看不卡| 亚洲成人免费网站| 亚洲av永久无码嘿嘿嘿|