軟件構(gòu)架結(jié)構(gòu)_第1頁
軟件構(gòu)架結(jié)構(gòu)_第2頁
軟件構(gòu)架結(jié)構(gòu)_第3頁
軟件構(gòu)架結(jié)構(gòu)_第4頁
軟件構(gòu)架結(jié)構(gòu)_第5頁
已閱讀5頁,還剩90頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 軟件構(gòu)架實(shí)踐之軟件構(gòu)架概念構(gòu)架模式、參考模型和參考構(gòu)架軟件構(gòu)架的重要性構(gòu)架的結(jié)構(gòu)和視圖小結(jié)第一章闡述了構(gòu)架在保證開發(fā)組織實(shí)現(xiàn) 其商業(yè)目標(biāo)方面所起到的重要作用需要付出成本提高開發(fā)能力極重要的資產(chǎn)軟件構(gòu)架那么軟件構(gòu)架在項(xiàng)目開發(fā)中又有什么意義呢?最早在軟件開發(fā)領(lǐng)域,構(gòu)架這個(gè)詞用來指適用多個(gè)系統(tǒng)的計(jì)算機(jī)系統(tǒng)的描述Fred Brooks和Ken Inverson等人相繼給出了描述,在這之前Blaauw最先提出了“構(gòu)架”David Parnas提出了關(guān)于構(gòu)架的許多基本原則1969年構(gòu)架實(shí)際上是同類系統(tǒng)的抽象70年代*信息隱藏原則*關(guān)于只允許通過接口使用元素的原則*強(qiáng)調(diào)對(duì)軟件系統(tǒng)中的不同結(jié)構(gòu)進(jìn)行考察,不得

2、混淆這些結(jié)構(gòu)*在基于組件開發(fā)的系統(tǒng)中錯(cuò)誤處理和檢測原則*將每個(gè)程序都看做某一程序族的一員*認(rèn)識(shí)到系統(tǒng)的結(jié)構(gòu)影響到系統(tǒng)的質(zhì)量*引入使用結(jié)構(gòu),該原則控制各個(gè)元素之間的連接,以增強(qiáng)系統(tǒng)的可擴(kuò)展性控制處理(CP)特征損失模型(MODP)回響模型(MODR)噪音模型(MODN)圖1 未提供多少信息的軟件構(gòu)架的描述圖*系統(tǒng)是由4個(gè)元素組成*其中的3個(gè)元素特征損失模型(MODP)、回響模型(MODR)和噪音模型(MODN)可能有更多的相似之處,但是他們與第4個(gè)元素控制處理(CP)之間可能會(huì)有較大的差異,因?yàn)榍叭齻€(gè)元素在圖中處于同一層次上*該圖是完全連通的,因而所有的元素之間顯然存在著某種聯(lián)系 這就是構(gòu)架嗎?

3、如果構(gòu)架真的是由若干組件及其之間的相互聯(lián)系組成,則用這樣的圖就足以表述構(gòu)架,但是,從圖中并不能得到以下信息:(1)從元素的角度上:這些元素的實(shí)質(zhì)是什么?劃分成這樣的元素有何種意義?它們是否能運(yùn)行在不同的處理器上?從運(yùn)行時(shí)間上看,是否相互獨(dú)立?這些元素是由進(jìn)程還是程序組成,或者是兩者兼有?這些元素是否反應(yīng)了開發(fā)項(xiàng)目任務(wù)的劃分?它們是否表示了運(yùn)行時(shí)獨(dú)立性?這些組件是對(duì)象、任務(wù)、函數(shù)、進(jìn)程、分布式程序,還是其他?(2)從職責(zé)的角度上:元素的職責(zé)是什么?它們在系統(tǒng)中做什么?在系統(tǒng)中的功能是什么?(3)從聯(lián)系關(guān)系的角度上:圖中的連線代表的意思是什么?這些連線是表示這些元素相互通信、相互控制、相互發(fā)送數(shù)據(jù)

4、、相互作用、相互調(diào)用、保持同步、彼此之間共享一些信息隱藏秘密,還是上述關(guān)系和其他關(guān)系的組合?這種相互通信又是借助什么機(jī)制來實(shí)現(xiàn)的?在機(jī)制之間流動(dòng)的可能是什么信息(4)從分布的角度上:各個(gè)元素在圖中的分布表示什么意義?為什么CP單獨(dú)在一個(gè)層次上?是不是CP可以調(diào)用其他元素反之不行呢?是不是僅僅因?yàn)槭馨婷婵臻g的限制而沒有將這4個(gè)元素排成一行。 根據(jù)上面所提出的問題,必須知道以下幾個(gè)方面,否則這樣的圖是沒有意義的 (1)準(zhǔn)確的知道元素是什么,表示的是什么意思 (2)元素之間是如何協(xié)作來實(shí)現(xiàn)系統(tǒng)的目的的 軟件構(gòu)架在不斷的發(fā)展,但它仍然是一門尚不成熟的學(xué)科,因此軟件構(gòu)架并沒有一個(gè)統(tǒng)一的、公認(rèn)的定義。大多

