走在架構(gòu)師的大道上 Jack.Wang's home

          Java, C++, linux c, C#.net 技術(shù),軟件架構(gòu),領(lǐng)域建模,IT 項(xiàng)目管理 Dict.CN 在線(xiàn)詞典, 英語(yǔ)學(xué)習(xí), 在線(xiàn)翻譯

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            195 Posts :: 3 Stories :: 728 Comments :: 0 Trackbacks

          目前軟件體系結(jié)構(gòu)的現(xiàn)狀如何呢?軟件體系結(jié)構(gòu)的發(fā)展趨勢(shì)又是什么呢?這就是本文要介紹的內(nèi)容。目前,軟件體系結(jié)構(gòu)尚處在迅速發(fā)展之中,越來(lái)越多的研究人員正在把注意力投向軟件體系結(jié)構(gòu)的研究。用于對(duì)軟件體系進(jìn)行規(guī)格描述的模型、標(biāo)記法和工具仍很不正規(guī)。盡管這些不正規(guī)的模型是有用的,為使之更為精確和健壯,在很多方面的研究工作還需要繼續(xù)進(jìn)行。

          原文地址:http://www.qqread.com/soft-engineering/z405613.html

          關(guān)于軟件體系結(jié)構(gòu)的研究工作主要在國(guó)外展開(kāi)的,國(guó)內(nèi)到目前為止對(duì)于軟件體系結(jié)構(gòu)的研究尚處在起步階段。軟件體系結(jié)構(gòu)在國(guó)內(nèi)未引起人們廣泛注意的原因主要有兩點(diǎn):

          (1)軟件體系結(jié)構(gòu)從表面上看起來(lái)是一個(gè)老話(huà)題,似乎沒(méi)有新東西。

          (2)與國(guó)外相比,國(guó)內(nèi)對(duì)大型和超大型復(fù)雜軟件系統(tǒng)開(kāi)發(fā)的經(jīng)歷相對(duì)較少,對(duì)軟件危機(jī)的災(zāi)難性體會(huì)沒(méi)有國(guó)外深刻,因而對(duì)軟件體系結(jié)構(gòu)研究的重要性和必要性的認(rèn)識(shí)還不很充分。

          一、應(yīng)用現(xiàn)狀

          1、形成研究熱點(diǎn),仍處于非形式化水平

          自20世紀(jì)90年代后期以來(lái),軟件體系結(jié)構(gòu)的研究成為一個(gè)熱點(diǎn)。廣大軟件工作者已經(jīng)認(rèn)識(shí)到軟件體系結(jié)構(gòu)研究的重大意義和它對(duì)軟件系統(tǒng)設(shè)計(jì)開(kāi)發(fā)的重要性,開(kāi)展了很多研究和實(shí)踐工作。

          從軟件體系結(jié)構(gòu)研究的現(xiàn)狀來(lái)看,當(dāng)前的研究和對(duì)軟件體系結(jié)構(gòu)的描述,在很大程度上來(lái)說(shuō)還停留在非形式化的基礎(chǔ)上。軟件構(gòu)架師仍然缺乏必要的工具,這種工具應(yīng)該是顯式描述的、有獨(dú)立性的形式化工具。

          在目前通用的軟件開(kāi)發(fā)方法中,其描述通常是用非形式化的圖和文本,不能描述系統(tǒng)期望的存在于構(gòu)件之間的接口,不能描述不同的組成系統(tǒng)的組合關(guān)系的意義。難以被開(kāi)發(fā)人員理解,更不能用來(lái)分析其一致性和完整性等特性。

          當(dāng)一個(gè)軟件系統(tǒng)中的構(gòu)件之間幾乎以一種非形式化的方法描述時(shí),系統(tǒng)的重用性也會(huì)受到影響,在設(shè)計(jì)一個(gè)系統(tǒng)結(jié)構(gòu)過(guò)程中的努力很難移植到另一個(gè)系統(tǒng)中去。對(duì)系統(tǒng)構(gòu)件和連接關(guān)系的結(jié)構(gòu)化假設(shè)沒(méi)有得到顯式的、形式化的描述時(shí),把這樣的系統(tǒng)構(gòu)件移植到另一個(gè)系統(tǒng)中去將是有風(fēng)險(xiǎn)的,甚至是不可能的。

          2、軟件體系結(jié)構(gòu)的形式化方法研究

          軟件體系結(jié)構(gòu)研究如果僅僅停留在非形式化的框圖階段,已經(jīng)難以適應(yīng)進(jìn)一步發(fā)展的需要。為支持基于體系結(jié)構(gòu)的開(kāi)發(fā),需要有形式化建模符號(hào)、體系結(jié)構(gòu)說(shuō)明的分析與開(kāi)發(fā)工具。從軟件體系結(jié)構(gòu)研究的現(xiàn)狀來(lái)看,在這一領(lǐng)域近來(lái)已經(jīng)有不少進(jìn)展,其中比較有代表性的是美國(guó)卡耐基梅隆大學(xué)(Carnegie Mellon University)的Robert J.A11en于l997年提出的Wright系統(tǒng)。Wright是-種結(jié)構(gòu)描述語(yǔ)言,該語(yǔ)言基于一種形式化的、抽象的系統(tǒng)模型,為描述和分析軟件體系結(jié)構(gòu)和結(jié)構(gòu)化方法提供了一種實(shí)用的工具。Wright主要側(cè)重于描述系統(tǒng)的軟件構(gòu)件和連接的結(jié)構(gòu)、配置和方法。它使用顯式的、獨(dú)立的連接模型來(lái)作為交互的方式,這使得該系統(tǒng)可以用邏輯謂詞符號(hào)系統(tǒng),而不依賴(lài)特定的系統(tǒng)實(shí)例來(lái)描述系統(tǒng)的抽象行為。該系統(tǒng)還可以通過(guò)一組靜態(tài)檢查來(lái)判斷系統(tǒng)結(jié)構(gòu)規(guī)格說(shuō)明的一致性和完整性。從這些特性的分析來(lái)說(shuō),Wright系統(tǒng)的確適用于對(duì)大型系統(tǒng)的描述和分析。

          3、軟件體系結(jié)構(gòu)的建模研究

          研究軟件體系結(jié)構(gòu)的首要問(wèn)題是如何表示軟件體系結(jié)構(gòu),即如何對(duì)軟件體系結(jié)構(gòu)建模。根據(jù)建模的側(cè)重點(diǎn)的不同,可以將軟件體系結(jié)構(gòu)的模型分為5種:結(jié)構(gòu)模型、框架模型、動(dòng)態(tài)模型、過(guò)程模型和功能模型。在這5個(gè)模型中,最常用的是結(jié)構(gòu)模型和動(dòng)態(tài)模型。

          (1)結(jié)構(gòu)模型

          這是一個(gè)最直觀、最普遍的建模方法。這種方法以體系結(jié)構(gòu)的構(gòu)件、連接件和其他概念來(lái)刻畫(huà)結(jié)構(gòu),并力圖通過(guò)結(jié)構(gòu)來(lái)反映系統(tǒng)的重要語(yǔ)義內(nèi)容,包括系統(tǒng)的配置、約束、隱含的假設(shè)條件、風(fēng)格、性質(zhì)。研究結(jié)構(gòu)模型的核心是體系結(jié)構(gòu)描述語(yǔ)言。

          (2)框架模型

          框架模型與結(jié)構(gòu)模型類(lèi)似,但它不太側(cè)重描述結(jié)構(gòu)的細(xì)節(jié)而更側(cè)重于整體的結(jié)構(gòu)。框架模型主要以一些特殊的問(wèn)題為目標(biāo)建立只針對(duì)和適應(yīng)該問(wèn)題的結(jié)構(gòu)。

          (3)動(dòng)態(tài)模型

          動(dòng)態(tài)模型是對(duì)結(jié)構(gòu)或框架模型的補(bǔ)充,研究系統(tǒng)的"大顆粒"的行為性質(zhì)。例如,描述系統(tǒng)的重新配置或演化。動(dòng)態(tài)可能指系統(tǒng)總體結(jié)構(gòu)的配置、建立或拆除通信通道或計(jì)算的過(guò)程。這類(lèi)系統(tǒng)常是激勵(lì)型的。

          (4)過(guò)程模型

          過(guò)程模型研究構(gòu)造系統(tǒng)的步驟和過(guò)程。因而結(jié)構(gòu)是遵循某些過(guò)程腳本的結(jié)果。

          (5)功能模型

          該模型認(rèn)為體系結(jié)構(gòu)是由一組功能構(gòu)件按層次組成,下層向上層提供服務(wù)。它可以看作是一種特殊的框架模型。
          這5種模型各有所長(zhǎng),也許將5種模型有機(jī)地統(tǒng)一在一起,形成一個(gè)完整的模型來(lái)刻畫(huà)軟件體系結(jié)構(gòu)更合適。例如,Kruchten在1995年提出了一個(gè)“4+1”的視角模型。“4+1”模型從5個(gè)不同的視角包括邏輯視角、過(guò)程視角、物理視角、開(kāi)發(fā)視角和場(chǎng)景視角來(lái)描述軟件體系結(jié)構(gòu)。每一個(gè)視角只關(guān)心系統(tǒng)的一個(gè)側(cè)面,5個(gè)視角結(jié)合在一起才能夠反映系統(tǒng)的軟件體系結(jié)構(gòu)的全部?jī)?nèi)容。“4+1”模型如圖1所示。 

          詳解軟件體系結(jié)構(gòu)的現(xiàn)狀及發(fā)展方向(圖一)
          圖1:“4+1”模型

          4、發(fā)展基于體系結(jié)構(gòu)的軟件開(kāi)發(fā)模型

          軟件開(kāi)發(fā)模型是跨越整個(gè)軟件生存周期的系統(tǒng)開(kāi)發(fā)、運(yùn)行、維護(hù)所實(shí)施的全部工作和任務(wù)的結(jié)構(gòu)框架,給出了軟件開(kāi)發(fā)活動(dòng)各階段之間的關(guān)系。目前,常見(jiàn)的軟件開(kāi)發(fā)模型大致可分為三種類(lèi)型:
          (1)以軟件需求完全確定為前提的瀑布模型。

          (2)在軟件開(kāi)發(fā)初始階段只能提供基本需求時(shí)采用的漸進(jìn)式開(kāi)發(fā)模型,如螺旋模型等。

          (3)以形式化開(kāi)發(fā)方法為基礎(chǔ)的變換模型。

          所有開(kāi)發(fā)方法都是要解決需求與實(shí)現(xiàn)之間的差距。但是,這三種類(lèi)型的軟件開(kāi)發(fā)模型都存在這樣或那樣的缺陷,不能很好地支持基于軟件體系結(jié)構(gòu)的開(kāi)發(fā)過(guò)程。因此,研究人員在發(fā)展基于體系結(jié)構(gòu)的軟件開(kāi)發(fā)模型方面做了一定的工作。例如,為了形象地表示體系結(jié)構(gòu)的生命周期,北京郵電大學(xué)的周瑩新博士建立了一個(gè)軟件體系結(jié)構(gòu)的生命周期模型,該模型如圖2所示。

          詳解軟件體系結(jié)構(gòu)的現(xiàn)狀及發(fā)展方向(圖二)
          圖2:軟件體系結(jié)構(gòu)的生命周期模型

          5、軟件產(chǎn)品線(xiàn)體系結(jié)構(gòu)的研究

          軟件體系結(jié)構(gòu)的開(kāi)發(fā)是大型軟件系統(tǒng)開(kāi)發(fā)的關(guān)鍵環(huán)節(jié)。體系結(jié)構(gòu)在軟件生產(chǎn)線(xiàn)的開(kāi)發(fā)中具有至關(guān)重要的作用,在這種開(kāi)發(fā)生產(chǎn)中,基于同一個(gè)軟件體系結(jié)構(gòu),可以創(chuàng)建具有不同功能的多個(gè)系統(tǒng)。在軟件產(chǎn)品族之間共享體系結(jié)構(gòu)和一組可重用的構(gòu)件,可以增加軟件工程和降低開(kāi)發(fā)和維護(hù)成本。

          一個(gè)產(chǎn)品線(xiàn)代表著一組具有公共的系統(tǒng)需求集的軟件系統(tǒng),它們都是根據(jù)基本的用戶(hù)需求對(duì)標(biāo)準(zhǔn)的產(chǎn)品線(xiàn)構(gòu)架進(jìn)行定制,將可重用構(gòu)件與系統(tǒng)獨(dú)有的部分集成而得到的。采用軟件生產(chǎn)線(xiàn)式模式進(jìn)行軟件生產(chǎn),將產(chǎn)生巨型編程企業(yè)。但目前生產(chǎn)的軟件產(chǎn)品族大部分是處于同一領(lǐng)域的。

          二、研究熱點(diǎn)

          當(dāng)前,體系結(jié)構(gòu)仍是一個(gè)非常新的研究領(lǐng)域,其概念還相當(dāng)模糊。但軟件體系結(jié)構(gòu)作為軟件工程領(lǐng)域中的一個(gè)組成部分,已經(jīng)取得了長(zhǎng)足的發(fā)展,受到大多數(shù)軟件系統(tǒng)設(shè)計(jì)和研究人員的重視。

          軟件體系結(jié)構(gòu)目前較活躍的研究方向包括:(1)軟件體系結(jié)構(gòu)形式基礎(chǔ)的研究;(2)針對(duì)軟件體系結(jié)構(gòu)描述中特有的問(wèn)題研究新的專(zhuān)門(mén)的高級(jí)語(yǔ)言;(3)建立用于度量和評(píng)價(jià)軟件體系結(jié)構(gòu)的模型和方法;(4)建立面向?qū)iT(mén)領(lǐng)域的軟件體系結(jié)構(gòu)范型庫(kù)。(5)把軟件體系結(jié)構(gòu)從目前的直覺(jué)和經(jīng)驗(yàn)狀態(tài)過(guò)渡到理論。

          1、提供新的軟件體系結(jié)構(gòu)描述語(yǔ)言

          在提高軟件工程師對(duì)軟件系統(tǒng)的描述和理解能力中,雖然軟件體系結(jié)構(gòu)描述起著重要作用,但這些抽象的描述通常是非形式化的和隨意的。體系結(jié)構(gòu)設(shè)計(jì)經(jīng)常難以理解,難以適于進(jìn)行形式化分析和模擬,缺乏相應(yīng)的支持工具幫助構(gòu)架師完成設(shè)計(jì)工作。為了解決這個(gè)問(wèn)題,用于描述和推理的形式化語(yǔ)言得以發(fā)展,這些語(yǔ)言就叫做體系結(jié)構(gòu)描述語(yǔ)言(Architecture Description Language), ADLs尋求增加軟件體系結(jié)構(gòu)設(shè)計(jì)的可理解性和重用性。

          ADL是這樣一種語(yǔ)言,系統(tǒng)構(gòu)架師可以利用它所提供的特性進(jìn)行軟件系統(tǒng)概念體系結(jié)構(gòu)建模。ADL提供了具體的語(yǔ)法與刻畫(huà)體系結(jié)構(gòu)的概念框架。ADLs使得系統(tǒng)開(kāi)發(fā)者能夠很好地描述他們?cè)O(shè)計(jì)的體系結(jié)構(gòu),以便與人交流,能夠用提供的工具對(duì)許多實(shí)例進(jìn)行分析。

          這種描述語(yǔ)言的目的就是提供一種規(guī)范化的體系結(jié)構(gòu)描述,從而使得體系結(jié)構(gòu)的自動(dòng)化分析變得可能。研究人員已經(jīng)設(shè)計(jì)出了近二十種ADLs,比較有影響力的有C2、UniCon、MetaH、Aesop、SADL、Rapide、Wright等。這些語(yǔ)言能夠?qū)w系結(jié)構(gòu)連接器進(jìn)行第一級(jí)抽象,同時(shí)還能描述模型的結(jié)構(gòu)和內(nèi)部構(gòu)件之間的交互作用,并且還引入了一些新的系統(tǒng)分析模式。

          2、對(duì)軟件體系結(jié)構(gòu)的專(zhuān)門(mén)知識(shí)的整理

          這方面的工作主要是對(duì)軟件工程師在軟件開(kāi)發(fā)實(shí)踐中得來(lái)的各種體系結(jié)構(gòu)的原則、模式的整理和分類(lèi)。例如,對(duì)軟件體系結(jié)構(gòu)風(fēng)格的分類(lèi)和比較,對(duì)體系結(jié)構(gòu)描述語(yǔ)言的綜合分析等。就目前看來(lái),國(guó)內(nèi)對(duì)軟件體系結(jié)構(gòu)的研究主要集中在對(duì)軟件體系結(jié)構(gòu)的專(zhuān)門(mén)知識(shí)的整理上。

          3、提供特定領(lǐng)域的體系結(jié)構(gòu)框架

          最近,開(kāi)發(fā)特定的領(lǐng)域去為產(chǎn)品提供可重用框架日益受到關(guān)注。這些開(kāi)發(fā)基于這樣的想法:可以提取相關(guān)系統(tǒng)中的共同方面,以便可以通過(guò)低成本地把這些共同的設(shè)計(jì)實(shí)例化來(lái)構(gòu)筑新系統(tǒng)。常見(jiàn)的例子有:

          (1)編譯器的標(biāo)準(zhǔn)分解。這個(gè)方法可以使一個(gè)本科生在一個(gè)學(xué)期時(shí)間內(nèi)構(gòu)造一個(gè)新的語(yǔ)言編譯系統(tǒng)。

          (2)標(biāo)準(zhǔn)化的通訊協(xié)議。這個(gè)可以使廠家通過(guò)在不同層次的抽象上提供服務(wù)來(lái)互相操縱。

          (3)第四代語(yǔ)言。利用4GL開(kāi)發(fā)出商務(wù)信息處理的通用范式。

          (4)用戶(hù)界面工具和框架。這個(gè)方法為開(kāi)發(fā)者提供了一個(gè)可重用框架以及象菜單、對(duì)話(huà)框這樣的可重用構(gòu)件的集合。

          軟件體系結(jié)構(gòu)充當(dāng)一個(gè)理解系統(tǒng)構(gòu)件和它們之間關(guān)系的框架,特別是那些始終跨越時(shí)間和實(shí)現(xiàn)的屬性。這個(gè)理解對(duì)于現(xiàn)在系統(tǒng)的分析和未來(lái)系統(tǒng)的綜合很有必要。在分析和支持下,體系結(jié)構(gòu)抓住領(lǐng)域知識(shí)和實(shí)際的一致,促進(jìn)設(shè)計(jì)的評(píng)估和構(gòu)件的實(shí)施,減少仿真和構(gòu)造原型。在綜合的支持下,體系結(jié)構(gòu)提供了建立系列產(chǎn)品的基礎(chǔ),以可預(yù)測(cè)的方式利用領(lǐng)域知識(shí)構(gòu)造和維護(hù)模塊、子系統(tǒng)和系統(tǒng)。

          4、提供軟件體系結(jié)構(gòu)的形式化基礎(chǔ)

          對(duì)體系結(jié)構(gòu)設(shè)計(jì)的推理的形式化表示使得體系結(jié)構(gòu)級(jí)的設(shè)計(jì)更好地被理解、被實(shí)現(xiàn)。它的目的是對(duì)體系結(jié)構(gòu)設(shè)計(jì)人員在實(shí)踐過(guò)程中總結(jié)出來(lái)的一些設(shè)計(jì)的經(jīng)驗(yàn)和方法加以總結(jié)、概括,從而形成一個(gè)形式化的描述,形成一定的理論基礎(chǔ)(以代替當(dāng)前的不精確的研究)。已提出一些形式化機(jī)制,如過(guò)程代數(shù)、偏序集合、化學(xué)抽象機(jī)等。希望對(duì)系統(tǒng)的非功能特性如性能、可維護(hù)性等給出形式特征,同時(shí)給出軟件體系結(jié)構(gòu)的理論。

           

          5、建立評(píng)價(jià)軟件體系結(jié)構(gòu)的方法

          通過(guò)分析來(lái)預(yù)見(jiàn)軟件的質(zhì)量,通過(guò)分析來(lái)創(chuàng)建、選擇、評(píng)估與比較不同的體系結(jié)構(gòu)。例如,Kazman等人在2000年提出的ATAM(Architectural Tradeoff Analysis Method)方法。ATAM方法不但能夠揭示體系結(jié)構(gòu)如何滿(mǎn)足特定的質(zhì)量需求(例如性能和可修改性),而且還提供了分析這些質(zhì)量需求之間交互作用的方法。使用ATAM方法評(píng)價(jià)一個(gè)軟件體系結(jié)構(gòu)的目的是理解體系結(jié)構(gòu)設(shè)計(jì)滿(mǎn)足系統(tǒng)質(zhì)量需求的結(jié)果。采用ATAM方法的步驟如圖3所示,限于篇幅,在此不再詳細(xì)介紹具體步驟,有興趣的讀者可查閱有關(guān)ATAM方法的文獻(xiàn)。

          詳解軟件體系結(jié)構(gòu)的現(xiàn)狀及發(fā)展方向(圖三)
          圖3:采用ATAM方法的步驟


          三、發(fā)展方向

          1、各種ADLs之間的信息互換

          現(xiàn)有的ADLs大多是與領(lǐng)域相關(guān)的,所以不利于對(duì)不同領(lǐng)域體系結(jié)構(gòu)的說(shuō)明。但這些針對(duì)不同領(lǐng)域的ADLs在某些方面又大同小異,造成資源的冗余。其實(shí),大多數(shù)ADLs具有一系列的共同概念。如何用一種公共形式把各種語(yǔ)言綜合起來(lái),使得能夠交換各種體系結(jié)構(gòu)描述信息,將是今后軟件體系結(jié)構(gòu)研究和實(shí)踐的重點(diǎn)之一。

          2、設(shè)計(jì)工具和環(huán)境

          軟件體系結(jié)構(gòu)設(shè)計(jì)既然作為軟件工程的一部分,它的計(jì)算機(jī)輔助實(shí)現(xiàn)手段是相當(dāng)重要的。我們應(yīng)當(dāng)開(kāi)發(fā)出一些軟件工具來(lái)實(shí)現(xiàn)體系結(jié)構(gòu)的描述和分析,開(kāi)發(fā)階段轉(zhuǎn)換工具,以實(shí)現(xiàn)階段成果的自動(dòng)轉(zhuǎn)換,例如,把需求規(guī)格說(shuō)明自動(dòng)轉(zhuǎn)換為構(gòu)件等。目前關(guān)于這方面的研究成果很少,特別是可以應(yīng)用到實(shí)際項(xiàng)目開(kāi)發(fā)中的工具和環(huán)境就更少。

          3、體系結(jié)構(gòu)再工程

          當(dāng)今軟件系統(tǒng)的規(guī)模變得越來(lái)越大,結(jié)構(gòu)也越來(lái)越復(fù)雜,同時(shí)從頭開(kāi)始構(gòu)建的大系統(tǒng)數(shù)量在急劇地減少,因而很多遺留系統(tǒng)正在被逐步地利用。從遺留系統(tǒng)軟件代碼和系統(tǒng)中抽取結(jié)構(gòu)信息,經(jīng)過(guò)描述、統(tǒng)一、抽象、一般化與實(shí)例化等處理,可總結(jié)出系統(tǒng)的體系結(jié)構(gòu)。

          在這種情況下,軟件再工程變得越來(lái)越重要,因?yàn)樗峁┝艘粭l把遺留系統(tǒng)轉(zhuǎn)換為可進(jìn)化系統(tǒng)的現(xiàn)實(shí)可行的途徑,是一種可以改進(jìn)人們對(duì)軟件的理解和改進(jìn)軟件本身的活動(dòng)。這類(lèi)研究的目的是為一些特定的應(yīng)用領(lǐng)域的軟件系統(tǒng)提供一些體系結(jié)構(gòu)框架,如控制系統(tǒng)、移動(dòng)機(jī)器人和用戶(hù)接口界面等。通過(guò)這些框架可以很方便地構(gòu)造一個(gè)新的軟件系統(tǒng)。





          本博客為學(xué)習(xí)交流用,凡未注明引用的均為本人作品,轉(zhuǎn)載請(qǐng)注明出處,如有版權(quán)問(wèn)題請(qǐng)及時(shí)通知。由于博客時(shí)間倉(cāng)促,錯(cuò)誤之處敬請(qǐng)諒解,有任何意見(jiàn)可給我留言,愿共同學(xué)習(xí)進(jìn)步。
          posted on 2008-09-14 21:22 Jack.Wang 閱讀(1084) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 架構(gòu)師篇
          主站蜘蛛池模板: 华容县| 江永县| 寻甸| 古田县| 北票市| 白银市| 昭苏县| 无棣县| 五河县| 高碑店市| 普定县| 察雅县| 桂林市| 凤冈县| 革吉县| 措勤县| 卫辉市| 溧水县| 宜川县| 云浮市| 灌南县| 教育| 陆丰市| 法库县| 吉首市| 朝阳区| 汝南县| 静海县| 胶州市| 凤山市| 禹州市| 吴堡县| 门源| 娄底市| 阿坝县| 民乐县| 宣化县| 黄骅市| 武乡县| 望都县| 东城区|