• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    自動代碼生成技術(shù)的發(fā)展現(xiàn)狀與趨勢

    2018-09-10 12:30:20舒新峰王小銀
    西安郵電大學(xué)學(xué)報 2018年3期
    關(guān)鍵詞:代碼生成構(gòu)架代碼

    王 博, 舒新峰, 王小銀, 陳 銳

    (1. 西安郵電大學(xué) 計算機學(xué)院, 陜西 西安 710121; 2. 西安郵電大學(xué) 陜西省網(wǎng)絡(luò)數(shù)據(jù)智能處理重點實驗室, 陜西 西安 710121; 3. 西北大學(xué) 信息科學(xué)與技術(shù)學(xué)院, 陜西 西安 710127)

    伴隨著信息產(chǎn)業(yè)的不斷深入發(fā)展,應(yīng)用軟件的需求和開發(fā)環(huán)境變得越來越復(fù)雜。傳統(tǒng)軟件開發(fā)方法暴露出新技術(shù)環(huán)境下的缺陷,比如開發(fā)周期漫長,工作重復(fù)較大,同時也給系統(tǒng)的演進和維護造成了很大的困難[1]。

    與此同時,新軟件開發(fā)思想和工具,也導(dǎo)致了軟件工程方法論發(fā)生了深刻的變化,尤其是以O(shè)MG(object management group,對象管理組織)提出的模型驅(qū)動構(gòu)架MDA(model driven architecture, 模型驅(qū)動構(gòu)架)成為研究的主要方向。Frankel在其《應(yīng)用MDA》一書中指出,“把寶貴的時間浪費在‘紙上談兵’上是一種罪惡”[2]。當然也并非是說設(shè)計不重要,只是把一些無用的形式上的設(shè)計,甚至是開發(fā)完畢之后的設(shè)計而致使設(shè)計和實現(xiàn)脫節(jié),純屬一種資源和時間的浪費。模型驅(qū)動構(gòu)架使模型成為軟件開發(fā)中的首要驅(qū)動力[3],模型不僅僅是程序員的文檔,對軟件系統(tǒng)的建模行為將直接驅(qū)動系統(tǒng)的開發(fā)[4]。

    自動代碼生成,即根據(jù)用戶任務(wù)需求建模而自動生成源代碼的程序或軟件。自動代碼生成深刻影響著軟件開發(fā)的內(nèi)容和形式。

    (1) 減少重復(fù)的編碼工作。自動代碼生成減少很多不必要的重復(fù)代碼的編寫,基于模板或者模型,通過代碼生成引擎,自動生成海量的代碼,可以提高軟件開發(fā)效率,優(yōu)化軟件開發(fā)過程。

    (2) 代碼生成風格上一致良好。不同的程序員在編寫相同功能的模塊時,最終編寫的源代碼會有很大的不同,但是通過自動代碼生成的源代碼,具有較好的一致性和規(guī)范性,同時也具有良好的可讀性。

    (3) 系統(tǒng)設(shè)計成為主導(dǎo)。整個開發(fā)過程,選擇正確的模型至關(guān)重要。因此系統(tǒng)設(shè)計者的主要目光會放到模型的選擇和系統(tǒng)業(yè)務(wù)邏輯的設(shè)計上。因此,系統(tǒng)的設(shè)計者會把較多的精力和實踐花費在頂層設(shè)計上,提高系統(tǒng)的可用性和健壯性。

    (4) 易于修改和升級。 自動代碼生成的另外一個優(yōu)勢是可擴展性。在業(yè)務(wù)層次上,從長遠來看,自動代碼生成技術(shù)使得軟件更容易修改和升級。

    (5) 設(shè)計的連貫性。 自動代碼生成鼓勵程序員在編碼體系內(nèi)工作,其次,自動代碼生成器良好的文檔和可維護性為項目的維護和演化也提供了一致的結(jié)構(gòu)和方法。

    1 國內(nèi)外發(fā)展狀況

    廣義自動代碼生成技術(shù)的用途是把高級語言編譯成匯編代碼、機器指令,是語言轉(zhuǎn)換編譯不可缺少的工具[5]。狹義自動代碼生成技術(shù)是在軟件開發(fā)過程中由經(jīng)驗而形成的一種軟件工程技術(shù),通過自動生成工具或者程序半自動或者全自動的生成應(yīng)用系統(tǒng)的所用到的原始框架和代碼,一般生成的是文本形式的源代碼,進而編譯部署運行。本文若不強調(diào),特指在軟件工程的項目開發(fā)中的狹義代碼生成技術(shù)。

    1.1 國外發(fā)展狀況

    代碼生成技術(shù)可以分為如下的形式:代碼重塑,內(nèi)聯(lián)代碼展開,混合代碼生成,局部類生成,層次化生成,全領(lǐng)域語言描述等[5]。

    代碼生成技術(shù)經(jīng)過長期的發(fā)展和演進已經(jīng)獲得了很大的進步,技術(shù)實現(xiàn)上也有了長足的進展,一大批的工具隨之而出現(xiàn),尤其是基于模型構(gòu)架模型驅(qū)動構(gòu)架的代碼生成技術(shù)出現(xiàn)了一大批的工具和成果。目前很多國外企業(yè)和相關(guān)機構(gòu)都在專注于模型驅(qū)動構(gòu)架的有關(guān)研究以及相應(yīng)的工具開發(fā)。下面是國外的在模型驅(qū)動架構(gòu)和自動代碼生成方面的研究狀況。

    自動代碼生成技術(shù)從20世紀末的萌芽階段發(fā)展之今,已經(jīng)趨于平穩(wěn)和成熟,“自動代碼生成”從1991年開始出現(xiàn)相關(guān)研究,2015年達到最熱。模型驅(qū)動構(gòu)架的研究始于20世紀70年代,和自動代碼生成有著同步的研究趨勢。圖1為自動代碼生成的研究熱點走勢,圖2為模型驅(qū)動構(gòu)架研究熱點走勢。從統(tǒng)計圖中可以看出,代碼生成在2010年后成為熱點,近幾年受機器學(xué)習和大數(shù)據(jù)技術(shù)發(fā)展而有所回落。(統(tǒng)計圖中的縱軸代表研究成果,文中的數(shù)據(jù)統(tǒng)計于百度學(xué)術(shù),數(shù)據(jù)截止于2018年3月20)。

    圖1 自動代碼生成技術(shù)熱點走勢

    圖2 模型驅(qū)動構(gòu)架研究熱點走勢

    早在21世紀初,對象管理組織就宣布:模型驅(qū)動構(gòu)架是其發(fā)展方向,動作快的廠商發(fā)布了具有模型驅(qū)動構(gòu)架特性的產(chǎn)品,如OptimalJ,BorlandC#Builder Enterprise[2]。另外,一些中小廠商反而特別活躍,像Interactive Objects公司著名的ArcStyler工具,還有開放源碼的AndroMDA等遵循對象管理組織標準規(guī)范的模型驅(qū)動構(gòu)架工具已在一些項目中得到了廣泛的運用,并取得了顯著的成效。

    除此之外,國外一些科研機構(gòu)和高等學(xué)校在自動代碼生成和基于模型驅(qū)動構(gòu)架的自動代碼生成方面也進行了廣泛持久的深入研究。下面給出一些國外的自動代碼生成的研究,文獻[6-9]主要從模型驅(qū)動以及模型轉(zhuǎn)換方面介紹自動代碼生成引擎,文獻[10]介紹了基于模板和可重用構(gòu)件的自動代碼生成方法和策略。文獻[11-12]介紹了基于規(guī)則的代碼生成策略。文獻[13-15]介紹了基于注釋的代碼生成方法。其中文獻[6]在基于基本準則的UML(unified modeling language,統(tǒng)一建模語言)類圖的自動代碼生成方面提出了設(shè)計方法和思路,并詳細介紹了模型轉(zhuǎn)換的規(guī)則和策略。文獻[12]介紹如何通過IOPT(input-output place-transition,輸入輸出位置轉(zhuǎn)換)Petri網(wǎng)實現(xiàn)ANSI C語言代碼自動轉(zhuǎn)化的工具。文獻[8]給出了基于MDA的通過微軟的ATL(active template library,動態(tài)模板庫)技術(shù)轉(zhuǎn)換生成MVC2(model view controller -2,模型視圖控制器-2)的web應(yīng)用生成引擎的實現(xiàn)方法。文獻[9]詳細介紹了模型驅(qū)動構(gòu)架中各類不同模型比如PIM(platform independent model, 平臺無關(guān)模型)到PSM(platform specific model,平臺相關(guān)模型)以及PSM到代碼的基于知識工程策略的轉(zhuǎn)換規(guī)則和方法。文獻[1]提出采用基于模型驅(qū)動構(gòu)架的方法的XML(eXtensible markup language,可擴展標記語言)語言最大化自動生成代碼的方法和策略,而且詳細的給出了代碼密度和代碼獲取量的計算方法。文獻[16]介紹自主開發(fā)的一款基于動態(tài)框架的代碼生成器,其使用SCT(specification configuration template, 規(guī)范配置模板)的方法來生成整個應(yīng)用,而不僅僅只生成框架,并取得了不錯的效果。文獻[10]在支持構(gòu)件化web工程中的構(gòu)件重用的方面進行了深入的研究。文獻[7]介紹了UML中的活動圖和序列圖的自動代碼生成方法。文獻[14]介紹了基于注釋和注解的方法在J2EE技術(shù)中的代碼生成的解決方案。文獻[13,15]介紹了基于XDoclet的AOP(attribute oriented programming,面向?qū)傩缘某绦蛟O(shè)計)方法。

    1.2 國內(nèi)發(fā)展狀況

    隨著國外自動代碼生成技術(shù)的發(fā)展,特別是其主要研究方向轉(zhuǎn)化為以模型驅(qū)動的自動代碼生成技術(shù)之后,國內(nèi)的相關(guān)研究也逐漸開始起步。雖然缺乏堅實的理論支撐,但部分軟件企業(yè)和高??蒲袡C構(gòu)也在不斷跟進,取得了相應(yīng)的成果。

    20世紀80年代出現(xiàn)相關(guān)研究以來,到20世紀末自動代碼生成技術(shù)發(fā)展緩慢,進展不大。但當時間跨入21世紀以后,尤其是隨著模型驅(qū)動構(gòu)架技術(shù)的引入以來,國內(nèi)的自動代碼生成技術(shù)有了較大幅度的發(fā)展,特別是自2005年以來,一直處于高峰研究狀態(tài)。

    自動代碼生成是一個多領(lǐng)域多學(xué)科交叉的學(xué)科,涉及的面比較廣。隨著研究的不斷深入,出現(xiàn)了越來越多與“代碼生成”相關(guān)的研究點,形成了龐大的研究網(wǎng)絡(luò),該網(wǎng)絡(luò)囊括:軟件開發(fā)、編譯器、模型驅(qū)動、嵌入式系統(tǒng)、設(shè)計模式和編譯程序等領(lǐng)域的知識。

    國內(nèi)的軟件企業(yè)在自動代碼生成和模型驅(qū)動構(gòu)架的研究和開發(fā)中也有不少成果,比如金蝶軟件公司是首家實現(xiàn)支持模型驅(qū)動構(gòu)架軟件開發(fā)的商業(yè)工程工具金蝶EAS4.0,是一個基于模型驅(qū)動構(gòu)架、采用“業(yè)務(wù)模型驅(qū)動的全自動化軟件工廠”開發(fā)的企業(yè)應(yīng)用平臺[17]。楚凡科技是專業(yè)復(fù)雜軟件及系統(tǒng)開發(fā)解決方案的供應(yīng)商。為軟件開發(fā)的整個生命周期提供集成的產(chǎn)品和專業(yè)化服務(wù),楚凡科技工具Kant Studio集合了UML建模和數(shù)據(jù)庫建模;實現(xiàn)數(shù)據(jù)庫模型和UML模型的雙向轉(zhuǎn)換;實現(xiàn)代碼和模型之間的迭代轉(zhuǎn)換[18]。

    一些中小企業(yè)和開源產(chǎn)品在上自動代碼生成方面也有較好表現(xiàn),開發(fā)了小型的代碼生成器支持從模型或者模板到不同程序設(shè)計語言的轉(zhuǎn)化。如動軟.Net代碼生成器是基于關(guān)系數(shù)據(jù)庫元數(shù)據(jù)庫的C#自動代碼生成器,Codematic生成的代碼基于面向?qū)ο笏枷牒腿龑蛹軜?gòu)設(shè)計。BBOSS自動代碼生成工具是一款為專有框架和平臺生成前端、后端代碼、WEB服務(wù)代碼、SQL配置、IOC配置的可視化配置管理工具。Code Generator生成工具是基于Freemarker和Velocity模板生成代碼的引擎,該生成器是根據(jù)關(guān)系實體的元數(shù)據(jù)來生成源代碼。

    國內(nèi)的眾多高校和研究機構(gòu)也在代碼生成、尤其是基于模型驅(qū)動骨架的代碼生成軟件工程也進行了長期的研究,取得了眾多的成果。下面給出國內(nèi)的在自動代碼生成方面研究的典型問題,文獻[19-25]在基于模型轉(zhuǎn)換和代碼生成方面給出了詳細的介紹,文獻[26-27]是基于對象關(guān)系映射方面的自動代碼生成,文獻[28-29]是基于模式的用戶界面自動代碼生成技術(shù),其中文獻[19-20]在逆向工程和程序流程圖到自動代碼生成提出一種基于圖的生成算法,文獻[21-22]在平臺無關(guān)模型到平臺相關(guān)模型,web用戶界面建模和自動生成,用戶界面代碼自動生成方面進行介紹。文獻[23]在模型驅(qū)動構(gòu)架的模型轉(zhuǎn)換方面提出一種基于規(guī)則的轉(zhuǎn)化方法,文獻[24]對MDA模型的轉(zhuǎn)換方法進行了全面的分析。文獻[25]對UML中的類圖和順序圖自動生成C++語言代碼提出了基于一種基于規(guī)則轉(zhuǎn)化的生成方法。

    目前相應(yīng)的模型驅(qū)動理論研究還不夠充分,仍舊需要國內(nèi)學(xué)者共同努力,并開拓與開創(chuàng)新的研究領(lǐng)域和思路,形成系統(tǒng)的理論和方法,以期加速軟件開發(fā)效率和對中小企業(yè)的軟件開發(fā)提供持久的支持。

    2 自動代碼生成技術(shù)以及趨勢

    根據(jù)以往項目開發(fā)中的經(jīng)驗,自動代碼生成器的設(shè)計應(yīng)遵循一定的原則。

    (1) 選擇正確的模型。正確的模型對生成的質(zhì)量是至關(guān)重要的。

    (2) 不對自動生成的代碼做任何手工修改。因為在開發(fā)過程中,需求會發(fā)生或多或少的變化,這樣給后期代碼重新生成造成很大困難。

    (3) 要對生成的目標類型有全面的理解。在代碼生成前,要對實體對象及其關(guān)系有全面的把握和理解。掌握好哪些是固定不變的業(yè)務(wù)邏輯,哪些是易變的業(yè)務(wù),或者是生成的代碼所在的層次,這樣才能做到有的放矢。

    (4) 明確代碼生成器的輸入源與目標代碼之間的映射關(guān)系。明確輸入源與目標代碼之間的映射關(guān)系,是設(shè)計代碼生成的關(guān)鍵所在。另外,輸入源是否完整描述目標代碼,也是生成代碼易用性和效率的關(guān)鍵所在。

    當前自動代碼生成技術(shù)的方法主要有:基于模型的自動代碼生成,基于模板的自動代碼生成、基于對象關(guān)系映射、基于文檔注釋和基于動態(tài)代理的自動代碼生成技術(shù)。由于目前使用廣泛的自動代碼生成主要有兩大方法,一類是企業(yè)界的基于模板的代碼生成方法,一類是理論界基于模型框架的代碼生成方法,前者注重于時效性,往往能夠生成某種類型的系統(tǒng)的框架80%或者以上的源代碼,后者更注重于統(tǒng)一性,更注重于通用語言框架的代碼生成。

    2.1 基于模板的自動代碼生成技術(shù)

    基于模板的代碼生成的基本原理是把軟件的需求分成兩部分,一部分是相對來說固定不變的部分,稱為靜態(tài)部分,另外一部分是根據(jù)外部輸入變化的部分。比如實體中的屬性的名稱和方法的名稱是變化的,這一部分通過特殊標記來替代。這樣代碼生成器引擎根據(jù)輸入和模板文件,按照一定規(guī)則生成源代碼,然后添加到項目文件中[30]。

    前已述及,基于模板的代碼生成是利用系統(tǒng)共性的需求(模板)和個性的需求(特定的外部輸入),通過代碼生成引擎來生成系統(tǒng)源代碼的方法?;谀0宓拇a生成工具最困難的是明確區(qū)分輸入和轉(zhuǎn)化邏輯,也就是將元數(shù)據(jù)和具體業(yè)務(wù)規(guī)則進行分離,通過使用模板引擎技術(shù),可將業(yè)務(wù)規(guī)則抽象到模板文件中,將元數(shù)據(jù)作為動態(tài)插入數(shù)據(jù)。基于模板的代碼生成方法涉及分層和框架技術(shù)。

    2.1.1 分層技術(shù)

    分層技術(shù)在當前的軟件開發(fā)中被廣泛的使用。在軟件開發(fā)過程當中,把具有不同過程的解決方案放置到不同的概念層上面,之后這整個層次形成一個不夠密封的系統(tǒng),其中每一個層次在級別上具有平等性[31]。分層的優(yōu)點在于提高系統(tǒng)的靈活性和可復(fù)用性,能夠在一定程度上提高軟件開發(fā)的效率。

    軟件的分層隨著用戶的需求和軟件體系結(jié)構(gòu)的發(fā)展在逐層的演進,從20世紀80年代初的小型數(shù)據(jù)庫的結(jié)構(gòu)化程序設(shè)計的單層結(jié)構(gòu),基于服務(wù)端和客戶端的雙層結(jié)構(gòu),瘦客戶端下的三層體系結(jié)構(gòu),以及將業(yè)務(wù)邏輯獨立出來的分布式系統(tǒng)的四層和五層結(jié)構(gòu),見證了軟件系統(tǒng)開發(fā)中的分層技術(shù)的發(fā)展趨勢[32]。當前典型的Web系統(tǒng)的開發(fā)中,使用基于表示層、業(yè)務(wù)邏輯層、持久層三層體系結(jié)構(gòu)。見下圖3所示。

    表示層數(shù)據(jù)呈現(xiàn)業(yè)務(wù)邏輯層業(yè)務(wù)處理持久層數(shù)據(jù)處理數(shù)據(jù)實體模型

    圖3典型的web分層體系結(jié)構(gòu)

    定義1(分層結(jié)構(gòu)定義) 約定將n層構(gòu)架的各層編號為1,2,…,n,其中層的編號越大,則越處于系統(tǒng)的高層。那么分層構(gòu)架應(yīng)該滿足如下的規(guī)則:

    (1) 第k層(1

    (2) 如果p層依賴于q層,則p的編號一定大于q。

    這個原則保證了層依賴的單向性,減少和降低了系統(tǒng)邏輯的復(fù)雜性,使得系統(tǒng)在提高功能高可復(fù)用性前提下易于控制。

    定義2(分層對象模型) 基于分層體系的對象模型分成數(shù)據(jù)實體對象,持久層對象和業(yè)務(wù)邏輯層對象,每層的對象可以表示為一個n元組。

    (1) 數(shù)據(jù)實體對象MO= (mo_id, mo_name, attr_set, op_attr),其中:mo_id, mo_name分別對應(yīng)模型實體對象MO的唯一的標識和名稱; attr_set 代表該實體的屬性集;op_attr 代表對該屬性的操作,一般對應(yīng)該實體的可讀和可寫算子。

    (2) 持久層對象PO = (po_id, po_name ,mo, dll_set) ,其中:po_id, po_name分別對應(yīng)持久層對象PO的唯一的標識和名稱;mo為持久層關(guān)聯(lián)的模型層實體對象和實體對象集合;dll_set為持久層對應(yīng)的操作集合,比如增刪改查、分頁、排序等。

    (3) 業(yè)務(wù)邏輯層對象BO = (bo_id, bo_name, mo, bll_set),其中:bo_id, bo_name分別對應(yīng)業(yè)務(wù)邏輯層BO的唯一的標識和名稱;mo為持久層關(guān)聯(lián)的模型層實體對象和實體對象集合;bll_set為業(yè)務(wù)邏輯層對應(yīng)的操作集合,比如登錄、注冊、審核等業(yè)務(wù)邏輯層的功能。

    基于模板的自動代碼生成中,在進行模板生成或者模板定制的時候,往往根據(jù)不同的系統(tǒng)構(gòu)架和元數(shù)據(jù),采用分層的策略來進行生成,分別生成模型層、持久層、業(yè)務(wù)邏輯層和表示層的類型。這種策略結(jié)構(gòu)清晰、目標明確,容易生成安全和質(zhì)量有保證的系統(tǒng)源代碼。

    2.1.2 軟件結(jié)構(gòu)框架

    對于軟件結(jié)構(gòu)框架,很難找到一個明確的統(tǒng)一的和公認的定義,常見的幾個定義如下:

    (1) 框架是一個系統(tǒng)全部或者部分的可復(fù)用設(shè)計,通常由一組抽象類和類之間的協(xié)作組成。

    (2) “框架是一個能夠被開發(fā)人員實例化的系統(tǒng)骨架”[33]。

    (3) 軟件框架是軟件系統(tǒng)中的一組抽象構(gòu)件以及構(gòu)件間的接口所組成,在軟件開發(fā)中開發(fā)人員可以根據(jù)實際需求對框架進行對象實例化與代碼重構(gòu),從而快速形成一個“半成品”的應(yīng)用系統(tǒng)程序,然后通過對業(yè)務(wù)流程的分析與設(shè)計從而完成整個應(yīng)用系統(tǒng)的設(shè)計與實現(xiàn)[34]。

    從上述定義可見,框架是一個“部分實現(xiàn)”的容器——一種軟件體系結(jié)構(gòu),支持軟件設(shè)計復(fù)用和實現(xiàn)復(fù)用的技術(shù)[33]。

    當前主流的web框架有基于MVC結(jié)構(gòu)的SSH(struts spring hibernate, SSH框架)框架,SpringMVC框架,基于Lucene的Compass框架,基于Spring的可插入的MVC(model view controller, 模型視圖控制器)框架SWF(spring web flow, SWF框架)[35]。現(xiàn)有的主流Web框架基本是基于分層結(jié)構(gòu)的模型視圖控制器框架,在通用框架的作為基礎(chǔ)平臺的基礎(chǔ)上,進行符合框架的代碼定制。

    2.1.3 自動代碼生成策略

    當前基于使用比較多得基于模板的生成技術(shù)主要用到Freemarker、XSLT(extensible stylesheet language for transformations,擴展樣式表轉(zhuǎn)換語言)技術(shù)和velocity技術(shù),通過代碼生成引擎將輸入的數(shù)據(jù)模型替換模板文件中的可變部分來生成目標代碼。由于模板文件基于文本易于定制和調(diào)整,結(jié)合成熟的模板語言可使代碼生成過程更具靈活性,生成的代碼質(zhì)量更高。故其在中小企業(yè)中是應(yīng)用最為廣泛的一種方式[36]。在代碼生成方案中,以下的三個元素是必須的。

    (1) 模板:在生成的代碼中,有些內(nèi)容和邏輯是不變的,在基于模板的生成技術(shù)方案中,這些內(nèi)容用模板存放,其中定義了生成代碼的基本結(jié)構(gòu)和邏輯。

    (2) 元數(shù)據(jù):元數(shù)據(jù)的本意是描述數(shù)據(jù)內(nèi)容和結(jié)構(gòu),在代碼生成技術(shù)中,元數(shù)據(jù)用于描述生成代碼的內(nèi)容。

    (3) 業(yè)務(wù)規(guī)則:業(yè)務(wù)規(guī)則定義了生成系統(tǒng)的數(shù)據(jù)處理邏輯,主要是模塊中的在持久層如何進行實體的持久,亦即基本的增刪改查操作,在業(yè)務(wù)邏輯層定義構(gòu)建在持久層基礎(chǔ)上實體的業(yè)務(wù)邏輯操作。

    基于模板的代碼生成過程如圖4所示。

    圖4 基于模板的自動代碼生成過程

    基于模板的自動代碼生成的過程如下:首先對用戶需求進行分析,進行初步的分析和設(shè)計,在實現(xiàn)階段制定要采用的框架和何種分層結(jié)構(gòu),根據(jù)功能需求,設(shè)計相應(yīng)的模板文件,并根據(jù)數(shù)據(jù)庫或者元數(shù)據(jù),使用代碼生成引擎去生成程序的源代碼。在生成的基礎(chǔ)的源代碼基礎(chǔ)上進行代碼調(diào)整和特定代碼的添加,調(diào)試之后將代碼部署到基礎(chǔ)框架中。

    2.2 基于模型驅(qū)動的自動代碼生成及技術(shù)

    基于模型驅(qū)動的自動代碼生成及技術(shù)的方法是將要實現(xiàn)的軟件系統(tǒng)抽象成模型,然后通過模型到代碼的映射規(guī)則自動生成代碼?,F(xiàn)在流行的是基于模型驅(qū)動構(gòu)架的代碼生成。模型驅(qū)動構(gòu)架的思想是以模型為驅(qū)動,由模型來生成或者編譯成程序代碼,實現(xiàn)軟件需求。模型是模型驅(qū)動構(gòu)架思想的核心。工作原理是先對用戶的需求進行分析建立PIM(platform independent model, 平臺無關(guān)模型),然后用相應(yīng)的模型驅(qū)動構(gòu)架轉(zhuǎn)換工具和技術(shù),將PIM轉(zhuǎn)換成為PSM(platform specific model,平臺相關(guān)模型),最后將PSM通過代碼生成器生成特定平臺上的目標代碼[30]。

    模型驅(qū)動構(gòu)架的出現(xiàn)使得解決傳統(tǒng)軟件的開發(fā)問題并且以工廠化開發(fā)軟件成為可能。模型驅(qū)動構(gòu)架支持基于可視化模型驅(qū)動的軟件設(shè)計、內(nèi)容存儲與交換,是一種基于模型的軟件開發(fā)構(gòu)架。其最終目標是把針對特定計算平臺的編碼工作,交由機器完成,從此將業(yè)務(wù)邏輯與實現(xiàn)技術(shù)結(jié)構(gòu)。從而最大程度的提升軟件開發(fā)效率和質(zhì)量、降低開發(fā)成本、延長軟件壽命,實現(xiàn)工廠化開發(fā)軟件[37]。

    2.2.1 模型層次結(jié)構(gòu)

    模型驅(qū)動構(gòu)架中的模型組織分成四層結(jié)構(gòu)[38],依次為M0到M3。層次結(jié)構(gòu)上,上一層是下一層的基礎(chǔ),下一層是上一層的應(yīng)用。M3是元-元模型,MOF(meta object facility,元對象機制)位于該層。MOF提供了定義M2層元模型所需要的更抽象一級的建模支持。MOF是M2層所有元模型的元模型,同時它也是自描述的,即MOF可以描述MOF元模型本身。在MDA框架中,M3層只有MOF這一個模型,它是MDA中最基礎(chǔ)和核心的標準。為模型驅(qū)動構(gòu)架中的所有模型/元模型提供統(tǒng)一的語言基礎(chǔ),為模型語言(元模型)定義提供公共標準。M2層為元模型,代表建議MOF之上的各種模型語言,提供對應(yīng)不同領(lǐng)域的領(lǐng)域建模語言,為M1層的建模提供建模符號。M1層為模型層,是建模人員通常面對的模型,即采用模型語言為企業(yè)應(yīng)用建立的模型描述。MDA的CIM(computation independent model ,計算無關(guān)模型)、PIM和PSM模型都位于該層,M0層為實例層,是M1層模型的實例化,對應(yīng)模型的具體應(yīng)用程序,是模型描述的最終目標。MDA四層元模型體系結(jié)構(gòu)如圖5所示。

    圖5 MDA四層元模型體系結(jié)構(gòu)

    2.2.2 MDA應(yīng)用模型

    MDA的應(yīng)用模型包括計算無關(guān)模型CIM,平臺無關(guān)模型PIM和平臺特定模型PSM。 它們與實例模型中的實現(xiàn)特定模型ISM(implementation specific model, 特定實現(xiàn)模型)的關(guān)系如圖6所示。

    CIM計算無關(guān)模型用于描述系統(tǒng)需求、功能、行為和運行環(huán)境,也稱為業(yè)務(wù)模型。PIM平臺無關(guān)模型是抽出的業(yè)務(wù)邏輯,不包括與實現(xiàn)平臺的技術(shù)相關(guān)的特定信息。PSM平臺特定模型,從相應(yīng)的PIM轉(zhuǎn)換而來。ISM實現(xiàn)特定模型是PSM的實例化,包括PSM用于構(gòu)建一個系統(tǒng)并使之運行的所有信息,如程序代碼、裝載規(guī)格、部署說明以及配置規(guī)范等,是一個可以實際運行的軟件系統(tǒng)[39]。

    圖6 應(yīng)用模型之間的轉(zhuǎn)換關(guān)系

    用戶界面工程中的用戶界面代碼生成也是自動代碼生成中重要的組成部分。MDA的應(yīng)用框架,也類似于UI模型的卡梅隆(Cameloen)參考框架[28]??仿⒖伎蚣芏x的四種模型分別是任務(wù)和概念、AUI(abstract user interface, 抽象用戶界面)、CUI(concrete user interface, 具體用戶界面)和FUI(final user interface, 最終用戶界面)。卡梅隆參考模型的抽象界面獨立于設(shè)備和平臺,與任務(wù)特征相關(guān),考慮輸入輸出的表示問題,是對界面的功能描述;具體用戶界面模型與設(shè)備相關(guān),與平臺無關(guān),考慮具體的實現(xiàn)問題,是界面模型的代碼轉(zhuǎn)化,轉(zhuǎn)化時,引入具體設(shè)備特征,將抽象用戶界面轉(zhuǎn)化成具體用戶界面,然后引入具體平臺特征,再將具體界面模式轉(zhuǎn)換為最終用戶界面,具體參見圖7。模型驅(qū)動構(gòu)架的自動代碼生成對用戶界面的自動生成也具有指導(dǎo)意義。

    任務(wù)和概念(Task and Concepts)抽象用戶界面(AUI)具體用戶界面(CUI)最終用戶界面(FUI)

    圖7Cameleon參考框架

    2.2.3 基于模型驅(qū)動的自動代碼生成過程

    基于模型驅(qū)動的自動代碼生成的過程如下:首先根據(jù)用戶的需求編寫PIM,再根據(jù)PIM和目標平臺編寫轉(zhuǎn)換規(guī)則,MDA代碼生成引擎根據(jù)轉(zhuǎn)換規(guī)則自動將PIM轉(zhuǎn)化成PSM,最后將PSM轉(zhuǎn)換成代碼。MDA通過兩次模型轉(zhuǎn)換和代碼生成技術(shù)提高軟件開發(fā)的效率,并使得系統(tǒng)具有較好的可一致性和可復(fù)用性?;谀0宓拇a生成過程參見圖8。

    圖8 基于模型的代碼生成過程

    2.2.4 兩者的優(yōu)缺點和融合

    基于模板的自動代碼生成具有較高的靈活性,定制和開發(fā)較為容易,提高了軟件開發(fā)的可復(fù)用度。但也有其確定,模板化的程序可讀性差,生成的代碼依賴于某種語言和框架,移植性差。在其他類似項目中使用,如果采用的框架不同或語言不同,需要重新構(gòu)建新的自動代碼生成引擎。

    模型驅(qū)動構(gòu)架相比于傳統(tǒng)的軟件開發(fā)方式和基于模板的自動代碼生成方式,具有開發(fā)效率高、可維護性可擴展性強的特點,系統(tǒng)具有良好的可移植性[40]。但是模型驅(qū)動構(gòu)架也存在一些缺點:雖然模型驅(qū)動構(gòu)架的目標遠大,但是實現(xiàn)模型驅(qū)動構(gòu)架的技術(shù)模糊,基礎(chǔ)規(guī)范MOF和UML都存在著語義不精確、語言不可執(zhí)行的問題;另外構(gòu)成平臺的元素還不是很確定,這就導(dǎo)致從系統(tǒng)的抽象模型到精確模型的轉(zhuǎn)化可能包括多個階段,而且每個階段相對于前一階段可以說成是平臺相關(guān)的。那么從這個意義上來說,PIM到PSM的轉(zhuǎn)換是模糊的[37]。

    基于模板的自動代碼生成和基于模型的自動代碼生成兩者各有其優(yōu)點和缺點,前者更注重于時效性,后者更注重于通用性,兩者之間有一道鴻溝不可逾越?;谀0宓拇a生成可以認為更關(guān)注類似PSM到代碼的生成,基于模型的自動代碼生成更關(guān)注于模型的轉(zhuǎn)換和平臺無關(guān)模型到平臺相關(guān)模型之間的轉(zhuǎn)化。因此,可以在兩者之間架起一座橋梁,融合現(xiàn)有的基于模板的技術(shù)和基于模型的代碼生成技術(shù)。

    2.3 基于對象關(guān)系映射的代碼生成

    基于對象關(guān)系映射的代碼生成主要是基于面向?qū)ο蠛完P(guān)系數(shù)據(jù)庫技術(shù)的結(jié)合體。如:Microsoft的.NET框架,JAVA開源ORM(object relation mapping,對象關(guān)系映射)框架[41]。典型的JAVA ORM工具是hibernate。hibernate是對JDBC(java database connectivity,Java數(shù)據(jù)庫連接)數(shù)據(jù)庫技術(shù)進行輕量級的對象封裝,使開發(fā)人員能方便的操作各種類型的數(shù)據(jù)庫代碼,利用Hibernate工具,使得JAVA實體類、hbm(hibernate mapping,hibernate 映射)映射文件、數(shù)據(jù)庫表之間可以相互轉(zhuǎn)化,但是缺乏進一步對實體持久性和業(yè)務(wù)邏輯以及視圖層代碼的生成。其次,可以通過對關(guān)系數(shù)據(jù)庫元數(shù)據(jù)的分析,結(jié)合模板或者模型的方式來生成持久層和業(yè)務(wù)邏輯層的代碼。

    2.3.1 阻抗不一致

    對象和關(guān)系模型存在著映射不一致的鴻溝,關(guān)系模型有深厚的以集合論為指導(dǎo)的數(shù)學(xué)理論基礎(chǔ),使用二維表來存儲數(shù)據(jù),表和表之間通過外鍵來描述實體之間的關(guān)系。對象模型是面向?qū)ο蟪绦蛟O(shè)計中的一種開發(fā)范型,對象模型通過繼承、封裝、多態(tài)來表示復(fù)雜實體的關(guān)系,對象之間的通信方式時候發(fā)消息,面向?qū)ο竽P完P(guān)系如圖9所示。在軟件開發(fā)過程中,廣泛的使用面向?qū)ο蟮某绦蛟O(shè)計作為開發(fā)的范型,實體的存儲主要是以當前主流的關(guān)系數(shù)據(jù)庫為數(shù)據(jù)存儲機制。對象建模和關(guān)系建模之間存在一條巨大的鴻溝,因為產(chǎn)生所謂的對象關(guān)系阻抗不一致問題,ORM就為解決這種問題而誕生。

    圖9 面向?qū)ο竽P蛨D

    2.3.2 對象模型和關(guān)系模型

    定義3[42]一個對象類的定義為O(A1,…,An,M1,…,Mn), 其中,Ai(i=1,2,…,n)為對象類的屬相,定義域在Di上;Mi(i=1,2,…,k)為類的方法,返回值定義在域Di上。

    定義4[42]關(guān)系R是笛卡爾積D1×D2×…×Dn的一個子集,D1×D2×…×Dn是所有的有序的n元組〈d1,d2,…,dn〉的集合,其中d1∈D1,d2∈D2,…,dn∈Dn,D1×D2×…×Dn稱為關(guān)系R的域。關(guān)系模式的一般形式可表示為R=〈U,D,DOM,∑〉,其中U為組成關(guān)系R的全部屬性集合,D為域的集合,DOM為U和D間的映射,∑為U上的一組依賴關(guān)系。

    定義5[42]映射函數(shù)F是滿足下列條件的函數(shù):F的定義域為對象所有實例的集合,設(shè)為I;F的值域為關(guān)系數(shù)據(jù)庫中的所有視圖的冪集,設(shè)為Π,對一個對象實例,o∈I,其所有的方法與屬性的集合為S。V∈Π,即V為若干視圖的集合。

    2.3.3 基于對象關(guān)系映射的代碼生成方法

    對象關(guān)系映射的關(guān)系對應(yīng)如下,面向?qū)ο笾械念惸P蛯﹃P(guān)系模型中的表,面向?qū)ο笾械膶ο竽P蛯?yīng)關(guān)系模型中的行記錄,面向?qū)ο笾蓄惖膶傩詫?yīng)關(guān)系模型中的表關(guān)鍵字,面向?qū)ο笾蓄惖年P(guān)系對用關(guān)系模型中的對象[27,30]。如下圖10所示。

    圖10 ORM映射規(guī)則

    對象關(guān)系映射自動生成引擎的生成代碼主要是如下方法:根據(jù)軟件功能需求建立實體關(guān)系圖,或者根據(jù)原有企業(yè)的遺產(chǎn)系統(tǒng)讀取實體關(guān)系,根據(jù)實體之間的關(guān)系,通過代碼生成引擎生成相應(yīng)的模型層類代碼、持久層類;更進一步可以生成業(yè)務(wù)邏輯層框架和代碼和基本的展示層代碼。

    2.3.4 基于對象關(guān)系映射的代碼生成優(yōu)缺點

    優(yōu)點:對于實體關(guān)系非常明確的領(lǐng)域模型,或者已有數(shù)據(jù)庫遺產(chǎn)系統(tǒng),可以非常容易的映射成面向?qū)ο蟮念I(lǐng)域模型,生成不同層次的代碼,提高效率。

    缺點: 生成模型相對來說比較單一,生成結(jié)構(gòu)有時過于復(fù)雜,持久效率在關(guān)聯(lián)復(fù)雜的情況比較低下。

    對于實體關(guān)系模型不確定的問題,難于進行實體關(guān)系映射,生成結(jié)構(gòu)相對單一,生成代碼比較有限。

    2.4 基于文檔注釋解析的自動代碼生成

    這種方式也屬于混合代碼生成方式。該生成方法查找特別格式的注釋,然后生成代碼所需要的一些新源碼來填補這些注釋區(qū)域,換言之這種代碼生成是通過解析代碼文件中的注釋語句來生成代碼,將控制代碼生成和模板處理的標簽作為內(nèi)聯(lián)注釋嵌入到源文件代碼中,消除了同步多個相關(guān)文件和控制文件的需要?;旌洗a生成用途廣泛,例如@XDoclet可以通過在Java源文件中的一些特殊的注釋信息,自動生成配置文件、源代碼等,WEB、EJB(enterprise java bean,JAVA商業(yè)應(yīng)用組件)的部署描述文件,為struts的struts-config.xml配置文件、JavaScript校驗等。比如javadoc可以通過文檔的注釋生成API的設(shè)計說明書,tomcat可以根據(jù)JSP生成對應(yīng)的servlet。這種方式的優(yōu)點是對于業(yè)務(wù)邏輯特殊或者特別復(fù)雜的問題,把復(fù)雜的業(yè)務(wù)邏輯部分單獨來寫,特定的可替換的部分用文檔注釋來書寫,代碼生成引擎根據(jù)特定規(guī)則對文檔注釋進行轉(zhuǎn)換。但描述這類文件較復(fù)雜,缺乏統(tǒng)一通用性[43]。

    文檔注釋是定義在類中的特殊注釋,這些文檔注釋用來向代碼中的類、方法以及屬性之類的語言特征添加元數(shù)據(jù),隨后通過文檔和代碼生成引擎,利用這些額外的元數(shù)據(jù)來生成諸如描述符和源代碼之類的相關(guān)文件。注解(Annotation),也叫元數(shù)據(jù)。一種代碼級別的說明。主要用于元數(shù)據(jù)生成文檔和代碼二次生成和以及編譯檢查。當前注解和文檔注釋被廣泛的使用,以生成大量的配置文件和程序源代碼。

    源碼上的標記,無論是文檔注釋還是注解,對于項目開發(fā)者來說,都有如下的優(yōu)勢:通過實際的代碼,合并有用的元數(shù)據(jù),分離編碼和某些領(lǐng)域相關(guān)語義的問題,使得設(shè)計和開發(fā)者能夠容易的重用存在的代碼和功能,這些技術(shù)對于軟件系統(tǒng)的維護和支持都有幫助。

    2.5 基于代理的動態(tài)類的代碼生成

    較少有文獻把基于代理的動態(tài)類的代碼生成認為是自動代碼生成技術(shù),因為這種代碼生成并不真正生成源代碼,而是通過代理技術(shù)來動態(tài)的生成類的方式,也就是說,在程序運行時創(chuàng)建類的字節(jié)碼或機器碼,并且在程序運行或者解釋期間動態(tài)生成、動態(tài)加載并調(diào)用執(zhí)行。JavaEE技術(shù)中使用動態(tài)代理類的場合比較多,比如Spring的AOP(aspect oriented programming, 面向切面編程)技術(shù)。Java原生代理實際上是創(chuàng)造了一個實現(xiàn)了所有給定接口的類,并在調(diào)用接口的方法的時候使用反射達到代理效果。動態(tài)代理提供了一種動態(tài)執(zhí)行程序組件的方法,通過動態(tài)代理實現(xiàn)業(yè)務(wù)控制器對軟件構(gòu)件的調(diào)用。動態(tài)代理是一種特殊的代理模式,其代理對象是在程序運行期間動態(tài)創(chuàng)建的。它的主要特點是不需要定義代理對象、程序代碼高度抽象以及對象之間耦合弱的特點。動態(tài)代理技術(shù)比如JAVA的動態(tài)代理Proxy,CGLIB代碼生成庫等提供了動態(tài)代理類的生成。

    2.5.1 AOP和動態(tài)代理

    AOP(aspect oriented programming, 面向切面編程),通過預(yù)編譯方式和運行期動態(tài)代理實現(xiàn)程序功能的統(tǒng)一維護的一種技術(shù)。AOP是OOP(object oriented programming,面向?qū)ο蟪绦蛟O(shè)計)的延續(xù),是軟件開發(fā)中的一個熱點,是函數(shù)式編程的一種衍生范型。利用AOP可以對業(yè)務(wù)邏輯的各個部分進行隔離,從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發(fā)的效率。代理類在程序運行時創(chuàng)建的代理方式被稱為動態(tài)代理。也就是說,這種情況下,代理類并不是在代碼中定義的,而是在運行時根據(jù)代碼中的“指示”動態(tài)生成的。相比于靜態(tài)代理,動態(tài)代理的優(yōu)勢在于可以很方便的對代理類的函數(shù)進行統(tǒng)一的處理,而不用修改每個代理類的函數(shù)。

    2.5.2 動態(tài)生成技術(shù)CGLIB

    CGLIB是一個強大的、高性能的代碼生成庫,廣泛的應(yīng)用與AOP中,用于提供方法的攔截操作。CGLIB代理通過對字節(jié)碼的操作,為對象引入間接級別的操作。CGLIB低層使用了字節(jié)碼操作框架ASM來生成新的類。ASM框架是一個Java字節(jié)碼操縱框架。它可以直接以二進制形式動態(tài)地生成stub類和其他代理類,或者在裝載時動態(tài)地修改類。

    2.6 自動代碼生成方法之比較

    不同的自動代碼生成技術(shù)有其使用的場合,有其特定環(huán)境下的優(yōu)點和缺點,表1從自動代碼生成方法的輸入輸出、使用場合、優(yōu)缺點和相關(guān)技術(shù),給出縱橫向的比較。

    表1 自動代碼生成方法之比較

    2.7 自動代碼生成技術(shù)發(fā)展趨勢

    當前自動代碼生成主要采用的是基于模型的自動代碼生成和基于模板的自動代碼生成,兩者趨于融合。未來可以根據(jù)計算機和人類處理問題的特點,采用人機協(xié)同的開發(fā)方法,根據(jù)實體業(yè)務(wù)的復(fù)雜性和需求變化頻度進行生成,劃分成基礎(chǔ)框架部分、全生成部分、半自動生成部分和全手工部分,構(gòu)建彈性、高可用性和高可復(fù)用性的自動代碼生成引擎。今年,CCF將基于人工智能的軟件開發(fā)構(gòu)造、代碼生成及技術(shù)和基于人工智能的軟件分析、測試、驗證與診斷技術(shù)以及智能人機接口軟件的設(shè)計和實現(xiàn)技術(shù)作為未來研究的重要技術(shù)方向;其次,更細粒度的智能代碼生成模型與自動代碼生成仍然需要加大研究的力度,以適應(yīng)不斷變換發(fā)展的社會需求。

    3 結(jié)語

    本文主要討論了代碼生成技術(shù),尤其是基于MDA的自動代碼生成技術(shù)的國內(nèi)外研究和應(yīng)用現(xiàn)狀,詳細分析了當前自動代碼生成技術(shù)所使用策略和方法。較多類似的管理系統(tǒng),如高校的排課管理系統(tǒng)[44]中后臺管理的大部分代碼都可以采用自動代碼生成技術(shù)完成。通過對實現(xiàn)方法有效性的相應(yīng)驗證可知,雖然隨著軟件工程新方法論的提出取得了一定的成果,但是,自動代碼生成技術(shù)還有很多不成熟之處。比如:基于模型驅(qū)動構(gòu)架的轉(zhuǎn)換工具和方法還不盡成熟,缺乏成熟系統(tǒng)的理論支持;基于模板和規(guī)則的方法只能對于特定問題域的系統(tǒng)方法有效,對于業(yè)務(wù)邏輯復(fù)雜的系統(tǒng)還是缺乏行之有效的方法。

    猜你喜歡
    代碼生成構(gòu)架代碼
    建筑安裝造價控制核心要點構(gòu)架
    急診PCI治療急性心肌梗死的護理探索構(gòu)架
    Lustre語言可信代碼生成器研究進展
    創(chuàng)世代碼
    動漫星空(2018年11期)2018-10-26 02:24:02
    創(chuàng)世代碼
    動漫星空(2018年2期)2018-10-26 02:11:00
    創(chuàng)世代碼
    動漫星空(2018年9期)2018-10-26 01:16:48
    創(chuàng)世代碼
    動漫星空(2018年5期)2018-10-26 01:15:02
    高可靠全平臺ICT超融合云構(gòu)架的設(shè)計與實現(xiàn)
    電子制作(2018年17期)2018-09-28 01:56:54
    略論意象間的主體構(gòu)架
    中華詩詞(2018年1期)2018-06-26 08:46:42
    代碼生成技術(shù)在軟件開發(fā)中的應(yīng)用
    電子世界(2016年15期)2016-08-29 02:14:28
    观看美女的网站| 中文资源天堂在线| 国产乱人视频| 麻豆国产97在线/欧美| 成人无遮挡网站| 国产69精品久久久久777片| 免费人成在线观看视频色| 久久久久久久久中文| 国产免费福利视频在线观看| 爱豆传媒免费全集在线观看| 大香蕉97超碰在线| 伊人久久国产一区二区| 精品国产露脸久久av麻豆 | 天天躁日日操中文字幕| 色尼玛亚洲综合影院| 国产一区二区三区综合在线观看 | 天堂中文最新版在线下载 | eeuss影院久久| 一级毛片 在线播放| 99热网站在线观看| 久久久久久久国产电影| 亚洲精品中文字幕在线视频 | 欧美xxxx黑人xx丫x性爽| 男人和女人高潮做爰伦理| 亚洲精品成人av观看孕妇| 亚洲欧美清纯卡通| 日本av手机在线免费观看| 色吧在线观看| 欧美激情在线99| 狂野欧美白嫩少妇大欣赏| 亚洲av不卡在线观看| 亚洲精品一区蜜桃| 国产午夜精品论理片| 亚洲在久久综合| 一区二区三区高清视频在线| 日韩av在线免费看完整版不卡| www.色视频.com| 精品一区在线观看国产| av国产久精品久网站免费入址| 又爽又黄无遮挡网站| 免费观看精品视频网站| 伦理电影大哥的女人| 久久99精品国语久久久| 久久久久久伊人网av| 成人国产麻豆网| 2018国产大陆天天弄谢| 一个人免费在线观看电影| 午夜老司机福利剧场| 麻豆av噜噜一区二区三区| 亚洲av成人精品一区久久| 久久精品国产亚洲av涩爱| 成年女人看的毛片在线观看| 亚洲乱码一区二区免费版| 日韩一本色道免费dvd| 欧美日韩在线观看h| 精品人妻视频免费看| 精品久久久久久久久亚洲| 久久人人爽人人爽人人片va| 欧美激情在线99| 在线免费十八禁| 97精品久久久久久久久久精品| 女人被狂操c到高潮| 极品教师在线视频| 成人美女网站在线观看视频| 熟妇人妻久久中文字幕3abv| 美女脱内裤让男人舔精品视频| 久久久亚洲精品成人影院| 亚洲伊人久久精品综合| 观看美女的网站| 久久国内精品自在自线图片| 伊人久久国产一区二区| a级一级毛片免费在线观看| 九九在线视频观看精品| 日韩中字成人| 夫妻午夜视频| 91精品伊人久久大香线蕉| 国产片特级美女逼逼视频| 啦啦啦啦在线视频资源| 欧美 日韩 精品 国产| 日本三级黄在线观看| 久久久精品免费免费高清| 看免费成人av毛片| 永久网站在线| 婷婷色麻豆天堂久久| 日韩伦理黄色片| 色吧在线观看| 青青草视频在线视频观看| 日本爱情动作片www.在线观看| av女优亚洲男人天堂| 成年av动漫网址| 亚洲国产日韩欧美精品在线观看| 亚洲精品自拍成人| 美女黄网站色视频| 亚洲婷婷狠狠爱综合网| 国产日韩欧美在线精品| 汤姆久久久久久久影院中文字幕 | 能在线免费观看的黄片| 中国美白少妇内射xxxbb| 婷婷色麻豆天堂久久| av在线天堂中文字幕| 日韩一区二区三区影片| 人人妻人人澡人人爽人人夜夜 | a级毛色黄片| 人妻一区二区av| 神马国产精品三级电影在线观看| 日日干狠狠操夜夜爽| 内地一区二区视频在线| 国产老妇女一区| 国产精品国产三级国产av玫瑰| 国产亚洲av嫩草精品影院| 亚洲丝袜综合中文字幕| 日产精品乱码卡一卡2卡三| 舔av片在线| 国产一级毛片在线| 在线天堂最新版资源| 日韩欧美三级三区| 国产黄色视频一区二区在线观看| 欧美人与善性xxx| 日韩中字成人| 中文乱码字字幕精品一区二区三区 | 日本黄大片高清| 日韩av免费高清视频| 国产中年淑女户外野战色| av在线亚洲专区| av国产免费在线观看| 性插视频无遮挡在线免费观看| 国产大屁股一区二区在线视频| 麻豆久久精品国产亚洲av| 国产一区二区亚洲精品在线观看| 亚洲一区高清亚洲精品| 精品国产露脸久久av麻豆 | 高清毛片免费看| 欧美日韩综合久久久久久| 国产精品一及| 简卡轻食公司| 亚洲四区av| 久久这里有精品视频免费| 精品人妻偷拍中文字幕| 亚洲国产精品成人综合色| 日日啪夜夜爽| 亚洲精品视频女| 日本爱情动作片www.在线观看| 久久精品国产鲁丝片午夜精品| 九九在线视频观看精品| 美女xxoo啪啪120秒动态图| 亚洲国产成人一精品久久久| 欧美日韩综合久久久久久| 精品午夜福利在线看| 国产美女午夜福利| 国产白丝娇喘喷水9色精品| 国产精品国产三级国产av玫瑰| 国产美女午夜福利| 老司机影院毛片| 国产成年人精品一区二区| 亚洲成人久久爱视频| 伊人久久精品亚洲午夜| 黑人高潮一二区| 亚洲人与动物交配视频| 少妇高潮的动态图| av又黄又爽大尺度在线免费看| 国产人妻一区二区三区在| kizo精华| 我的女老师完整版在线观看| 国产精品国产三级国产专区5o| 黄色一级大片看看| 国产一区亚洲一区在线观看| 建设人人有责人人尽责人人享有的 | 欧美一区二区亚洲| 午夜激情欧美在线| 大陆偷拍与自拍| 少妇的逼好多水| 欧美丝袜亚洲另类| 色网站视频免费| 又粗又硬又长又爽又黄的视频| 麻豆乱淫一区二区| 国产午夜福利久久久久久| 少妇的逼好多水| 蜜桃亚洲精品一区二区三区| 午夜福利网站1000一区二区三区| 91在线精品国自产拍蜜月| 中文在线观看免费www的网站| 精品人妻偷拍中文字幕| 一区二区三区乱码不卡18| 日韩欧美一区视频在线观看 | 午夜久久久久精精品| 日韩一本色道免费dvd| 日日摸夜夜添夜夜爱| 日韩视频在线欧美| 国产精品av视频在线免费观看| 在线 av 中文字幕| 人人妻人人澡人人爽人人夜夜 | 男女那种视频在线观看| 少妇人妻一区二区三区视频| 成人性生交大片免费视频hd| 亚洲经典国产精华液单| 国产精品精品国产色婷婷| 又爽又黄a免费视频| 天天躁夜夜躁狠狠久久av| 在线观看美女被高潮喷水网站| 亚洲精品一区蜜桃| 国产 一区精品| 毛片女人毛片| 国产精品一区二区三区四区免费观看| 国产视频首页在线观看| 又黄又爽又刺激的免费视频.| 自拍偷自拍亚洲精品老妇| 能在线免费看毛片的网站| 国产精品人妻久久久久久| 久久这里只有精品中国| 国产精品伦人一区二区| 天天躁夜夜躁狠狠久久av| 国产精品久久久久久av不卡| 国产亚洲精品av在线| 一级毛片 在线播放| 国产精品一二三区在线看| 国产男女超爽视频在线观看| 69人妻影院| 午夜精品一区二区三区免费看| av免费观看日本| 亚洲国产色片| 熟女电影av网| 在线观看免费高清a一片| 亚洲丝袜综合中文字幕| 日韩欧美三级三区| 亚洲精品乱码久久久v下载方式| 日韩av在线免费看完整版不卡| 精品久久久久久久末码| 熟妇人妻久久中文字幕3abv| 男女国产视频网站| 国产日韩欧美在线精品| 免费av毛片视频| 免费在线观看成人毛片| 两个人的视频大全免费| 国语对白做爰xxxⅹ性视频网站| kizo精华| 久久久久久久久久黄片| 蜜桃久久精品国产亚洲av| 国产黄色免费在线视频| 在现免费观看毛片| 欧美区成人在线视频| 欧美日韩视频高清一区二区三区二| 国产成人精品一,二区| 国产一区二区在线观看日韩| 欧美3d第一页| 久久久亚洲精品成人影院| 国产精品久久视频播放| 精品酒店卫生间| 91久久精品国产一区二区三区| 久久精品国产鲁丝片午夜精品| 国产三级在线视频| 亚洲人与动物交配视频| 纵有疾风起免费观看全集完整版 | 伊人久久精品亚洲午夜| 青春草亚洲视频在线观看| 国产综合懂色| 久久精品久久久久久噜噜老黄| 国产精品美女特级片免费视频播放器| 亚洲欧美精品自产自拍| 一本久久精品| 久久久久久久久久久免费av| 91在线精品国自产拍蜜月| 人人妻人人看人人澡| 国产成人免费观看mmmm| 99热这里只有精品一区| 日韩中字成人| 蜜桃亚洲精品一区二区三区| av播播在线观看一区| av女优亚洲男人天堂| 三级男女做爰猛烈吃奶摸视频| 在线观看美女被高潮喷水网站| 精品国内亚洲2022精品成人| 亚洲一级一片aⅴ在线观看| 国产一级毛片在线| 国产精品无大码| 国产片特级美女逼逼视频| 国产精品一区二区在线观看99 | 午夜免费观看性视频| www.色视频.com| 亚洲成人久久爱视频| 日韩,欧美,国产一区二区三区| 国产极品天堂在线| 九九在线视频观看精品| 97超视频在线观看视频| 亚洲最大成人手机在线| 啦啦啦韩国在线观看视频| 亚洲av中文av极速乱| 一级毛片久久久久久久久女| 亚洲精品乱码久久久v下载方式| 国内精品美女久久久久久| 青春草亚洲视频在线观看| 午夜福利在线观看免费完整高清在| 亚洲av成人av| 欧美xxxx性猛交bbbb| 久久这里有精品视频免费| 亚洲精品自拍成人| 一夜夜www| 18禁动态无遮挡网站| 亚洲色图av天堂| 美女国产视频在线观看| 男人和女人高潮做爰伦理| 久久精品熟女亚洲av麻豆精品 | 少妇丰满av| 性插视频无遮挡在线免费观看| 午夜久久久久精精品| 国内少妇人妻偷人精品xxx网站| 久久久久九九精品影院| 成人亚洲欧美一区二区av| 久久精品久久精品一区二区三区| 国产成人freesex在线| 精品一区在线观看国产| 亚洲人成网站在线观看播放| 亚洲精品国产成人久久av| 免费观看精品视频网站| 国产精品一区二区三区四区久久| 亚洲人成网站高清观看| 国产精品人妻久久久影院| 亚洲图色成人| 精品久久久久久电影网| 欧美高清性xxxxhd video| 亚洲成人中文字幕在线播放| 亚洲成人一二三区av| 国产精品国产三级专区第一集| 国产精品一区www在线观看| 高清午夜精品一区二区三区| 午夜免费激情av| 免费无遮挡裸体视频| 国产黄片视频在线免费观看| 内射极品少妇av片p| 国产精品精品国产色婷婷| 国产午夜精品一二区理论片| 亚洲最大成人av| 免费观看精品视频网站| 国产黄a三级三级三级人| 天堂网av新在线| 99热网站在线观看| 观看免费一级毛片| 亚洲18禁久久av| 最近最新中文字幕大全电影3| 又大又黄又爽视频免费| 免费看日本二区| 中文欧美无线码| 青春草国产在线视频| 亚洲av国产av综合av卡| 99热6这里只有精品| 亚洲精品aⅴ在线观看| 国内精品宾馆在线| 欧美精品一区二区大全| 久久久久网色| 纵有疾风起免费观看全集完整版 | 中文字幕久久专区| 中文天堂在线官网| 人人妻人人澡人人爽人人夜夜 | 午夜福利在线观看吧| 中文字幕av在线有码专区| 亚洲欧洲国产日韩| 毛片女人毛片| 国产成人一区二区在线| 国产 亚洲一区二区三区 | 99久国产av精品国产电影| 亚洲国产日韩欧美精品在线观看| 久久这里只有精品中国| 能在线免费观看的黄片| 久久鲁丝午夜福利片| 亚洲美女视频黄频| 免费黄色在线免费观看| 黄色一级大片看看| 亚洲内射少妇av| 国产91av在线免费观看| 日本黄大片高清| 日韩成人av中文字幕在线观看| 成年av动漫网址| 久久久久久九九精品二区国产| 观看美女的网站| 国产高清三级在线| 亚洲乱码一区二区免费版| 51国产日韩欧美| 日韩一本色道免费dvd| 三级毛片av免费| 亚洲激情五月婷婷啪啪| 国产乱来视频区| av在线观看视频网站免费| 麻豆乱淫一区二区| 日本午夜av视频| 久久草成人影院| 3wmmmm亚洲av在线观看| 亚洲精品乱码久久久v下载方式| 草草在线视频免费看| 精品亚洲乱码少妇综合久久| 日韩三级伦理在线观看| a级一级毛片免费在线观看| 亚洲精品国产成人久久av| kizo精华| 免费看美女性在线毛片视频| 大香蕉久久网| 午夜福利视频精品| 欧美区成人在线视频| 亚洲国产最新在线播放| 国产一级毛片七仙女欲春2| 国产老妇伦熟女老妇高清| 麻豆久久精品国产亚洲av| 能在线免费观看的黄片| 亚洲精品,欧美精品| 免费看日本二区| 日韩伦理黄色片| 国产在线一区二区三区精| 99久久中文字幕三级久久日本| 久久久久久久亚洲中文字幕| 床上黄色一级片| 亚洲av中文字字幕乱码综合| 久久综合国产亚洲精品| 国产精品.久久久| av卡一久久| 国产av码专区亚洲av| 日本欧美国产在线视频| 日韩av不卡免费在线播放| 99热这里只有是精品在线观看| 街头女战士在线观看网站| 国产精品久久久久久久久免| www.色视频.com| 99热这里只有是精品50| 夫妻午夜视频| 免费看光身美女| 性插视频无遮挡在线免费观看| 高清午夜精品一区二区三区| 亚洲成人久久爱视频| av在线观看视频网站免费| 91精品国产九色| 亚洲美女视频黄频| 黄色欧美视频在线观看| 最近视频中文字幕2019在线8| 人妻一区二区av| 免费观看无遮挡的男女| 免费观看av网站的网址| 一级黄片播放器| 91aial.com中文字幕在线观看| 中文字幕免费在线视频6| 一级毛片 在线播放| 日韩电影二区| 在线观看美女被高潮喷水网站| 女人久久www免费人成看片| 亚洲综合精品二区| 边亲边吃奶的免费视频| 亚洲成人一二三区av| 搡女人真爽免费视频火全软件| 观看免费一级毛片| 综合色av麻豆| 白带黄色成豆腐渣| 在线 av 中文字幕| 亚洲乱码一区二区免费版| 久久久久久久国产电影| 亚洲自偷自拍三级| 日韩成人伦理影院| 18禁在线无遮挡免费观看视频| 大话2 男鬼变身卡| 久久久久性生活片| 日韩不卡一区二区三区视频在线| 久久久a久久爽久久v久久| 97在线视频观看| 不卡视频在线观看欧美| 婷婷色综合www| 国产精品综合久久久久久久免费| 国产单亲对白刺激| 美女黄网站色视频| 日韩视频在线欧美| 乱人视频在线观看| 亚洲综合精品二区| 亚洲激情五月婷婷啪啪| 午夜精品国产一区二区电影 | 舔av片在线| 国产成人精品福利久久| 国产精品嫩草影院av在线观看| 国产黄色免费在线视频| 欧美成人午夜免费资源| xxx大片免费视频| 在线播放无遮挡| 一个人观看的视频www高清免费观看| 亚洲第一区二区三区不卡| 99热6这里只有精品| 亚洲乱码一区二区免费版| 亚洲av在线观看美女高潮| 亚洲国产欧美在线一区| 国产成人一区二区在线| 一本久久精品| 日产精品乱码卡一卡2卡三| 亚洲美女搞黄在线观看| 有码 亚洲区| 国产探花极品一区二区| 97热精品久久久久久| 久久热精品热| 亚洲av电影不卡..在线观看| 国产欧美另类精品又又久久亚洲欧美| av在线亚洲专区| av国产久精品久网站免费入址| 国产爱豆传媒在线观看| 欧美成人精品欧美一级黄| 亚洲精品乱久久久久久| 亚洲性久久影院| 性色avwww在线观看| 久久热精品热| 熟妇人妻不卡中文字幕| 男女边吃奶边做爰视频| 久久久久国产网址| 国产精品熟女久久久久浪| 国产精品国产三级专区第一集| 日本三级黄在线观看| 精品久久国产蜜桃| 国产精品.久久久| 国产精品久久久久久精品电影小说 | 免费av观看视频| 亚洲aⅴ乱码一区二区在线播放| 三级国产精品欧美在线观看| 91精品国产九色| xxx大片免费视频| 熟妇人妻久久中文字幕3abv| 午夜福利视频1000在线观看| 黄片无遮挡物在线观看| videos熟女内射| 日韩强制内射视频| www.av在线官网国产| 国产老妇伦熟女老妇高清| 97人妻精品一区二区三区麻豆| 又黄又爽又刺激的免费视频.| 国产精品女同一区二区软件| 一级毛片黄色毛片免费观看视频| 久久99热6这里只有精品| 高清日韩中文字幕在线| 国产午夜精品论理片| 婷婷色综合www| 黄片无遮挡物在线观看| 国产成人a区在线观看| av在线天堂中文字幕| 国产av码专区亚洲av| 建设人人有责人人尽责人人享有的 | 成年女人在线观看亚洲视频 | 色尼玛亚洲综合影院| 91久久精品国产一区二区三区| 免费av不卡在线播放| 国产麻豆成人av免费视频| 免费播放大片免费观看视频在线观看| a级一级毛片免费在线观看| 一个人观看的视频www高清免费观看| 精品人妻偷拍中文字幕| 亚洲图色成人| 成人漫画全彩无遮挡| 一级毛片黄色毛片免费观看视频| 免费看av在线观看网站| 国产成人精品婷婷| 色综合色国产| 最近2019中文字幕mv第一页| 色综合亚洲欧美另类图片| 欧美日本视频| 亚洲四区av| 日韩中字成人| 午夜视频国产福利| 午夜老司机福利剧场| 国产极品天堂在线| 男女那种视频在线观看| 最近中文字幕高清免费大全6| 永久免费av网站大全| 熟妇人妻不卡中文字幕| 国产视频首页在线观看| 欧美日韩一区二区视频在线观看视频在线 | 久久久色成人| 婷婷色综合大香蕉| 中文字幕久久专区| 18禁在线播放成人免费| 黄色一级大片看看| 我要看日韩黄色一级片| 国产亚洲精品久久久com| 九九在线视频观看精品| 成年人午夜在线观看视频 | 久久99蜜桃精品久久| 成人亚洲精品av一区二区| 久久久成人免费电影| 免费黄频网站在线观看国产| 少妇的逼好多水| 国产伦理片在线播放av一区| 免费观看无遮挡的男女| 亚洲国产高清在线一区二区三| 国产精品美女特级片免费视频播放器| 婷婷色综合大香蕉| 久久久久久久亚洲中文字幕| 我要看日韩黄色一级片| 黄色日韩在线| 性色avwww在线观看| 黄色日韩在线| 亚洲精品国产av成人精品| 亚洲精品视频女| 亚洲精品乱码久久久v下载方式| 亚洲国产欧美在线一区| 亚洲丝袜综合中文字幕| 嫩草影院新地址| 午夜福利在线观看免费完整高清在| 最近2019中文字幕mv第一页| 日韩欧美精品v在线| 乱码一卡2卡4卡精品| 嫩草影院精品99| 欧美日韩综合久久久久久| 精品一区二区三区视频在线| 天天躁夜夜躁狠狠久久av| 美女高潮的动态| 亚洲av.av天堂| 中文资源天堂在线| 最后的刺客免费高清国语| 蜜臀久久99精品久久宅男| 欧美日韩亚洲高清精品| 日韩大片免费观看网站| 成年女人在线观看亚洲视频 | 国产精品嫩草影院av在线观看| 男的添女的下面高潮视频| 色视频www国产| 久久精品夜夜夜夜夜久久蜜豆| 国产成人a区在线观看| 嫩草影院精品99| 国产精品一区二区在线观看99 |