5、數(shù)常見的定義的要點(diǎn)都是一致的結(jié)構(gòu)、元素以及各元素之間的關(guān)系。軟件構(gòu)架的定義大體可以分為兩類:1、決策派的定義-一組決策的集合2、組成派的定義元素+元素的關(guān)系*Booch、Rumbaugh和Jacobson的定義: 構(gòu)架是一系列重要決策的集合,這些決策與以下內(nèi)容相關(guān):軟件的組織、構(gòu)成系統(tǒng)的結(jié)構(gòu)元素及其接口的選擇,這些元素在相互協(xié)作中明確表現(xiàn)的行為,這些結(jié)構(gòu)元素和行為元素進(jìn)一步組合所構(gòu)成的更大規(guī)模的子系統(tǒng),以及如何組織這些元素*Woods的定義 軟件構(gòu)架是一系列設(shè)計(jì)決策,如果做了不正當(dāng)?shù)臎Q策,項(xiàng)目可能最終會(huì)被取消*Garlan和Shaw的定義 構(gòu)架包括組件(Component)、連接器(Conne

6、ctor)和約束(Constrain)三大要素*Boehmn的定義 軟件構(gòu)架包括系統(tǒng)組件、連接件和約束的集合,反應(yīng)不同涉眾需求的集合和原理的集合*該定義屬于組成派定義的范疇*內(nèi)容:構(gòu)架是以組件、組件之間的關(guān)系、組件與環(huán)境之間的關(guān)系為內(nèi)容的某一系統(tǒng)的基本組織結(jié)構(gòu),以及指導(dǎo)上述內(nèi)容涉及與演化的原理(1)構(gòu)架是一種高層設(shè)計(jì)。 從馬是哺乳動(dòng)物這個(gè)意義上來說,這種說法是正確的,但是反過來說就不對(duì)了。與設(shè)計(jì)相關(guān)的其他任務(wù)并不屬于構(gòu)架,如確定將要封裝的重要的數(shù)據(jù)結(jié)構(gòu)。訪問數(shù)據(jù)結(jié)構(gòu)的接口肯定屬于構(gòu)架的范疇,但是實(shí)際做出的選擇卻不是。(2)構(gòu)架是系統(tǒng)的總體結(jié)構(gòu)。 這個(gè)常見的說法是不正確的,其中暗含的意思是系統(tǒng)只

7、有一個(gè)結(jié)構(gòu)。但是這種觀點(diǎn)具有教學(xué)上的重要性,因?yàn)楹竺婵梢钥吹?,不同的結(jié)構(gòu)提供了一個(gè)關(guān)鍵的工程設(shè)計(jì)平衡點(diǎn),這些平衡點(diǎn)使得系統(tǒng)中具有了導(dǎo)致系統(tǒng)成功或者失敗的質(zhì)量屬性,構(gòu)架中的結(jié)構(gòu)的多樣性位于概念的核心。(3)構(gòu)架是軟件或者系統(tǒng)的組件、組件之間的相互關(guān)系以及管理其設(shè)計(jì)和演變的原理和方針的結(jié)構(gòu)。 這是許多以過程為中心的定義中的一種,也是屬于組成派的定義范疇,其中包括諸如原理和指導(dǎo)方針這樣的輔助性信息。許多人聲稱構(gòu)架中包含對(duì)涉眾需要以及如何滿足這些需要的基本原理的陳述。我們認(rèn)為收集此類信息是基本的,它是一個(gè)很好的專業(yè)實(shí)踐,然而,從本質(zhì)上來說它們并不是構(gòu)架的一部分,例如并不把汽車所有者的手冊作為汽車的一部

8、分一樣。 任何一個(gè)系統(tǒng)都有一個(gè)構(gòu)架,并且可以獨(dú)立于設(shè)計(jì)或演變該構(gòu)架的過程的知識(shí)對(duì)其進(jìn)行探索和分析。(4)構(gòu)架是組件和連接器。 連接器:指的是系統(tǒng)運(yùn)行時(shí)為傳送控制和數(shù)據(jù)信息而采用的機(jī)制。 該定義強(qiáng)調(diào)了系統(tǒng)運(yùn)行時(shí)的構(gòu)架。涉眾涉眾基本解釋:涉眾是與要建設(shè)的業(yè)務(wù)系統(tǒng)相關(guān)的一切人和事。舉例解釋:例如修建一條公路,它預(yù)期的使用者是廣大的司機(jī);監(jiān)管方是交通管理局;出資方是國家財(cái)政;發(fā)展商是某某公司;建筑商是某某工程公司等。顯然他們都與此項(xiàng)目有利益關(guān)系,都是涉眾。這些都好理解。但是在某些情況下,看似與公路完全無關(guān)的一些人和事卻會(huì)成為重要涉眾。例如當(dāng)公路修建需要搬遷居民時(shí),被搬遷的居民就成為重要的涉眾;當(dāng)公路規(guī)

9、劃遇到歷史建筑時(shí),文物管理局就成為重要的涉眾。雖然軟件項(xiàng)目開發(fā)與修建公路相比涉及的人和事要少得多,但是也不能忽略系統(tǒng)使用者之外的其他涉眾。另外,當(dāng)面對(duì)一個(gè)陌生的問題領(lǐng)域時(shí),往往在項(xiàng)目初期還不能夠清楚的獲悉究竟誰是系統(tǒng)的使用者,通常得隨著需求的深入逐步明確。但是最終的系統(tǒng)使用者將從涉眾當(dāng)中產(chǎn)生,因此涉眾分析顯得尤為重要。 關(guān)于軟件構(gòu)架所做的各種討論的實(shí)質(zhì)就是對(duì)軟件系統(tǒng)結(jié)構(gòu)問題的關(guān)注。盡管構(gòu)架有時(shí)候用來表示某種構(gòu)架模式(如“客戶機(jī)/服務(wù)器構(gòu)架”),有時(shí)候也用來表示某一研究領(lǐng)域(例如“一本關(guān)于構(gòu)架的書”),但是最常見的情況是用構(gòu)架來描述某個(gè)特定系統(tǒng)的結(jié)構(gòu)特點(diǎn)。定義:某個(gè)軟件或者計(jì)算機(jī)系統(tǒng)的軟件構(gòu)架是

10、該系統(tǒng)的一個(gè)或多個(gè)結(jié)構(gòu),它們由軟件元素、這些元素的外部可見屬性以及這些元素之間的關(guān)系組成。構(gòu)架含義: (1)構(gòu)架定義了軟件元素。構(gòu)架中包含了關(guān)于各元素應(yīng)如何彼此相關(guān)的信息,也就是說,構(gòu)架必須省略各元素與其交互無關(guān)的某些信息。構(gòu)架首先是對(duì)系統(tǒng)的抽象說明*該種抽象去除了并不影響它們?nèi)绾问褂?、其他元素如何使用以及如何與其他元素關(guān)聯(lián)或交互的細(xì)節(jié)。*幾乎所有的現(xiàn)代系統(tǒng)中,各元素是通過接口實(shí)現(xiàn)交互的,而這些接口又將各元素的細(xì)節(jié)劃分為公有和私有兩大類。根據(jù)這種劃分,構(gòu)架屬于公有部分,但是私有部分,也就是指的是僅與內(nèi)部具體實(shí)現(xiàn)有關(guān)的細(xì)節(jié),并不屬于構(gòu)架的范圍。(2)該定義明確指出系統(tǒng)可能而且確實(shí)由多個(gè)結(jié)構(gòu)組成。

11、 其中任何一個(gè)結(jié)構(gòu)不能與構(gòu)架等同。比如說,所有的大型項(xiàng)目都要?jiǎng)澐譃閷?shí)現(xiàn)單元,這些單元被分配具體的責(zé)任,它們通常是為編程小組分配任務(wù)的基礎(chǔ)。這種類型的元素既可以包括由其他實(shí)現(xiàn)單元中的軟件調(diào)用或訪問的程序和數(shù)據(jù),又包括私有的程序和數(shù)據(jù)。在大型項(xiàng)目中,幾乎肯定會(huì)對(duì)這些元素進(jìn)行較細(xì)的劃分,以來交給更小的開發(fā)小組完成。這是在描述系統(tǒng)中經(jīng)常使用的一種結(jié)構(gòu),但是這種結(jié)構(gòu)的側(cè)重于對(duì)系統(tǒng)功能的劃分,并將其分配給實(shí)現(xiàn)小組。說明:*構(gòu)架中包括這些結(jié)構(gòu),并且還可能包括其他結(jié)構(gòu)。雖然這些結(jié)構(gòu)傳達(dá)了構(gòu)架的信息,但是它們?nèi)匀徊皇菢?gòu)架。構(gòu)架中可能包括多個(gè)結(jié)構(gòu),就可能有多種元素(例如實(shí)現(xiàn)單元和進(jìn)程),各個(gè)元素間的交互關(guān)系也可能

12、有多種(例如細(xì)化分和同步),甚至還可能有多個(gè)上下文環(huán)境(例如開發(fā)時(shí)間和運(yùn)行時(shí)間)。*構(gòu)架中不同的結(jié)構(gòu)有著不同的側(cè)重點(diǎn),有些考慮功能的分解,有些考慮元素在運(yùn)行時(shí)候的交互關(guān)系等。(3)該定義意味著具有軟件的每個(gè)計(jì)算機(jī)系統(tǒng)都有一個(gè)軟件構(gòu)架。每個(gè)軟件系統(tǒng)都可以看做是由若干個(gè)元素及其相互聯(lián)系構(gòu)成的說明:每個(gè)系統(tǒng)都具有元素及其之間的交互,因此都具有構(gòu)架,但是并不是所有的人都能知道這個(gè)構(gòu)架的存在。但是,幸運(yùn)的是構(gòu)架可以獨(dú)立于構(gòu)架的描述而存在,這里就體現(xiàn)出構(gòu)架編檔和構(gòu)架重構(gòu)的重要性。*構(gòu)架編檔定義:構(gòu)架編檔的定義是將相關(guān)視圖編程文檔,然后向其中添加適合多個(gè)視圖的文件。作用:構(gòu)架編檔是創(chuàng)建構(gòu)架的最有價(jià)值的一步,

13、即使構(gòu)架非常完美,但是如果沒有人理解它,或者更糟糕的誤解它,它也就沒什么用處。*構(gòu)架重構(gòu)構(gòu)架重構(gòu)是一種解釋、交互和迭代的過程。并不是自動(dòng)進(jìn)行的,很大程度上是因?yàn)樵谠创a中并沒有清楚地表示構(gòu)架構(gòu)件。*(4)只要某個(gè)元素的行為可以從其他元素的角度觀察到或者區(qū)別開,這個(gè)元素的行為就是構(gòu)架的內(nèi)容。*說明: 正是因?yàn)檫@種行為的存在,才使各個(gè)元素的交互成為可能,而這種交互只是構(gòu)架的一部分。(5)構(gòu)架的定義當(dāng)中并不涉及對(duì)構(gòu)架優(yōu)劣的評(píng)價(jià)。這就意味著構(gòu)架將支持或阻止系統(tǒng)滿足其行為、性能和生命周期需求,從而就顯出了構(gòu)架評(píng)估和構(gòu)架設(shè)計(jì)的重要性。 在框線骨架和已經(jīng)填充了關(guān)于系統(tǒng)的所有適當(dāng)信息的構(gòu)架之間,存在很多中間階

14、段,每個(gè)階段都是執(zhí)行一組構(gòu)架決策的結(jié)果,其中的一些中間階段非常重要。三個(gè)定義:(1)構(gòu)架模式 (2)參考模型(3)參考構(gòu)架*定義定義:構(gòu)架模式是對(duì)元素和關(guān)系類型以及一組對(duì)其使用方式的限制的描述。*說明說明:(1)可以把構(gòu)架模式看做是對(duì)構(gòu)架的一組制約條件即對(duì)各元素類型及其交互模式的限制條件,而這些制約條件就確定了一組或一系列能夠滿足他們的構(gòu)架。(2)構(gòu)架模式最有用的一個(gè)方面就是它們展示了已知的質(zhì)量屬性。這就是設(shè)計(jì)師選擇某種特定的模式,而不去選擇隨機(jī)模式的原因。一些模式代表了性能問題的已知解決方案,一些模式適用于高安全性系統(tǒng),還有一些模式成功應(yīng)用在高可用性系統(tǒng)中,選擇構(gòu)架模式通常是設(shè)計(jì)師做出的第一

15、個(gè)主要的設(shè)計(jì)決策。 圖4 搜索引擎網(wǎng)站*說明: 客戶機(jī)/服務(wù)器是一種常見的構(gòu)架模式??蛻魴C(jī)和服務(wù)器分別對(duì)應(yīng)于兩種不同的元素類型,它們之間的協(xié)同是用服務(wù)器與其各客戶機(jī)通信時(shí)所遵循的協(xié)議來描述的。使用“客戶機(jī)/服務(wù)器”這個(gè)名詞僅僅意味著存在多個(gè)客戶機(jī),對(duì)客戶機(jī)本身并沒有做出任何的限制,也沒有明確客戶機(jī)或者服務(wù)器各自的功能(除了通信協(xié)議中約定的之外)。按照這種定義符合客戶機(jī)/服務(wù)器模式的系統(tǒng)很多,但他們各不相同。所以,構(gòu)架模式并不等同于構(gòu)架,但是它傳達(dá)了一些有價(jià)值的系統(tǒng)信息,對(duì)構(gòu)架(及系統(tǒng))做出了必要的約束。*定義:參考模型是一種考慮數(shù)據(jù)流的功能劃分。 參考模型是對(duì)已知問題的標(biāo)準(zhǔn)分解,分解所得的各個(gè)

16、部分相互協(xié)作,構(gòu)成問題的解決方案,產(chǎn)生于實(shí)踐的參考模型是熟知某個(gè)領(lǐng)域的體現(xiàn)。 圖5 網(wǎng)絡(luò)參考模型*定義:參考構(gòu)架是映射到軟件元素(它們相互協(xié)作,共同實(shí)現(xiàn)在參考模型中定義的功能)及元素之間數(shù)據(jù)流上的參考模型。 參考模型實(shí)現(xiàn)了功能劃分,于此相對(duì)應(yīng)的參考構(gòu)架將這種功能劃分與系統(tǒng)分解對(duì)應(yīng)起來。這種對(duì)應(yīng)可能(但不一定必須)是一一映射。一個(gè)軟件元素可以實(shí)現(xiàn)某個(gè)功能的一部分,也可以實(shí)現(xiàn)若干個(gè)功能。 參考模型、構(gòu)架模式和參考構(gòu)架都不是構(gòu)架,但他們都是捕獲構(gòu)架元素的有用的概念。這三者都是早期設(shè)計(jì)決策的產(chǎn)物。參考模型構(gòu)架模式參考構(gòu)架軟件構(gòu)架注:箭頭說明后續(xù)概念包含更多的設(shè)計(jì)元素*為什么說軟件構(gòu)架非常重要呢?(1)

17、涉眾之間的交流。)涉眾之間的交流。軟件構(gòu)架是一種常見的對(duì)系統(tǒng)的抽象,絕大多數(shù)(如果不是全部的話)系統(tǒng)的涉眾都以此作為彼此理解、協(xié)商、達(dá)成共識(shí)或相互溝通的基礎(chǔ)。(2)早期設(shè)計(jì)決策)早期設(shè)計(jì)決策。軟件構(gòu)架是所開發(fā)系統(tǒng)的最早設(shè)計(jì)決策的體現(xiàn),而這些早期決策對(duì)系統(tǒng)的后續(xù)開發(fā)、部署和維護(hù)具有重要影響。這也是能夠?qū)λ_發(fā)西戎進(jìn)行分析的最早時(shí)間點(diǎn)。(3)可傳遞的系統(tǒng)抽象)可傳遞的系統(tǒng)抽象。軟件構(gòu)架是關(guān)于系統(tǒng)構(gòu)造以及系統(tǒng)各元素工作機(jī)制的相對(duì)較小、卻又能突出反映問題的模型。這種模型可以在多個(gè)系統(tǒng)之間傳遞,特別是可以應(yīng)用到具有相似質(zhì)量屬性和功能需求的系統(tǒng)中,并能夠促進(jìn)大規(guī)模的重用。 軟件系統(tǒng)的涉眾客戶、用戶、項(xiàng)目經(jīng)

18、理、程序員、測試人員等分別關(guān)注系統(tǒng)的不同特征,而這些特征都受構(gòu)架影響。用戶關(guān)心客戶關(guān)心項(xiàng)目經(jīng)理設(shè)計(jì)師系統(tǒng)的可靠性和可用性構(gòu)架能否在規(guī)定時(shí)間內(nèi)實(shí)現(xiàn),并且開支不超出預(yù)算如果按照此構(gòu)架進(jìn)行開發(fā),能否保證各小組任務(wù)在最大程度上都獨(dú)立完成,各部分的交互方式是否規(guī)范、可控實(shí)現(xiàn)構(gòu)架的所有這些目標(biāo)的策略構(gòu)架提供了一種共同的語言,有關(guān)各方可借助它表達(dá)和協(xié)商各自的需求,并理性的找到解決方案*說明:說明: (1)即使對(duì)大型的、復(fù)雜系統(tǒng)的開發(fā)中構(gòu)架也是涉眾交流的手段。 (2)如果沒有這樣一種語言,要想充分理解大型系統(tǒng)并理智地做出對(duì)系統(tǒng)質(zhì)量和易用性都具有重要影響的早期決策將十分困難。(軟件構(gòu)架的重要性) (3)架構(gòu)設(shè)計(jì)

19、的過程使得不同的涉眾達(dá)成一致的目標(biāo),因?yàn)榧軜?gòu)設(shè)計(jì)提供了一個(gè)辯論系統(tǒng)解決方案的媒體。 軟件構(gòu)架體現(xiàn)了對(duì)系統(tǒng)做出的最早的設(shè)計(jì)決策。這些早期決策的正確性最難保證,而且在隨后的開發(fā)過程中也最難改變,它們影響也最為深遠(yuǎn)。早期決策很難保證正確性隨后開發(fā)過程中深遠(yuǎ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)元素1元素2元素3元素n 各元素必須按照設(shè)定的方式進(jìn)行交互,而且每個(gè)元素也必須具有構(gòu)架中所規(guī)定的外部特征資源分配方面的決策也制約著系統(tǒng)實(shí)現(xiàn)。 這些決策對(duì)從事各個(gè)元素的開發(fā)人員來說是可能是不可見的。這些限制條件使將各方

20、關(guān)心的問題分離開成為可能,從而使管理者能夠做出科學(xué)的決策,最大限度地利用人才和計(jì)算資源。各個(gè)元素的開發(fā)者對(duì)自己所從事的開發(fā)任務(wù)的要求必須十分清楚,但沒有必要了解在構(gòu)架上所做的權(quán)衡。相反,構(gòu)架設(shè)計(jì)師未必要精通算法設(shè)計(jì)或者編程語言的各個(gè)方面,但必須能夠做出構(gòu)架上的合理權(quán)衡。系統(tǒng)會(huì)運(yùn)行在什么樣的資源環(huán)境下,獨(dú)立的PC機(jī),手機(jī)還是分布式系統(tǒng)。 構(gòu)架不僅規(guī)定了所開發(fā)的軟件系統(tǒng)的結(jié)構(gòu),而且還影響著項(xiàng)目開發(fā)組的結(jié)構(gòu)(正如第一章所講的,有時(shí)會(huì)影響到整個(gè)組織的結(jié)構(gòu))。 開發(fā)大型系統(tǒng)時(shí),常見的任務(wù)劃分方法是將系統(tǒng)的不同部分交由不同的小組去完成,這就是所謂的系統(tǒng)工作分解結(jié)構(gòu)。因?yàn)橄到y(tǒng)的構(gòu)架中包含了對(duì)系統(tǒng)的最高層次的

21、分解因而一般被作為工作分解結(jié)構(gòu)的基礎(chǔ)。這反過來也規(guī)定了計(jì)劃、調(diào)度及預(yù)算的單元,組內(nèi)交流的渠道,配置控制和文件系統(tǒng)的組織,集成與測試計(jì)劃和規(guī)程,甚至提出對(duì)一些瑣事的要求(如組織內(nèi)部網(wǎng)的方式和開發(fā)小組出去野餐的次數(shù))。各開發(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)架的某它限定了軟件構(gòu)架的某些方面,比如更改工作小組些方面,比如更改工作小組系統(tǒng)由不同組件組成*說明(更換工作小組的副作用): 如果已經(jīng)將某個(gè)子系統(tǒng)的開發(fā)交由某個(gè)小組完成,則該小組會(huì)對(duì)將此任務(wù)分派給其他小

22、組提出異議。如果這種責(zé)任劃分已經(jīng)用合同的形式確定下來,則改變?nèi)蝿?wù)分配的代價(jià)可能是昂貴的。對(duì)分配到各小組的任務(wù)進(jìn)展情況的跟蹤也要困難得多。結(jié)論:一旦構(gòu)架達(dá)成一致,不管是由于管理上的還是商業(yè)上的原因,想要對(duì)它進(jìn)行修改,幾乎是不可能的。這也是為什么在確定某個(gè)大型系統(tǒng)的框架之前必須進(jìn)行全面分析的原因之一。 系統(tǒng)能否具有所期望(或要求)的質(zhì)量屬性,主要是由其構(gòu)架所決定的。在這里只需明確一下幾點(diǎn):(1)如果系統(tǒng)要求高性能,就需要管理元素基于時(shí)間的行為以及元素間通信的頻率和數(shù)量。高性能要求(2)如果可修改性很重要,就需要給元素分配責(zé)任,)如果可修改性很重要,就需要給元素分配責(zé)任,以使對(duì)系統(tǒng)的修改不會(huì)產(chǎn)生很大

23、的影響以使對(duì)系統(tǒng)的修改不會(huì)產(chǎn)生很大的影響。說明:好的構(gòu)架使修改更加容易,每個(gè)構(gòu)架的修改可以分為:本地的、非本地的和構(gòu)架上的,我們應(yīng)將系統(tǒng)的修改控制在最容易修改的地方(3)如果系統(tǒng)必須非常安全,就需要管理和保護(hù)元)如果系統(tǒng)必須非常安全,就需要管理和保護(hù)元素間的通信以及允許哪些元素訪問信息。可能還需要素間的通信以及允許哪些元素訪問信息??赡苓€需要在構(gòu)架中引入專門的元素(如受信的內(nèi)核)。在構(gòu)架中引入專門的元素(如受信的內(nèi)核)。(可以類比數(shù)據(jù)庫)(4)如果認(rèn)為系統(tǒng)需要可擴(kuò)展性,就必須仔細(xì)定位)如果認(rèn)為系統(tǒng)需要可擴(kuò)展性,就必須仔細(xì)定位資源的使用,以有利于引入容量更高的更換組件。資源的使用,以有利于引入容

24、量更高的更換組件。(5)如果項(xiàng)目需要交付系統(tǒng)的增量式子集,就)如果項(xiàng)目需要交付系統(tǒng)的增量式子集,就必須仔細(xì)管理組件間的使用。必須仔細(xì)管理組件間的使用。(6)如果希望可以在其他系統(tǒng)中重用該系統(tǒng)的)如果希望可以在其他系統(tǒng)中重用該系統(tǒng)的元素,就需要限制元素間的耦合,以便提取元素元素,就需要限制元素間的耦合,以便提取元素時(shí),能發(fā)揮作用,且不會(huì)與當(dāng)前環(huán)境有過多的依時(shí),能發(fā)揮作用,且不會(huì)與當(dāng)前環(huán)境有過多的依賴。賴。*說明: (1)這些和其他質(zhì)量屬性策略都與構(gòu)架有很大關(guān)系。 (2)僅靠構(gòu)架并不能保證系統(tǒng)功能和質(zhì)量屬性的實(shí)現(xiàn)。 (3)下游設(shè)計(jì)或?qū)崿F(xiàn)決策水平的低下往往會(huì)削弱一個(gè)本來完美的構(gòu)架。 (4)在生命周期

25、所有階段做出的決策從高層的設(shè)計(jì)到低層的編碼和實(shí)現(xiàn)都影響著系統(tǒng)的質(zhì)量 能否在系統(tǒng)開發(fā)和部署前就知道做出了適當(dāng)?shù)臉?gòu)架決策(也就是系統(tǒng)是否表現(xiàn)出所期望的質(zhì)量屬性)?構(gòu)架的選擇就是一項(xiàng)令人頗感無助的工作-用其他辦法選擇構(gòu)架和隨機(jī)選擇沒有兩樣僅僅依靠對(duì)構(gòu)架的評(píng)估來預(yù)測未來的質(zhì)量屬性是可能的(構(gòu)架權(quán)衡分析方法)*一般來說,軟件系統(tǒng)的成本大約有80%是花費(fèi)在初次部署之后,即維護(hù)階段。*整個(gè)生命周期內(nèi),軟件系統(tǒng)在不斷發(fā)生變化:這種變化是經(jīng)常發(fā)生的,而且是要付出較高代價(jià)的。*每個(gè)構(gòu)架都將可能的更改劃分3類:本地的、非本地的和構(gòu)架上的。構(gòu)架的更改本地的非本地的構(gòu)架上的只需要修改某一個(gè)元素就可以實(shí)現(xiàn)需要對(duì)多個(gè)元素進(jìn)

26、行修改,但是并不改動(dòng)構(gòu)架構(gòu)架的修改會(huì)影響各元素之間交互的基本方式-即構(gòu)架模式-并很大可能要求系統(tǒng)做全面的修改最理想*說明: 確定何時(shí)必須更改、以什么方式更改風(fēng)險(xiǎn)最小、估計(jì)所提出的更改方案的可能影響以及合理安排所提出的更改的實(shí)施順序和優(yōu)先級(jí),都要求對(duì)系統(tǒng)的各軟件元素的關(guān)系、性能和行為有全面的了解。這都是設(shè)計(jì)師應(yīng)該做的工作。在構(gòu)架層次上所做的推理判斷能夠?yàn)橹贫ǜ臎Q策提供必要的洞察力。 一旦確定了構(gòu)架,就可以對(duì)其進(jìn)行分析,并將其原型構(gòu)造為一個(gè)骨架系統(tǒng)。這從兩個(gè)方面協(xié)助開發(fā)過程的順利進(jìn)行:(1)在產(chǎn)品生命周期的早期就能得到一個(gè)可執(zhí)行的系統(tǒng)。 隨著原型中的各部分逐漸被真實(shí)系統(tǒng)各部分的最終實(shí)現(xiàn)所代替,原

27、型的真實(shí)性將越來越明顯地體現(xiàn)出來。原型的各組成部分可能與系統(tǒng)的最終實(shí)現(xiàn)有較大差異,也可能能夠比較逼真地處理和產(chǎn)生數(shù)據(jù)。(2)使系統(tǒng)在早期可執(zhí)行的一個(gè)特例就是在產(chǎn)品生命周期的早期確定潛在的性能問題。 上述這兩個(gè)方面都將降低項(xiàng)目開發(fā)的風(fēng)險(xiǎn)。如果所用的構(gòu)架是若上述這兩個(gè)方面都將降低項(xiàng)目開發(fā)的風(fēng)險(xiǎn)。如果所用的構(gòu)架是若干相關(guān)構(gòu)架中的一個(gè),則構(gòu)建原型框架的成本就可以分?jǐn)偟蕉鄠€(gè)系干相關(guān)構(gòu)架中的一個(gè),則構(gòu)建原型框架的成本就可以分?jǐn)偟蕉鄠€(gè)系統(tǒng)上。統(tǒng)上。* 成本和進(jìn)度估計(jì)是一個(gè)重要的管理工具,它能夠使管理人員獲得必要的資源并了解項(xiàng)目開發(fā)中是否遇到困難。與了解整個(gè)系統(tǒng)相比,了解系統(tǒng)的某些部分本質(zhì)上可以使成本和進(jìn)度的

28、估計(jì)更加準(zhǔn)確 在整個(gè)生命周期中,重用得越早,收益就越大。代碼的重用能帶來極大的便利,而在構(gòu)架層次上的重用則為具有類似需求的系統(tǒng)開發(fā)提供了有利的手段。不僅可以實(shí)現(xiàn)代碼的重用,還可以實(shí)現(xiàn)決定構(gòu)架選用的系統(tǒng)需求及構(gòu)建構(gòu)架的經(jīng)驗(yàn)的重用。*軟件產(chǎn)品線或家族是一組軟件密集型系統(tǒng),這些系統(tǒng)共享一個(gè)公共的、可管理的特征集,滿足了特定市場或任務(wù)的具體需求,是按照規(guī)定的方式根據(jù)一組公共的核心資產(chǎn)開發(fā)的。*在這些核心資產(chǎn)中,主要部分就是設(shè)計(jì)用來處理整個(gè)家族需要的構(gòu)架。*對(duì)多系統(tǒng)開發(fā)來說,軟件產(chǎn)品線是一種強(qiáng)大的開發(fā)方法,它可以在上市時(shí)間、成本、生產(chǎn)率和產(chǎn)品質(zhì)量方面實(shí)現(xiàn)極大的回報(bào)。*構(gòu)架的強(qiáng)大源于范例的核心。與其他資本

29、投資類似,產(chǎn)品線的構(gòu)架將成為開發(fā)組織的核心資產(chǎn)。微軟的微軟的Windows操作系統(tǒng)是操作系統(tǒng)是很好很好利用利用產(chǎn)品產(chǎn)品線開發(fā)線開發(fā)的的例子例子以前軟件開發(fā)以前軟件開發(fā)編程其他以前軟件開發(fā)總是將編程作為最根本的任務(wù),把編寫了多少行代碼作為衡量項(xiàng)目進(jìn)展情況的依據(jù)基于構(gòu)架的開發(fā)基于構(gòu)架的開發(fā)元素1元素2元素3元素4基于構(gòu)架的開發(fā)強(qiáng)調(diào)的是對(duì)各元素的組合或裝配,而這些元素很可能已分別甚至完全獨(dú)立地實(shí)現(xiàn)了。構(gòu)架從元素與環(huán)境的交互、對(duì)控制的接收和釋放、所能使用或產(chǎn)生的數(shù)據(jù)、訪問數(shù)據(jù)的方式、通信方式以及用于通信和資源共享的協(xié)議等方面對(duì)可能做的更換(或添加)做了種種約定。*互換性原則定義:一種產(chǎn)品、過程或者服務(wù)

30、替代另一種產(chǎn)品、過程或服務(wù)能滿足同樣要求的性能。例如:電燈泡壞了,買一個(gè)按上就可以。*元素結(jié)構(gòu)、接口和操作概念的組織是構(gòu)架的一個(gè)重要方面。*互換性是這種組織的最重要的原則*商業(yè)組件、子系統(tǒng)、兼容的通信接口都是基于互換性原則的。然而,在這種通過組合進(jìn)行的軟件開發(fā)中,還有不少其他問題有待解決。如果準(zhǔn)備裝入或重用的組件是按照相互沖突的構(gòu)架假設(shè)開發(fā)的子系統(tǒng),則裝配工作將會(huì)非常復(fù)雜,這會(huì)增加功能集成所需要的工作量,也就是David Garlan和其同事用“構(gòu)架不匹配”來描述的情況。*Grid控件控件 介紹:介紹: Grid控件或者叫表格控件主要單元是行、列元素交叉形成的一個(gè)個(gè)稱之為單元格的格子。就是具有

31、表格的外觀,實(shí)現(xiàn)了表格功能的控件??梢栽?NET 應(yīng)用程序中讀取和書寫微軟的Excel 文件。 雖然計(jì)算機(jī)程序可以近乎無限的方式來組合,但涉及到程序的協(xié)調(diào)和交互時(shí),有意識(shí)地限制在一定范圍內(nèi)選擇將使我們受益匪淺。希望使所構(gòu)建的系統(tǒng)的設(shè)計(jì)盡可能簡單優(yōu)勢重用程度更高更易于理解和交流的簡單規(guī)范的設(shè)計(jì)更為透徹的分析更短的選擇時(shí)間更強(qiáng)的可互操作性基于C/S的報(bào)社系統(tǒng)示意圖基于C/S的監(jiān)控系統(tǒng)示意圖*構(gòu)架體現(xiàn)了關(guān)于元素交互方式的設(shè)計(jì)決策。 這些決策雖然是在每個(gè)元素的實(shí)現(xiàn)中體現(xiàn)出來的,但卻能夠局部化,只需編寫一次即可??梢栽谀程幱媚0鍖⒃亻g的交互機(jī)制描述清楚。*在對(duì)項(xiàng)目新成員介紹所開發(fā)的系統(tǒng)時(shí),可以首先介紹

32、系統(tǒng)的構(gòu)架,以及對(duì)組件之間如何交互從而實(shí)現(xiàn)系統(tǒng)需求的高層次描述。再一次認(rèn)證再一次認(rèn)證 現(xiàn)代的軟件系統(tǒng)非常復(fù)雜,我們很難一下子就理解他們。正確的做法是任何時(shí)刻我們只關(guān)注軟件系統(tǒng)的一個(gè)或幾個(gè)結(jié)構(gòu),這正如不同的醫(yī)生關(guān)注病人的不同部分。 為了有意義地傳達(dá)構(gòu)架的信息,必須說明此刻正在討論哪個(gè)或者哪些結(jié)構(gòu),因此引入了視圖的概念。 視圖是構(gòu)架元素的內(nèi)聚集的表示,由系統(tǒng)涉眾編寫和閱讀。它由一個(gè)元素集的表示和元素之間的關(guān)系組成。 結(jié)構(gòu)是元素本身的結(jié)合,它們存在與軟件和硬件中。例如:模塊結(jié)構(gòu)是系統(tǒng)的模塊和其他組織的集合。模塊視圖是該結(jié)構(gòu)的表示,由某些系統(tǒng)涉眾編檔和使用。構(gòu)架結(jié)構(gòu)模塊結(jié)構(gòu)組件-連接器結(jié)構(gòu)分配結(jié)構(gòu)基本

33、單元-模塊(元素是模塊)模塊表示一種考慮系統(tǒng)的基于代碼的方法。同時(shí)模塊被分配功能責(zé)任區(qū)域不怎么強(qiáng)調(diào)所開發(fā)出來的軟件如何在運(yùn)行時(shí)表現(xiàn)自己元素為運(yùn)行時(shí)組件(它們是計(jì)算機(jī)的主要單元)和連接器(它們是組件間通信的工具)分配結(jié)構(gòu)展示了軟件元素和創(chuàng)建并執(zhí)行軟件的一個(gè)或多個(gè)外部環(huán)境中的元素之間的關(guān)系分配給每個(gè)模塊的主要功能責(zé)任是什么?它實(shí)際使用的其他軟件是什么?什么模塊通過泛化或特化(也就是繼承)關(guān)系與其他模塊相關(guān)?模塊結(jié)構(gòu)什么是主要的執(zhí)行組件,它們是如何交互?什么是主要的共享數(shù)據(jù)存儲(chǔ)?復(fù)制系統(tǒng)的哪些部分?數(shù)據(jù)在系統(tǒng)中經(jīng)過了哪些地方?系統(tǒng)的哪些部分可以并行運(yùn)行?在系統(tǒng)執(zhí)行時(shí),其結(jié)構(gòu)可能會(huì)發(fā)生怎樣的變化?在系

34、統(tǒng)執(zhí)行時(shí),其結(jié)構(gòu)可能會(huì)發(fā)生怎樣的變化?組件連接器結(jié)構(gòu)每個(gè)軟件元素在什么處理器上執(zhí)行?在開發(fā)、測試和系統(tǒng)構(gòu)建期間,每個(gè)元素都存儲(chǔ)在什么文件中?分配給開發(fā)小組的軟件元素是什么?分配結(jié)構(gòu)(1)系統(tǒng)如何被組織為一個(gè)代碼單元集合(模塊)的?(2)系統(tǒng)如何被組織為一個(gè)具有運(yùn)行時(shí)行為(組件)和交互(連接器)的元素集合的?(3)系統(tǒng)如何與其環(huán)境中非軟件結(jié)構(gòu)相關(guān)(也就是CPU、文件系統(tǒng)、網(wǎng)絡(luò)和開發(fā)小組等)?模塊模塊分解分解類類使用使用分層分層組件組件-連接器連接器客戶機(jī)客戶機(jī)/服務(wù)器服務(wù)器共享共享數(shù)據(jù)數(shù)據(jù)并發(fā)并發(fā)進(jìn)程進(jìn)程分配分配工作工作分配分配實(shí)現(xiàn)實(shí)現(xiàn)部署部署常見的軟件構(gòu)架結(jié)構(gòu)*分解分解 單元是通過“是一個(gè)子模

35、塊”關(guān)系將彼此關(guān)聯(lián)起來的模塊,展示了如何將較大的模塊遞歸地分解成較小的模塊,直到它們足夠小,很容易理解為止。*說明: (1)該結(jié)構(gòu)中的模塊代表了設(shè)計(jì)中一個(gè)常見的起點(diǎn) (2)模塊通常存在關(guān)聯(lián)產(chǎn)品,如接口規(guī)范、代碼和測試計(jì)劃等 (3)分解結(jié)構(gòu)提供了很大一部分的系統(tǒng)可更改性 (4)通常將分解用作項(xiàng)目開發(fā)的組織基礎(chǔ),其中包括分解結(jié)構(gòu)、集成和測試計(jì)劃 (5)該結(jié)構(gòu)中的單元通常具有特定的組織名稱,例如某些美國國防部標(biāo)準(zhǔn)定義了計(jì)算機(jī)軟件配置項(xiàng)目(Computer Software Configuration Item)和計(jì)算機(jī)軟件組織(Computer Software Component,CSC)*使用使

36、用 一些經(jīng)常被忽略的單元也就是所說的模塊,或者是過程,甚至是模塊接口上的資源,通過“使用”相互關(guān)聯(lián)。*說明: (1)如果一個(gè)單元的正確性要求另外一個(gè)單元提供正確版本的話(與占位程序相對(duì)),那么就稱第一個(gè)單元使用第二個(gè)單元。 (2)使用結(jié)構(gòu)用于設(shè)計(jì)可以輕松的擴(kuò)展以來添加新的系統(tǒng)功能,或者從中可以輕松提取有用功能子集的系統(tǒng)。 (3)簡單的提取系統(tǒng)子集的能力使得系統(tǒng)允許增量式開發(fā),增量式開發(fā)是一種強(qiáng)大的開發(fā)規(guī)范。*分層分層 當(dāng)以一種特定的方式小心地控制該結(jié)構(gòu)中的使用關(guān)系時(shí),就出現(xiàn)了由層組成的系統(tǒng),在該系統(tǒng)中,一個(gè)層就是相關(guān)功能的一個(gè)一致的集合。在一個(gè)嚴(yán)格分層的結(jié)構(gòu)中,第n層可能僅使用第n-1層提供的

37、服務(wù)。然而,在實(shí)際情況中可能會(huì)出現(xiàn)許多變體。通常把層設(shè)計(jì)為下層的實(shí)現(xiàn)的細(xì)節(jié)對(duì)上層隱藏,從而形成了可移植性。*類或泛化類或泛化 該結(jié)構(gòu)中的模塊單元被稱為類。關(guān)系是“繼承”或“類的實(shí)例”??梢愿鶕?jù)該視圖推斷出類的行為或能力的集合,以及通過劃分子類所捕捉的參數(shù)化的差別。類結(jié)構(gòu)能夠使我們對(duì)重用以及功能的增量式增加進(jìn)行推斷。*進(jìn)程或通信進(jìn)程進(jìn)程或通信進(jìn)程 該結(jié)構(gòu)與基于模塊的結(jié)構(gòu)是正交的,處理的是運(yùn)行系統(tǒng)的動(dòng)態(tài)方面。此處的單元為通過通信、同步和/或排除操作將彼此相連的進(jìn)程或線程。在該結(jié)構(gòu)中的“附加”關(guān)系,展示了組件和連接器是如何連接在一起的。進(jìn)程結(jié)構(gòu)重要性在于它有助于設(shè)計(jì)系統(tǒng)的執(zhí)行性能和可用性。*該結(jié)構(gòu)用

38、于調(diào)度分析;性能分析等順序圖*并發(fā)并發(fā) 該結(jié)構(gòu)能夠使設(shè)計(jì)師確定并行的機(jī)會(huì)以及可能出現(xiàn)的資源爭用的位置。單元是組件,連接器是“邏輯線程”,邏輯線程是一系列計(jì)算,可以將這些計(jì)算在稍后的設(shè)計(jì)過程中分配給單獨(dú)的物理線程。說明:并發(fā)結(jié)構(gòu)在設(shè)計(jì)的早期使用,以確定管理與并發(fā)執(zhí)行相關(guān)的問題的需求。活動(dòng)圖*共享數(shù)據(jù)或者數(shù)據(jù)庫共享數(shù)據(jù)或者數(shù)據(jù)庫(1)該結(jié)構(gòu)由創(chuàng)建、存儲(chǔ)和訪問持久數(shù)據(jù)的組件和連接器組成(2)該結(jié)構(gòu)展示了軟件元素如何產(chǎn)生數(shù)據(jù)和使用數(shù)據(jù),可以使用該結(jié)構(gòu)確保良好的性能和數(shù)據(jù)完整性*客戶機(jī)客戶機(jī)服務(wù)器服務(wù)器 組件是客戶機(jī)和服務(wù)器,連接器是協(xié)議以及它們共享來執(zhí)行系統(tǒng)工作的消息。該結(jié)構(gòu)適用于關(guān)注點(diǎn)的分離(支持可修改性)、物理分布和負(fù)載平衡組件連接器是協(xié)議以及它們共享來執(zhí)行系統(tǒng)工作的消息。*部署部署(1)該結(jié)構(gòu)展示了如何將軟件分配給硬件處理和通信元素(2)該結(jié)構(gòu)的元素是軟件(從組件-連接器的觀點(diǎn)看通常是進(jìn)程)、硬件實(shí)體(處理器)和通信路徑;關(guān)系是“分配給”和“移植到”,前者展示了軟件元素所駐留的物理單元,后者的條件是分配是動(dòng)態(tài)的(3)該結(jié)構(gòu)用于工程人員對(duì)性能、數(shù)據(jù)完整性、可用性和安全性進(jìn)行推斷*實(shí)現(xiàn)實(shí)現(xiàn) 該結(jié)構(gòu)展示了軟件元素是如何映射到系統(tǒng)開發(fā)、集成或配置控制環(huán)境中的文件結(jié)構(gòu)上。這對(duì)于開發(fā)活動(dòng)和

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論