日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

YJ智能框架--面向对象方面编程

發(fā)布時間:2023/12/15 编程问答 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 YJ智能框架--面向对象方面编程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

                中文摘要

摘要:面向?qū)ο缶幊套鳛橹髁骶幊谭缎?#xff0c;在Web系統(tǒng)設(shè)計實現(xiàn)中得到了很好的應(yīng)用,但同時也早已暴露出不足,針對面向?qū)ο缶幊趟枷氲牟蛔闳藗兲岢隽嗣嫦蚍?br />面編程。面向方面編程很好地解決了橫切關(guān)注點的問題,從一個更高的角度對系統(tǒng)進(jìn)行了分解。本博客較深入地分析研究了面向方面編程與面向?qū)ο缶幊讨g的關(guān)系,探討了面向方面編程的技術(shù)實現(xiàn)原理,對基于面向方面需求分析、設(shè)計、開發(fā)相關(guān)理論做了進(jìn)一步的探討和研究,著重研究了面向方面編程在Web系統(tǒng)中的應(yīng)用。

  針對Web應(yīng)用系統(tǒng)特點,本文分析設(shè)計了一種基于MVC的多層系統(tǒng)架構(gòu),并著重分析了系統(tǒng)中具有共性的一些系統(tǒng)級橫切關(guān)注點,對象持久化、數(shù)據(jù)庫連接維護(hù)、緩存和權(quán)限認(rèn)證,及它們與Web系統(tǒng)各層之間的關(guān)系。YJ智能框架針對這些橫切關(guān)注點設(shè)計出了具體的解決方案。本文最后對比分析了面向方面編程與面向?qū)ο缶幊?#xff0c;總結(jié)了面向方面編程的優(yōu)缺點結(jié)合實踐應(yīng)用提出了一些基于面向方面編程的最佳實踐

第一章 緒論

1.1選題背景及其意義

  基于B/S多層架構(gòu)的Web系統(tǒng),由于更高的安全性、可維護(hù)性等特點已經(jīng)取代C/S架構(gòu)成為企業(yè)應(yīng)用的主流,隨著社會的發(fā)展,各行各業(yè)信息化程度越來越高,企業(yè)應(yīng)用需求不斷發(fā)展變化,軟件應(yīng)用系統(tǒng)需要實現(xiàn)的業(yè)務(wù)操作越來越復(fù)雜龐大,同時也對軟件各方面性能,可擴(kuò)展性、可維護(hù)性、安全、穩(wěn)定等提出了越來越高的要求。應(yīng)用需求的發(fā)展不停地挑戰(zhàn)著計算機(jī)軟件技術(shù)的發(fā)展,軟件編程方式經(jīng)歷了從最初的面向機(jī)器、到面向過程、再到面向?qū)ο?#xff0c;每一種新的編程方法學(xué)的發(fā)展,都為人們提供了一種更為自然的方式,可以將系統(tǒng)需求映射為計算機(jī)語言的編程結(jié)構(gòu)。這些編程方法學(xué)的不斷發(fā)展可以讓人們創(chuàng)建更加復(fù)雜的軟件系統(tǒng)。面向?qū)ο缶幊?Object-Oriented Programming簡稱OOP)相比傳統(tǒng)編程模式在構(gòu)建Web系統(tǒng)時顯出了它的強(qiáng)大功能,成為了當(dāng)前主流的編程范型。OOP通過分析、抽象出一系列具有一定屬性與行為的實例,并通過這些實例之間的協(xié)作完成系統(tǒng)的功能,按照功能或行為對軟件系統(tǒng)進(jìn)行分割,架構(gòu)整個系統(tǒng),很好地解決了數(shù)據(jù)與操作模塊化編程,相比以前面向過程編程大大解耦了軟件系統(tǒng)。OOP發(fā)展到現(xiàn)在出現(xiàn)了很多優(yōu)秀的面向?qū)ο笳Z言,如java它是一種純面向?qū)ο笳Z言,而且java在針對企業(yè)應(yīng)用web系統(tǒng)中提供了一整套基于面向?qū)ο蟮慕鉀Q方案和技術(shù)規(guī)范包括有、、、、、等等越來越多的系統(tǒng)采用基于技術(shù)的實現(xiàn)也成為人們主要的選擇。然而隨著軟件系統(tǒng)的用戶需求的不斷發(fā)展日益顯出了自身的不足。技術(shù)中最重要的概念是類和對象。類對數(shù)據(jù)及其相關(guān)操作進(jìn)行了封裝封裝帶來了隱藏實現(xiàn)細(xì)節(jié)的好處但同時也限制了設(shè)計開發(fā)的靈活性和系統(tǒng)的擴(kuò)展性。只能從業(yè)務(wù)流程的單一方向設(shè)計和實現(xiàn)系統(tǒng)而實際應(yīng)用系統(tǒng)中業(yè)務(wù)繁多很多業(yè)務(wù)都需要執(zhí)行共同的操作。日志就是一個典型的例子基于傳統(tǒng)實現(xiàn)的系統(tǒng)會出現(xiàn)日志類似操作的相關(guān)調(diào)用代碼分散在程序中多處引起代碼混亂對系統(tǒng)維護(hù)和理解造成較大困難同時也增加了開發(fā)人員額外的負(fù)擔(dān)。這種www.docin.com北京交通大學(xué)碩士學(xué)位論文第一章緒論編程模式還使得在多個類的方法中擴(kuò)展類似操作變得非常困難喪失良好的擴(kuò)展性。針對編程模式的不足人們提出了面向方面編程簡稱它把實現(xiàn)類似日志這樣的操作看作一個橫切面利用可以很好地解決這種橫切問題被很多人看好認(rèn)為是繼之后計算機(jī)編程學(xué)上又一場重大的革命力求站在一個更高的角度分解應(yīng)用系統(tǒng)更接近真實世界架構(gòu)系統(tǒng)解決所處的困境。研究及其應(yīng)用現(xiàn)狀概念最先是由領(lǐng)導(dǎo)的施樂公司帕洛阿爾托研究中心即屺一個研究小組于年提出并隨后又申請了的專利。但是思想產(chǎn)生已經(jīng)有相當(dāng)長的時間了早在年開始觚屺的研究人員就對面向?qū)ο笏枷氲木窒扌赃M(jìn)行了分析形成了概念的雛形甚至還有其他人聲明更早的時候就做過與類似思想和方法論的研究如于年發(fā)表的論文中提到不修改已有代碼如何擴(kuò)展已有系統(tǒng)功能。隨著研究的深入被越來越多的人關(guān)注一個項目組近年來也一直花大力量研究還有很多關(guān)于的開源項目得到了的支持如目前最成熟技術(shù)—一語言也得到了相關(guān)項且組的支持公司也推出了他們的框架。目前和合并成了。也引起了微軟公司相當(dāng)大的關(guān)注他們也正在加大力量對進(jìn)行研究甚至在體系中已經(jīng)不同程度應(yīng)用了類似的思想。正在逐漸形成一套完整的程序設(shè)計思想各種平臺的技術(shù)也應(yīng)運而生。平臺是應(yīng)用最早的也是目前運用最為成熟的出現(xiàn)了很多支持的框架如、、和基于的擴(kuò)展語言這里列舉的四種工具都是基于的實現(xiàn)它們被公認(rèn)為是走在的最前列。然而作為一種新的編程思想和模式仍有待進(jìn)一步探討

研究基于設(shè)計開發(fā)的相關(guān)理論目前也很欠缺的具體實現(xiàn)技術(shù)還有很多不成熟的地方更沒有一個真正的語言所有這些導(dǎo)致距離廣泛應(yīng)用仍然有相當(dāng)大的距離。www.docin.com北京交通大學(xué)碩士學(xué)位論文第一章緒論大多數(shù)應(yīng)用仍然處在實驗研究階段僅僅是作為一個輔助工具在被使用在系統(tǒng)開發(fā)中的應(yīng)用也非常有限大多數(shù)系統(tǒng)都只是應(yīng)用工具提供的框架實現(xiàn)解決了某些特定的功能。如企業(yè)項目中廣泛采用的框架利用框架中提供的功能實現(xiàn)了事務(wù)處理與商業(yè)業(yè)務(wù)邏輯的分離。本文研究重點本文將與思想進(jìn)行對比研究分析它們之間的關(guān)系對基于思想的設(shè)計和開發(fā)做進(jìn)一步的探討和研究并分析了系統(tǒng)的特點基于模式重新設(shè)計架構(gòu)系統(tǒng)研究系統(tǒng)中具有共性的一些橫切關(guān)注點利用語言設(shè)計實現(xiàn)基于模式處理這些橫切關(guān)注點的方案。本文結(jié)構(gòu)安排本文共分為以下五章第一章是緒論部分主要介紹了選題背景及其意義分析了當(dāng)前主流編程范型模式的局限性介紹本文的研究對象及其研究和應(yīng)用現(xiàn)狀并提出了本文的研究重點和研究方向。第二章是本文對的理論探討研究部分主要闡述了思想及其相關(guān)概念分析了模式與模式的關(guān)系探討了技術(shù)實現(xiàn)原理對設(shè)計開發(fā)理論做了進(jìn)一步的探討和研究。第三章基于技術(shù)設(shè)計分析系統(tǒng)架構(gòu)的特點遵循多層架構(gòu)、設(shè)計了一種系統(tǒng)架構(gòu)分析了系統(tǒng)中一些具有共性的、重要的橫切關(guān)注點數(shù)據(jù)庫連接維護(hù)、對象持久化、緩存、權(quán)限認(rèn)證及它們與系統(tǒng)各層之間的關(guān)系。第四章是本文的設(shè)計實現(xiàn)部分結(jié)合第二章對理論的研究基于第三章架構(gòu)設(shè)計和橫切關(guān)注點的分析采用基于的擴(kuò)展語言——對緩存、對象持久化、數(shù)據(jù)庫連接維護(hù)包含事務(wù)處理和權(quán)限認(rèn)證幾個橫切關(guān)注點給出了模式的設(shè)計實現(xiàn)方案。第五章與傳統(tǒng)模式的系統(tǒng)架構(gòu)進(jìn)行對比分析了基于模式架構(gòu)系統(tǒng)的特點突出顯示了在耦合性、可讀性、可擴(kuò)展性三個方面的www.docin.com北京交通大學(xué)碩士學(xué)位論文第一章緒論優(yōu)越性同時也提出了基于設(shè)計開發(fā)中一些不足的地方結(jié)合自己實驗體會列舉了一些最佳編程實踐條款。最后是本文的總結(jié)總結(jié)一些優(yōu)勢并且提出了進(jìn)一步研究工作www.docin.com北京交通大學(xué)碩士學(xué)位論文第二章設(shè)計、開發(fā)研究第二章設(shè)計、開發(fā)研究基本概念發(fā)展至今并沒有在業(yè)界形成統(tǒng)一的認(rèn)識目前也沒有一個確切的定義盡管如此已經(jīng)顯示出了它強(qiáng)大的優(yōu)越性。的目的是克服的不足實現(xiàn)系統(tǒng)更好的解耦從一個更高層次更自然地構(gòu)建系統(tǒng)提高開發(fā)效率增加系統(tǒng)的可維護(hù)性和可擴(kuò)展性。的不足就在于類對數(shù)據(jù)方法的絕對封裝性所帶來的限制針對實際應(yīng)用系統(tǒng)中存在著大量的類似于日志這樣的橫切面這種限制使得很難為多個方法統(tǒng)一進(jìn)行維護(hù)和擴(kuò)展。而利用一種“橫切”的技術(shù)剖開類中封裝的多個方法可以靈活地對這些方法進(jìn)行切入新的業(yè)務(wù)代碼、擴(kuò)展新功能點同時在具體開發(fā)實現(xiàn)時不需要對原有的類代碼作修改正如所提到的從外部往類中的方法批量擴(kuò)展新的功能點而不用修改原有的程序代碼。以日志操作為例可以用圖代表面向?qū)ο缶幊痰膶崿F(xiàn)圖代表的實現(xiàn)方法包含日志操作調(diào)用日志操作方法核心業(yè)務(wù)邏輯里查墨堡圖面向?qū)ο缶幊虒崿F(xiàn)模式日志操作方法廠———通過相關(guān)技術(shù)日志邏輯二百而牙西痙一方法方法包含日志操作調(diào)用核心業(yè)務(wù)邏輯圖面向方面編程實現(xiàn)模式從兩圖的對比可以看出面向?qū)ο缶幊虖膯我豢v向構(gòu)建系統(tǒng)圖中方法和方法代碼中需要顯式地包含對日志邏輯操作方法的調(diào)用一旦類似業(yè)務(wù)方法數(shù)量龐大將導(dǎo)致日志調(diào)用相關(guān)代碼分散在程序中各處產(chǎn)生混亂而在面向方面www.docin.com北京交通大學(xué)碩士學(xué)位論文第二章設(shè)計、開發(fā)研究編程模式中增加了一個橫切面從縱橫兩個方向分解系統(tǒng)圖方法和方法不再需要顯式地調(diào)用日志操作日志操作由相關(guān)技術(shù)自動織入其內(nèi)可以認(rèn)為面向方面不僅僅封裝了日志操作的實現(xiàn)邏輯而且也封裝了對日志實現(xiàn)邏輯操作的調(diào)用相比之下面向方面劃分系統(tǒng)更加自然系統(tǒng)耦合性進(jìn)一步降低。在概念產(chǎn)生和發(fā)展的同時產(chǎn)生了一些新的術(shù)語關(guān)注點如圖中所示日志邏輯和核心業(yè)務(wù)邏輯等這些功能點稱之為關(guān)注點每一個關(guān)注點都是我們需要關(guān)心實現(xiàn)的一個邏輯功能點。其中核心業(yè)務(wù)邏輯這些關(guān)注點是實現(xiàn)主要業(yè)務(wù)邏輯的核心操作稱之為核心關(guān)注點而類似日志邏輯這些關(guān)注點它通過相關(guān)技術(shù)“橫切”織入程序中各個需要它的地方稱之為橫切關(guān)注點。連接點圖中方法和方法需要切入日志操作的地方都是連接點它是程序中一個精確的執(zhí)行點。方法體調(diào)用或者執(zhí)行、對屬性賦值或者讀取等代碼處都可以看作連接點可供織入橫切關(guān)注業(yè)務(wù)邏輯連接點為提供了系統(tǒng)功能擴(kuò)展的空間。通知包含橫切關(guān)注點的業(yè)務(wù)邏輯模塊可以定義為一個通知通知中還定義了橫切關(guān)注點和核心關(guān)注點切入關(guān)系、如何組合實現(xiàn)完整的商業(yè)業(yè)務(wù)邏輯。從不同的角度對通知可以作出不同的分類通常根據(jù)切入方式和切入位置分為以下三種前通知、后通知和周圍通知在本文第四章中都有具體的應(yīng)用。切入點就是定義一個由此點切入一些具有共同特征連接點所組成的集合橫切面這些連接點都需要切入同一個橫切關(guān)注點的業(yè)務(wù)邏輯。一個大的軟件系統(tǒng)中通常有很多不同的橫切關(guān)注點分別對應(yīng)不同的橫切面面向方面編程需要為每一個橫切面定義一個切入點定義切入點的關(guān)鍵就是精確捕獲橫切面對應(yīng)的所有連接點。方面切入點和對應(yīng)的通知結(jié)合在一起就是方面面向方面中方面的概念和面向?qū)ο笾蓄惖母拍詈茴愃篇︻愂欠庋b模塊化了屬性及屬性相關(guān)操作而方面是封裝模塊化切入點及切入點處被切入的通知。甚至在語言中方面實現(xiàn)代碼形式也跟類的很相似但方面是從類外面實現(xiàn)對類中方法的擴(kuò)展在方面內(nèi)部實現(xiàn)對橫切關(guān)注點業(yè)務(wù)邏輯的調(diào)用同時描述了橫切關(guān)注點與核心關(guān)注點的www.docin.com北京交通大學(xué)碩士學(xué)位論文第二章設(shè)計、開發(fā)研究切入關(guān)系。另外∞還允許方面跟類一樣定義屬性和方法在本文第四章的具體實現(xiàn)中將會看到很多這樣的應(yīng)用。織入將橫切關(guān)注點與核心關(guān)注點按照方面的定義進(jìn)行組合成完整的業(yè)務(wù)邏輯這一過程在中稱為織入。不同實現(xiàn)技術(shù)和不同織入需求織入過程可以在不同的階段完成編譯之前、編譯之時、運行之時。上下文主要是指核心關(guān)注點方面連接點處一些信息通常指核心關(guān)注點業(yè)務(wù)方法的調(diào)用實例、方法名、調(diào)用執(zhí)行的實參等這些信息通常會被橫切關(guān)注點切入時獲得以供在通知中實現(xiàn)橫切關(guān)注點的業(yè)務(wù)邏輯。圖術(shù)語示意圖以上術(shù)語基本得到業(yè)界的認(rèn)同基于這些術(shù)語的技術(shù)特征組成了最基本的技術(shù)當(dāng)前絕大多數(shù)具都實現(xiàn)了這些技術(shù)。語言對語言做了一些擴(kuò)展在新的語法要素中幾乎可以找到與這些術(shù)語一一對應(yīng)的的元素。與關(guān)系的介紹面向?qū)ο缶幊淌钱?dāng)前主流編程范型是編程學(xué)上的一次意義重大的革命面向?qū)ο蠹夹g(shù)將現(xiàn)實世界問題領(lǐng)域與軟件編程中對象進(jìn)行映射對現(xiàn)實世界中的www.docin.com北京交通大學(xué)碩士學(xué)位論文第二章設(shè)計、開發(fā)研究問題進(jìn)行分解、簡單化使之符合人類的思維習(xí)慣能夠自然的表現(xiàn)現(xiàn)實世界中的實體和問題面向?qū)ο缶幊淘谲浖幊虒W(xué)上具有重要的意義。相比以前面向過程語言面向?qū)ο笳Z言具備很多新的特點人們利用面向?qū)ο蟮姆庋b、繼承、多態(tài)思想可以更加有效、自然地構(gòu)建復(fù)雜的軟件系統(tǒng)。的優(yōu)勢相比傳統(tǒng)編程方法主要體現(xiàn)在以下幾個方面高度重用性。面向?qū)ο笳Z言利用類封裝了數(shù)據(jù)和相關(guān)業(yè)務(wù)操作實現(xiàn)了良好的模塊化提高了系統(tǒng)代碼的重用性“對象模型的使用不僅鼓勵軟件的復(fù)用而且還鼓勵整個設(shè)計的復(fù)用同時也導(dǎo)致可復(fù)用應(yīng)用框架的建立”。面向?qū)ο缶幊淌沟孟到y(tǒng)帶來很大的靈活性。代碼結(jié)構(gòu)的改良。由于類的高度模塊化和良好的封裝性“類是理想的模塊化機(jī)制它的獨立性好修改一個類通常不會引起軟件的整體變化往往只需對局部作一些修改”。由此帶來一系列的好處耦合性降低、代碼易于理解、可維護(hù)性和可擴(kuò)展性增強(qiáng)、易于測試和調(diào)試。、較易開發(fā)大型軟件產(chǎn)品。面向?qū)ο缶幊滩粌H有利于實現(xiàn)復(fù)雜系統(tǒng)的細(xì)化而且也有利于團(tuán)隊分工、共同合作許多軟件開發(fā)公司的經(jīng)驗都表明當(dāng)面向?qū)ο蠓椒▽W(xué)用于大型軟件開發(fā)時軟件成本明顯地降低軟件的整體質(zhì)量得以提高。然而發(fā)展至今也暴露出了思想的局限性由于類固有封裝特性忽略了類與類之間、方法與方法之間一些共同的實現(xiàn)細(xì)節(jié)橫切關(guān)注點在面臨這些問
題時會導(dǎo)致相同的代碼片段分散在程序中各處造成代碼糾結(jié)在大型的企業(yè)應(yīng)用系統(tǒng)中尤為明顯。面向?qū)ο缶幊痰陌l(fā)展概括起來經(jīng)歷了三個階段第一階段以類為中心設(shè)計開發(fā)利用類的封裝性和繼承性很好地實現(xiàn)了系統(tǒng)代碼復(fù)用性第二階段以接口為中心可以稱為面向接口的開發(fā)更注重系統(tǒng)的耦合性第三階段以設(shè)計模式為
中心基于組件的開發(fā)進(jìn)一步提高整個系統(tǒng)設(shè)計的復(fù)用性。盡管如此面向?qū)ο笳Z言仍然無法徹底擺脫在解決橫切關(guān)注點時的困境。是的補充和發(fā)展就是針對的思想局限性設(shè)計出的一種新的編程模式是對技術(shù)的補充和發(fā)展。它與追求的共同目標(biāo)都是實現(xiàn)軟件進(jìn)一步解耦、提高軟件
復(fù)用性、增加軟件的可擴(kuò)展性減輕開發(fā)者負(fù)擔(dān)、提高開發(fā)效率。注意到軟www.docin.com北京交通大學(xué)碩士學(xué)位論文第二章設(shè)計、開發(fā)研究件系統(tǒng)需求中存在大量的橫切關(guān)注點而解決橫切關(guān)注點問題時卻陷入代碼
混亂的尷尬處境只能封裝橫切關(guān)注點的業(yè)務(wù)邏輯實現(xiàn)而有關(guān)橫切關(guān)注點的調(diào)用代碼卻會分散在程序中各處分散了核心業(yè)務(wù)開發(fā)人員的精力和注意力不僅增加了開發(fā)人員的負(fù)擔(dān)而且對系統(tǒng)各種性能也造成較大的損傷。不僅僅封裝了橫切關(guān)注點的業(yè)務(wù)邏輯實現(xiàn)而且還封裝了對它的調(diào)用有效地實現(xiàn)橫切關(guān)注點與核心關(guān)注點的解耦提高了程序的模塊化程度。與現(xiàn)有技術(shù)不是一種競爭關(guān)系而以及相關(guān)技術(shù)為基礎(chǔ)才能實現(xiàn)的開發(fā)模式。有了這一新的思想工具并不意味著對開發(fā)人員的面向?qū)ο缶幊桃罂梢越档酮ハ喾椽浅R蕾囉讵幊棠J街辛己玫木幊塘?xí)慣這好比在開發(fā)模式中實現(xiàn)類的方法時仍然需要遵守結(jié)構(gòu)化編程模式。思想模式并不是萬能的它并不能解決開發(fā)中所有的問題能夠很好解決的問題強(qiáng)行追求的實現(xiàn)往往只能是弄巧成拙。對的發(fā)展著重體現(xiàn)在對軟件系統(tǒng)需求層次上的劃分是從單一的縱方向構(gòu)建軟件系統(tǒng)“一切皆為對象”開發(fā)者用一組實例以及這些實例之間的關(guān)系組合構(gòu)建軟件系統(tǒng)實例的組合按照業(yè)務(wù)流水單一方向進(jìn)行。而注意到了系統(tǒng)中另外還存在很多“橫切面”增加了從橫方向構(gòu)建系統(tǒng)這不僅大大降低了系統(tǒng)耦合性而且可以非常方便開發(fā)人員對系統(tǒng)功能進(jìn)行擴(kuò)展在不影響現(xiàn)有代碼的情況下通過增加新的橫切面就可以實現(xiàn)。將使得開發(fā)者可以將應(yīng)用需求更自然地映射到編程模式之中。對封裝性的影響?yīng)ㄟ^定義類來加強(qiáng)系統(tǒng)的封裝性隱藏實現(xiàn)細(xì)節(jié)就是為了對系統(tǒng)進(jìn)行更好的解耦而橫切關(guān)注點是模式中被封裝的實現(xiàn)細(xì)節(jié)中共同的部分模式的封裝導(dǎo)致放棄了對這些橫切關(guān)注點的模塊化。采用“橫切”技術(shù)切入中類的方法為開發(fā)人員提供了破壞面向?qū)ο笾蓄惞逃蟹庋b性的機(jī)會然而開發(fā)人員利用切入方法內(nèi)部時只要運用恰當(dāng)相反可以帶來更好的封裝性正如所言“我相信應(yīng)該做的是給程序員提供能寫更漂亮的程序的工具而不是施加足夠的安全機(jī)制讓他們不能編寫糟糕的程序”。模式就是這種提供更好的模塊化程序的工具。應(yīng)該注意到模式中多個方法都封
裝包含對橫切關(guān)注點的調(diào)用并不合適這樣的封裝會引起代碼混亂的目的www.docin.com北京交通大學(xué)碩士學(xué)位論文第二章設(shè)計、開發(fā)研究正是打破這種不合適的封裝將對橫切關(guān)注點的調(diào)用封裝在“方面”里面將被封裝的實現(xiàn)細(xì)節(jié)的共同部分抽離出來實現(xiàn)更好的模塊化降低系統(tǒng)耦合性。從某種意義上來說封裝了系統(tǒng)的靜態(tài)部分封裝了系統(tǒng)的動態(tài)部分。因此單純討論是否破壞的封裝性并沒有什么意義中方法的絕對封裝有著它固有的思想局限性而加入卻可以使系統(tǒng)的封裝性做得更好。與設(shè)計模式的關(guān)系設(shè)計模式是面向?qū)ο笳Z言開發(fā)經(jīng)驗的積累各種不同的設(shè)計模式都定義了解決某一類問題的一種較好的策略著名的《設(shè)計模式》對設(shè)計模式做了歸納和總結(jié)它不僅提供了更好的設(shè)計方案而且還提供了基于面向?qū)ο筌浖O(shè)計交流的工具。設(shè)計模式通過最大程度地利用面向?qū)ο蟮奶匦元еT如利用繼承、多態(tài)對責(zé)任進(jìn)行分離、對依賴進(jìn)行倒置面向抽象、面向接口最終設(shè)計出靈活、可
擴(kuò)展、可重用的類庫、組件乃至于整個系統(tǒng)的架構(gòu)。在設(shè)計的過程中通過各種模式體現(xiàn)對象的行為、暴露的接口、對象間關(guān)系、以及對象分別在不同層次中表現(xiàn)出來的形態(tài)。然而鑒于對象封裝的特殊性“設(shè)計模式”的觸角始終在接口與抽象中大做文章而對于對象內(nèi)部則無能為力。而且由于設(shè)計模式過于依賴接口和追求抽象與實現(xiàn)的分離有時會給人帶來設(shè)計的兩難抉擇簡單實現(xiàn)或者靈活設(shè)計。是對設(shè)計模式的延續(xù)突破了對象的封裝將系統(tǒng)中不同的關(guān)注點分為核心關(guān)注點與橫切關(guān)注點并將之映射成面向方面的一種編程方式。并不需要借助接口和抽象而是利用橫切技術(shù)直接深入到對象內(nèi)部截取方法之間傳遞的消息可以隨意織入各種通知在不改變原有類的代碼基礎(chǔ)上實現(xiàn)該類功能的擴(kuò)展。之所以較設(shè)計模式功能更加強(qiáng)大使用更加簡單關(guān)鍵就是在于設(shè)計模式是對面向?qū)ο缶幊陶Z言的一種編程技巧而面向方面思想是對面向?qū)ο笏枷氲倪M(jìn)一步發(fā)展模式更接近現(xiàn)實世界構(gòu)建系統(tǒng)。技術(shù)實現(xiàn)原理目前沒有純粹的語言絕大多數(shù)的工具和擴(kuò)展語言都是基于面向?qū)Κ勃皐ww.docin.com北京交通大學(xué)碩士學(xué)位論文第二章設(shè)計開發(fā)研究象語言的擴(kuò)充在領(lǐng)域?qū)崿F(xiàn)主要有兩種方式動態(tài)代理實現(xiàn)和基于面向?qū)ο笳Z言的擴(kuò)展。動態(tài)代理實現(xiàn)標(biāo)準(zhǔn)類庫包中有代理類和調(diào)用處理柄接口類中提供了方法。該方法可以產(chǎn)生一個代理實例并且代理實例與被代理實例具備相同接口被代理實例就是核心業(yè)務(wù)方面的實例因此動態(tài)代理實現(xiàn)都要求為所有核心業(yè)務(wù)類定義相應(yīng)的接口。兩者的代理關(guān)系通過實現(xiàn)接口的方法來確定在核心業(yè)務(wù)實例被代理的時候可以實現(xiàn)切入橫切業(yè)務(wù)邏輯還可以攔截核心業(yè)務(wù)邏輯的執(zhí)行同時方法中的參數(shù)也為切入時捕獲核心業(yè)務(wù)方面上下文提供了條件。這些具體實現(xiàn)通常封裝在一個工廠類中程序中需要新建核心業(yè)務(wù)實例時由該工廠提供一個代理實例。廠的實現(xiàn)代碼示例如下利用的代理機(jī)制獲取代理對象。代理對象與被代理對象具備相同的接口其中實現(xiàn)了接口示例代碼如下】恤www.docin.com北京交通大學(xué)碩士學(xué)位論文第二章設(shè)計、開發(fā)研究。臟方法調(diào)用前可以切入相應(yīng)橫切業(yè)務(wù)邏輯還可攔截核心業(yè)務(wù)邏輯地執(zhí)行”核心業(yè)務(wù)方法執(zhí)行之前可以切入橫切業(yè)務(wù)邏輯”調(diào)用核心業(yè)務(wù)邏輯方法在方法調(diào)用后可以切入相應(yīng)橫切業(yè)務(wù)邏輯亂“舯”核心業(yè)務(wù)方法之后可以切入橫切業(yè)務(wù)邏輯”
動態(tài)代理實現(xiàn)時捕獲上下文可以在方法中進(jìn)行方法有三個參數(shù)】分別暴露了核心關(guān)注點被調(diào)用方法的信息被調(diào)用方法所在的實例被調(diào)用方法被調(diào)用方法的行參列表。通過語句“”的調(diào)用執(zhí)行核心業(yè)務(wù)中被捕獲的方法在該語句前后就可以切入相應(yīng)的橫切業(yè)務(wù)邏輯甚至不執(zhí)行該語句實現(xiàn)攔截核心業(yè)務(wù)方法的執(zhí)行。假定程序中有這樣的核心業(yè)務(wù)類及其對應(yīng)的接口如下蛔”執(zhí)行核心業(yè)務(wù)方法”測試代碼如下執(zhí)行結(jié)果如下核心業(yè)務(wù)方法執(zhí)行之前可以切入橫切業(yè)務(wù)邏輯執(zhí)行核心業(yè)務(wù)方法核心業(yè)務(wù)方法之后可以切入橫切業(yè)務(wù)邏輯下圖描述了動態(tài)代理機(jī)制實現(xiàn)原理www.docin.com北京交通大學(xué)碩士學(xué)位論文第二章設(shè)計、開發(fā)研究核心豁垂務(wù)盍一一一一一一一一…一…一一一‘通過獲取接口類型的代理對象被代理實例為類的實例■………………一圖動態(tài)代理實現(xiàn)原理圖動態(tài)代理實現(xiàn)機(jī)制基本上都利用了這一原理并配合文件的使用同時利用的反射機(jī)制提供了一個框架。這種實現(xiàn)機(jī)制最大優(yōu)點在于不需要額外的編譯器和新的語法學(xué)習(xí)、、這幾種工具都是基于動態(tài)代理機(jī)制的實現(xiàn)然而在實際應(yīng)用中存在以下問題由于代理實例的引入增加了額外的類加載和對象的創(chuàng)建雖然各種框架都采取很多措施進(jìn)行優(yōu)化但對性能產(chǎn)生的影響還是比較大。由于大量反射機(jī)制的應(yīng)用對程序的容錯和效率也造成了較大的影響。動態(tài)代理實例的產(chǎn)生需要為原始類定義接口并且對象的產(chǎn)生必須通過特定的工廠產(chǎn)生同時還需要配置一些文件在文件中定義連接點的捕獲、橫切方式和切入粒度等等增加了開發(fā)者負(fù)擔(dān)在使用上不夠靈活功能也不夠強(qiáng)大。動態(tài)代理由于利用反射機(jī)制方法來調(diào)用核心關(guān)注點方法無法支持基于靜態(tài)方法的連接點捕獲。動態(tài)代理主要是對方法的代理無法支持對基于屬性的連接點捕獲www.docin.com北京交通大學(xué)碩士學(xué)位論文第二章設(shè)計、開發(fā)研究在動態(tài)代理框架應(yīng)用中框架是其中杰出的代表在企業(yè)應(yīng)用中被廣泛采用提供了一個輕量級的容器可以用來管理業(yè)務(wù)對象在框架內(nèi)可以很方便地實現(xiàn)面向方面事務(wù)管理使其與核心業(yè)務(wù)邏輯分離。另外還有一種實現(xiàn)的方法就是利用班庫利用它的代碼增強(qiáng)功能可以動態(tài)地為中的類生成子類實現(xiàn)原理基本類似只是這種實現(xiàn)方式可以不再依賴接庫在框架中實現(xiàn)對象持久化操作有很多應(yīng)用在后續(xù)章節(jié)將作進(jìn)一步的介紹。。基于面向?qū)ο笳Z言的擴(kuò)展語言是基于面向?qū)ο笳Z言的擴(kuò)展在語言基礎(chǔ)上增加新的關(guān)鍵字來實現(xiàn)技術(shù)如方面、切入點、前通知、后通知、周圍通知等等提供專用的編譯器來時識別這
些新語法要素在生成字節(jié)碼前編譯器修改需要被切入方法的相關(guān)源代碼從而實現(xiàn)“橫切織入”然后進(jìn)行正常面向?qū)ο笳Z言的編譯生成字節(jié)碼。的優(yōu)點非常突出這種類似預(yù)編譯的靜態(tài)織入方式完全消除了動態(tài)代理機(jī)制對性能的影響。與代理機(jī)制實現(xiàn)相比不僅可以捕獲基于方法的連接點而且還可以捕獲基于類屬性的連接點甚至還可以很好支持基于靜態(tài)方法連接點的捕獲。同時由于新語言要素的加入可以很方便地定義切入點、通知等與思想術(shù)語相對應(yīng)的語言成分利用新的關(guān)鍵字捕獲上下文也變得非常容易、自然可讀性也更好更加靈活地發(fā)揮了思想的功能特性。同時保持著原始語言的編碼風(fēng)格開發(fā)人員很容易就可以運用自如充分將面向方面編程思想應(yīng)用到實際編碼中來。本文認(rèn)為是目前最接近未來純粹的語言已經(jīng)被越來越多的人看作是事實上的標(biāo)準(zhǔn)也得到越來越多技術(shù)的支持例如以上版本已經(jīng)完全集成了。當(dāng)然也有它不足的地方由于靜態(tài)式的織入往往一個橫切關(guān)注點橫切了多個類的方法程序中只要對代碼做一點點修改所有相關(guān)的源文件都需要重新編譯在實際應(yīng)用中也會帶來一些不便。有關(guān)的一些語法特點在本文后續(xù)章節(jié)具體設(shè)計實現(xiàn)中還有進(jìn)一步的介紹。需要說明的是的技術(shù)實現(xiàn)并不是本文的研究的重點但是任何一種新的www.docin.com北京交通大學(xué)碩士學(xué)位論文第二章設(shè)計開發(fā)研究理念在其產(chǎn)生早期技術(shù)實現(xiàn)都非常重要。作為一種新的編程思想理念非
常需要技術(shù)實現(xiàn)的支持好的技術(shù)實現(xiàn)有利于理念的推廣“理論與實踐相結(jié)合”使其在實踐中不斷地發(fā)展和完善。設(shè)計開發(fā)探討與研究基于面向方面需求分析面向方面編程核心思想就是分離核心關(guān)注點與橫切關(guān)注點實現(xiàn)分別專注這兩個方面編程對軟件需求的深入理解是軟件開發(fā)獲得成功的前提條件面向方面的需求分析重點是對用戶所關(guān)注的邏輯功能進(jìn)行分類并分別映射到中的核心關(guān)注點和橫切關(guān)注點。如何將業(yè)務(wù)流程中主要業(yè)務(wù)流程同它的分支流程、非核
心業(yè)務(wù)功能分離開來分別作為核心方面和橫切方面并明確它們之間的橫切關(guān)系。有關(guān)這方面的理論目前正在不斷的發(fā)展和完善之中和合著的—提出了基于用例圖分析和合著的—提出了一種方法進(jìn)行分析與設(shè)計。基于的設(shè)計開發(fā)權(quán)限認(rèn)證、事務(wù)、日志等等已經(jīng)普遍被認(rèn)為是軟件系統(tǒng)中橫切粒度很大的系統(tǒng)級橫切關(guān)注點根據(jù)系統(tǒng)實現(xiàn)的具體業(yè)務(wù)功能往往還
存在各種粒度不一的業(yè)務(wù)級橫切關(guān)注點面向方面需求分析關(guān)鍵就是在需求階段
盡可能地識別出各種關(guān)注點分離系統(tǒng)的橫切方面和核心方面將整個應(yīng)用系統(tǒng)進(jìn)行面向方面的模塊劃分降低整個系統(tǒng)耦合性減少設(shè)計開發(fā)的難度。將原始需求信息比作一束光束那么識別關(guān)注點識別過程可以用三棱鏡法則來形容穿越三棱鏡的光束需求信息經(jīng)過三棱鏡折射關(guān)注點識別照射出來不同顏色的光束關(guān)注點實現(xiàn)基于面向方面的需求分析如下圖所示www.docin.com北京交通大學(xué)碩士學(xué)位論文第二章設(shè)計開發(fā)研究圖關(guān)注點識別三棱鏡法則設(shè)計層次良好的架構(gòu)實現(xiàn)核心業(yè)務(wù)流程分離出去橫切關(guān)注點業(yè)務(wù)邏輯后可以專注核心業(yè)務(wù)流程進(jìn)行架構(gòu)設(shè)計和編碼架構(gòu)設(shè)計的層次性和編碼的規(guī)范性很大程度上影響“橫切織入”的復(fù)雜度。核心關(guān)注點方面業(yè)務(wù)流程仍然是系統(tǒng)設(shè)計的重點在系統(tǒng)中通常采取基于模型一視圖一控制多層架構(gòu)在業(yè)務(wù)層根據(jù)業(yè)務(wù)的復(fù)雜度還可能再分層這種多層的架構(gòu)不僅降低了系統(tǒng)的耦合性和復(fù)雜度而且也非常有利于對不同層的代碼切入不同的橫切關(guān)注點一般來說不同的層都有它不同的“橫切面”如權(quán)限認(rèn)證通常作為控制層的橫切面而事務(wù)處理作為業(yè)務(wù)層的橫切面。傳統(tǒng)的面向?qū)ο笤O(shè)計通常還會增加很多接口來進(jìn)一步解耦層與層之間的關(guān)系、增加系統(tǒng)的靈活性和擴(kuò)展性思想并不依賴接口它提供了新的開發(fā)模式和語言工具使系統(tǒng)設(shè)計和開發(fā)更加靈活同時可以在不改變原有代碼的基礎(chǔ)上增加橫切面利用“橫切”技術(shù)自動將新的功能切入系統(tǒng)中提供一種全新的系統(tǒng)擴(kuò)展方法。因此可以對傳統(tǒng)的接口設(shè)計作一定的簡化力求系統(tǒng)架構(gòu)清晰簡潔。定義切入點切入點定義了供通知切入的一批連接點連接點的數(shù)量決定了橫切粒度每一個連接點都是系統(tǒng)的功能擴(kuò)展點針對某一個橫切關(guān)注點如何準(zhǔn)確的捕捉需要將其切入的所有連接點是定義切入點的關(guān)鍵。中同時支持基于方法和屬性的連接點捕獲通常主要根據(jù)以下幾種方式進(jìn)行捕獲。在中主要是根據(jù)方法和屬性原型定義的特征定位相應(yīng)的方法或者屬性。方法原型名稱格式為“訪問修飾【】返回值類型包名類名方法名形參www.docin.com北京交通大學(xué)碩士學(xué)位論文第二章設(shè)計開發(fā)研究列表”屬性的原型格式“訪問修飾【】類型包名類名屬性名”。通過對它們的匹配捕捉方法的調(diào)用、執(zhí)行和屬性的讀取不同的具可能采用不同的匹配技術(shù)中使用了正則表達(dá)式進(jìn)行匹配而語言中定義了三種專用的通配符’代表了除‘’之外任意字符串‘’代表了任意字符串包括‘’字符‘’代表了該類及其所有的子類Ⅱ中還提供了特殊的關(guān)鍵字來匹配構(gòu)造函數(shù)。面向?qū)ο笾械姆椒ㄓ袃煞N狀態(tài)方法的定義和方法的被調(diào)用根據(jù)這兩種狀態(tài)分別定義了兩種連接點在方法體的首尾進(jìn)行切入編譯器可以直接批量修改被捕獲的方法體代碼該方法一旦執(zhí)行就會自動調(diào)用橫切業(yè)務(wù)邏輯在方法被調(diào)用的時候在調(diào)用處前、后進(jìn)行切入橫切業(yè)務(wù)邏輯編譯器會在被捕獲的調(diào)用處前后加入相應(yīng)橫切代碼。這兩種切入方式都可以攔截被捕獲業(yè)務(wù)方法的執(zhí)行。面向?qū)ο笾袑傩缘牟僮饔袃煞N讀取和賦值根據(jù)這兩種操作也分別的定義了兩種連接點捕獲對屬性的讀取操作捕獲對屬性的賦值操作。方法、屬性被調(diào)用處所在代碼即方法被調(diào)用或者被定義、屬性被讀取或者賦值時所在類名含包名或所在方法名中提供了和兩種關(guān)鍵字分別定義這種匹配。通常和配合使用。中提供關(guān)鍵字和定義調(diào)用流程之間的關(guān)系所謂流程關(guān)系例如方法的方法體中有調(diào)用方法就認(rèn)為執(zhí)行的流程中存在對的調(diào)用不僅類的方法中存在流程關(guān)系方面各個切入點也存在流程關(guān)系。和的區(qū)別在于連接點自身是否處在自己的流程中。利用切入點的流程關(guān)系可以定義當(dāng)同一連接點被不同切入點捕獲時的橫切業(yè)務(wù)邏輯的切入順序還可以控制嵌套切入。將以上各種匹配特征進(jìn)行邏輯組合實現(xiàn)更加靈活的匹配方式語言中利用與、或、非三種邏輯操作符進(jìn)行組合匹配。一個好的編碼規(guī)范對連接點的捕獲很有作用特別是系統(tǒng)架構(gòu)層次的劃分和類www.docin.com北京交通大學(xué)碩士學(xué)位論文第二章設(shè)計、開發(fā)研究所在包的組織及各種包名、類名、方法名的命名方式。組織核心關(guān)注點與橫切關(guān)注點的上下文橫切關(guān)注點與核心關(guān)注點業(yè)務(wù)邏輯在代碼實現(xiàn)形式上完全分離通過“橫切織入”將它們組合在一起實現(xiàn)完整的業(yè)務(wù)流程所以橫切關(guān)注點方面就需要獲得核心關(guān)注點方面上下文才能共同處理流程中的數(shù)據(jù)信息。方法調(diào)用的連接點上下文主要為被調(diào)用方法所在的實例、方法的參數(shù)、方法名和方法返回值等等。通知中實現(xiàn)橫切關(guān)注點業(yè)務(wù)邏輯處理的數(shù)據(jù)都是正對這些上下文信息在中提供了和關(guān)鍵字可以在定義切入點的時候?qū)⒎椒ǖ膶嵗蛥?shù)顯示的暴露給橫切方面在通知實現(xiàn)代碼中還可以獲得函數(shù)返回值另外在通知體中還提供了關(guān)鍵字該關(guān)鍵字的兩個方法和可以分別獲取被調(diào)用方法的名稱和所有實參列表。另外還可以利用模式在橫切方面和核心方面之間傳遞上下文信息。中類實現(xiàn)了模式定義一個變量就可以實現(xiàn)以當(dāng)前線程為關(guān)鍵值保存各自的數(shù)據(jù)信息。在系統(tǒng)中用戶每一次請求提交服務(wù)器端都需要完成一個完整的流程控制層接收請求、調(diào)用業(yè)務(wù)層處理相關(guān)業(yè)務(wù)、業(yè)務(wù)層連接后臺數(shù)據(jù)庫進(jìn)行處理返回處理結(jié)果給控制層、控制層將
處理結(jié)果交予顯示層對用戶作出響應(yīng)。流程之中存在各種連接點需要切入橫切業(yè)
務(wù)邏輯而在用戶的一次會話期間整個完整業(yè)務(wù)流程中不管系統(tǒng)執(zhí)行核心業(yè)務(wù)邏輯還是橫切業(yè)務(wù)邏輯絕大多數(shù)都是在一個線程之中根據(jù)這一特點利用變量就可以很方便在核心方面與橫切方面之間進(jìn)行數(shù)據(jù)傳遞在本文的設(shè)計實現(xiàn)中多處使用了該類型變量在橫切方面中實現(xiàn)上下文的捕獲。www.docin.com北京交通大學(xué)碩士學(xué)位論文第三章系統(tǒng)架構(gòu)設(shè)計與分析第三章系統(tǒng)架構(gòu)設(shè)計與分析系統(tǒng)架構(gòu)設(shè)計原則在基于的系統(tǒng)架構(gòu)設(shè)計中有許多好的原則可供遵循在本文的設(shè)計中同樣遵循著以下一些設(shè)計原則多層架構(gòu)原則。將業(yè)務(wù)與數(shù)據(jù)、現(xiàn)實分離降低系統(tǒng)的耦合性系統(tǒng)通常都采用基于的多層架構(gòu)各層都對其他層隱藏自己的實現(xiàn)細(xì)節(jié)盡可能隔離復(fù)雜性。簡單原則。如果能用的工作完成的工作則選擇較簡單的解決方案。系統(tǒng)分層的過多也會帶來實現(xiàn)的復(fù)雜性一些重量級的組件不加選擇地使用也會增加系統(tǒng)實現(xiàn)難度、減少系統(tǒng)的可維護(hù)性沒有充足的理由就不要使用。模塊化原則。“模塊化是被分解成具有內(nèi)聚性但松散耦合的模塊的系統(tǒng)特性”模塊化對提高系統(tǒng)重用性的具有重要意義可以增強(qiáng)系統(tǒng)的可讀性和可維護(hù)性。在設(shè)計和實現(xiàn)中我們會作很多工作來達(dá)到更好的模塊化。整體架構(gòu)設(shè)計系統(tǒng)越來越多地應(yīng)用于大型商業(yè)領(lǐng)域中業(yè)務(wù)復(fù)雜系統(tǒng)極為龐大人們更加注重追求系統(tǒng)進(jìn)一步解耦、提高系統(tǒng)的可維護(hù)性和可擴(kuò)展性。系統(tǒng)的運行模式一般為基于客戶端向服務(wù)器提交請求由服務(wù)器端負(fù)責(zé)所有業(yè)務(wù)處理、訪問后臺數(shù)據(jù)庫然后對用戶作出響應(yīng)服務(wù)器端集中了幾乎所有的業(yè)務(wù)邏輯客戶端通常只負(fù)責(zé)顯示功能習(xí)慣稱之為瘦客戶端因此系統(tǒng)架構(gòu)設(shè)計集中在服務(wù)器端邏輯設(shè)計。本文基于技術(shù)探討設(shè)計系統(tǒng)的架構(gòu)是針對在企業(yè)應(yīng)用系統(tǒng)的一套完整的技術(shù)規(guī)范圖是標(biāo)準(zhǔn)模型。www.docin.com北京交通大學(xué)碩士學(xué)位論文第三章系統(tǒng)架構(gòu)設(shè)計與分析圖標(biāo)準(zhǔn)模型標(biāo)準(zhǔn)模型規(guī)定使用做為業(yè)務(wù)處理組件充分體現(xiàn)了在并發(fā)、分布式計算上的能力但本身使用過于復(fù)雜用做業(yè)務(wù)處理過于死板定義的標(biāo)準(zhǔn)確實很強(qiáng)大很多子標(biāo)準(zhǔn)制定得非常出色但是同時也很復(fù)雜總
是顯得過于臃腫結(jié)構(gòu)笨拙實用性也較差反倒是非標(biāo)準(zhǔn)的模型比較有影響力這一領(lǐng)域一些開源項目占據(jù)了主流位置。面向?qū)ο蠹夹g(shù)已經(jīng)相當(dāng)成熟而且穩(wěn)定人們在面向?qū)ο缶幊涕_發(fā)實踐中積累了很多寶貴的經(jīng)驗總結(jié)出了大量實用性很強(qiáng)的設(shè)計模式本文基于技術(shù)構(gòu)建的系統(tǒng)遵循的多層結(jié)構(gòu)進(jìn)行架構(gòu)系統(tǒng)如圖所示圖系統(tǒng)多層架構(gòu)其中頁面負(fù)責(zé)客戶端瀏覽器顯示所有來自于客戶端的請求統(tǒng)一交由相應(yīng)的控制器處理收集請求數(shù)據(jù)并調(diào)用業(yè)務(wù)層業(yè)務(wù)操作進(jìn)行相應(yīng)處理然后將處理結(jié)果數(shù)據(jù)通過對象轉(zhuǎn)發(fā)至待顯示的頁面頁面最后在客戶端瀏覽器進(jìn)行顯示以響應(yīng)客戶的請求。其中服務(wù)器端應(yīng)用程序需要通過連接數(shù)據(jù)庫而業(yè)務(wù)層業(yè)務(wù)對象簡記為并不直接訪問數(shù)據(jù)庫而是先由封裝數(shù)據(jù)庫連接在中www.docin.com北京交通大學(xué)碩士學(xué)位論文第三章系統(tǒng)架構(gòu)設(shè)計與分析獲取數(shù)據(jù)庫連接實現(xiàn)讀取數(shù)據(jù)庫的各種基本操作實例讀取數(shù)據(jù)庫時先獲取一個實例通過該實例訪闖后臺數(shù)據(jù)庫。整個架構(gòu)中核心方面流程如圖順序圖所示圈圉圈圖系統(tǒng)核心方面順序圖詳細(xì)設(shè)計分析數(shù)據(jù)層在數(shù)據(jù)層需要解決面向?qū)ο笳Z言訪問關(guān)系型數(shù)據(jù)庫的問題建立映射是有必要的將對象語言訪問關(guān)系型一些復(fù)雜、繁瑣的操作封裝隱藏起來。映射就是建立起“關(guān)系數(shù)據(jù)庫中的表”與“面向?qū)ο笳Z言中的值對象類”之間的對應(yīng)關(guān)系值對象類∞簡記為就是一個普通的類它只有屬性及屬性相應(yīng)的和方法數(shù)據(jù)庫中每一條記錄都映射成一個實例數(shù)據(jù)庫中表的字段通常都對應(yīng)到實例中相應(yīng)的屬性。基于映射思想訪問數(shù)據(jù)庫時將針對記錄的基本操作增加、刪除、修改、查詢映射為針對的相應(yīng)操作傳統(tǒng)的語言使用也會作些改變表名由類名代替、字段名由屬性名代替。在的開源項目中已經(jīng)有很多優(yōu)秀的框架、工具實現(xiàn)了映射其中以框架應(yīng)用最為廣泛很好地實現(xiàn)了映射封裝了數(shù)據(jù)庫連接提供了與類似的語言。可以在等框架基礎(chǔ)上封www.docin.com北京交通大學(xué)碩士學(xué)位論文第三章系統(tǒng)架構(gòu)設(shè)計與分析裝的實現(xiàn)除了封裝基本操作訪問數(shù)據(jù)庫以外還需要提供一些有關(guān)事務(wù)和數(shù)據(jù)庫連接維護(hù)的方法如下手斷是否擁有數(shù)據(jù)庫連接胴矢取數(shù)據(jù)庫連接關(guān)閉數(shù)據(jù)庫連接開啟事務(wù)提交事務(wù)回滾事務(wù)通過的封裝解決面向?qū)ο笳Z言訪問關(guān)系型數(shù)據(jù)庫的問題隱藏了實現(xiàn)細(xì)節(jié)使得業(yè)務(wù)層與后臺數(shù)據(jù)庫迸一步解耦。中的這些基本操作方法供業(yè)務(wù)層實例調(diào)用簡化了業(yè)務(wù)層對數(shù)據(jù)庫的訪問。而在業(yè)務(wù)層集中了所有具體商業(yè)業(yè)務(wù)邏輯實現(xiàn)可以對實例的各屬性值進(jìn)行修改這些修改操作都需要對應(yīng)到中對相應(yīng)數(shù)據(jù)庫記錄的更新操作這一操作稱為對象持久化操作。在中提供了方法由該方法封裝持久化操作邏輯。在業(yè)務(wù)層調(diào)用實例的方法修改實例的屬性值時就需要調(diào)用方法將修改后的值持久化到數(shù)據(jù)庫中傳統(tǒng)的實現(xiàn)代碼示例如下通過∞方法修改產(chǎn)品的名稱脯修改后的信息保存在數(shù)據(jù)庫中很明顯這樣做放任了一個橫切關(guān)注點——對象持久化邏輯分散在程序中多處導(dǎo)致程序員會多次調(diào)用這一操作同時還需要開發(fā)人員自己判斷是否需要進(jìn)行持久化程序中有些實例并不是由數(shù)據(jù)庫記錄映射而來的可能是臨時新建的對象對于這些實例的修改不需要持久化無疑增加了開發(fā)人員的負(fù)擔(dān)。因此關(guān)于對象持久化方面的工作有必要將這一橫切關(guān)注點分離出來用方面封裝它的實現(xiàn)和調(diào)用。業(yè)務(wù)層業(yè)務(wù)層由實例業(yè)務(wù)實例組成在每一個類中實現(xiàn)相關(guān)的一批業(yè)務(wù)操作如前文所分析每一個類訪問數(shù)據(jù)庫都需要獲取一個實例通過www.docin.com北京交通大學(xué)碩士學(xué)位論文第三章系統(tǒng)架構(gòu)設(shè)計與分析實例訪問數(shù)據(jù)庫。基于這一特點可以為所有的類定義一個父類業(yè)務(wù)層類圖如下圖業(yè)務(wù)層類圖中的屬性設(shè)為保護(hù)類型可以被它的子類使用。同時利用中的方法也實現(xiàn)了對實例的一些基本操作的公用方法可以根據(jù)需要直接被控制層調(diào)用。控制層調(diào)用業(yè)務(wù)層中方法執(zhí)行具體的商業(yè)業(yè)務(wù)一個完整商業(yè)務(wù)操作流程步驟通常如下獲取一個實例通過它獲得數(shù)據(jù)庫連接開啟事務(wù)如果該業(yè)務(wù)操作不進(jìn)行寫數(shù)據(jù)庫操作可以不用處理事務(wù)執(zhí)行具體業(yè)務(wù)邏輯捕獲業(yè)務(wù)邏輯執(zhí)行是否有異常決定提交事務(wù)或者回滾事務(wù)絕大多數(shù)異常都不會進(jìn)行錯誤恢復(fù)。關(guān)閉中的數(shù)據(jù)庫連接通常是將數(shù)據(jù)庫連接歸還數(shù)據(jù)庫連接池其中步驟、、、中數(shù)據(jù)庫連接維護(hù)包括事務(wù)處理是核心業(yè)務(wù)流程中的橫切關(guān)注點開發(fā)模式不管將它們放在層還是業(yè)務(wù)層每一個業(yè)務(wù)方法的調(diào)用或者執(zhí)行都需要操作、提交或者回滾事務(wù)、關(guān)閉數(shù)據(jù)庫連接這些代碼片段分布在程序中的各處必然導(dǎo)致代碼重復(fù)、混亂加重開發(fā)負(fù)擔(dān)。究其原因就是思想在處理橫切問題上的局限性本文第四章將設(shè)計實現(xiàn)基于的解決方案。控制層在控制層接收客戶端的請求根據(jù)請求信息調(diào)用業(yè)務(wù)層業(yè)務(wù)操作完成具體業(yè)務(wù)www.docin.com北京交通大學(xué)碩士學(xué)位論文第三章系統(tǒng)架構(gòu)設(shè)計與分析流程然后轉(zhuǎn)發(fā)至頁面響應(yīng)客戶端請求顯示給用戶處理結(jié)果。在控制層主要是控制器的設(shè)計和實現(xiàn)通常一個用戶請求會對應(yīng)一個控制器或者控制器中的一個方法。在標(biāo)準(zhǔn)的技術(shù)中簡稱可以充當(dāng)控制器由的或方法接受用戶的請求并調(diào)用相應(yīng)的業(yè)務(wù)層進(jìn)行處理最后轉(zhuǎn)發(fā)至頁面由于每一個都需要在文件中作一些配置如果每一個用戶請求都定義一個與之對應(yīng)則會加大的配置規(guī)模這在一個大型的企業(yè)應(yīng)用系統(tǒng)中是無法忍受的。因此需要對此該層進(jìn)行細(xì)化重新設(shè)計。在控制層至少做了兩件事地址解析找到對應(yīng)的控制器處理請求控制器調(diào)用后臺業(yè)務(wù)邏輯返回處理結(jié)果。針對這一特點本文設(shè)計如下將控制邏輯抽取出來單獨定義實現(xiàn)控制類控制類中每一個方法都可以對應(yīng)一種用戶請求。由于控制類主要是處理和對用戶可以為所有的控制類定義一個父類在此將它定義為抽象類示例代碼如下卸
∞廒取用戶請求的對象默認(rèn)控制方法定義一個類充當(dāng)所有控制類的派發(fā)器負(fù)責(zé)地址解析通過反射機(jī)制產(chǎn)生控制器類并調(diào)用相應(yīng)控制方法處理客戶端提交的請求對象這樣文件中只需要對該類做配置即可。以下是控制層的順序圖www.docin.com北京交通大學(xué)碩士學(xué)位論文第三章系統(tǒng)架構(gòu)設(shè)計與分析圖控制層順序圖在各個子類中所有的方法也存在一個橫切關(guān)注點用戶的每一個請求到達(dá)類方法在調(diào)用后臺業(yè)務(wù)邏輯之前都需要進(jìn)行權(quán)限認(rèn)證。當(dāng)前很多系統(tǒng)中都利用過濾器來攔截用戶的請求進(jìn)行驗證操作一般來說都能較好地滿足實際應(yīng)用需求但它仍然存在兩個問題效率很低所有的請求都經(jīng)攔截過濾。可讀性較差橫切業(yè)務(wù)仍然與核心業(yè)務(wù)糾結(jié)在一起。把權(quán)限認(rèn)證作為控制器類一個橫切關(guān)注點基于實現(xiàn)可以提供一個更加清晰和高效的架構(gòu)。訪問系統(tǒng)靜態(tài)數(shù)據(jù)一個大型的系統(tǒng)中業(yè)務(wù)操作復(fù)雜業(yè)務(wù)信息讀寫頻繁系統(tǒng)中仍然存在一部分?jǐn)?shù)據(jù)信息是相對靜態(tài)的如業(yè)務(wù)基礎(chǔ)數(shù)據(jù)、國家地區(qū)城市、網(wǎng)站配置菜單、角色權(quán)限等信息這些信息變動很少但是讀取卻非常頻繁對于這一部分?jǐn)?shù)據(jù)進(jìn)行緩存減少對數(shù)據(jù)庫的訪問可以大大提高系統(tǒng)的性能。本文的設(shè)計方案就是在系統(tǒng)中增加一些工具類專門實現(xiàn)讀取這些數(shù)據(jù)工具類中所有的方法都定義為靜態(tài)的以便在頁面控制層中直接通過類名進(jìn)行調(diào)用。在組織這些工具類時由于工具類中的方法仍然是實現(xiàn)一些業(yè)務(wù)操作故將www.docin.com北京交通大學(xué)碩士學(xué)位論文第三章系統(tǒng)架構(gòu)設(shè)計與分析它們和類放在同一個大包路徑下包里建兩個子包和分別存放類和這些工具類。如圖●◆◆∞嘲◆圖靜態(tài)信息業(yè)務(wù)類圖對工具類中所有方法執(zhí)行的返回結(jié)果進(jìn)行緩存就可以實現(xiàn)性能的提高很顯然“緩存”也是一個橫切關(guān)注點如果直接在方法中實現(xiàn)緩存同樣出現(xiàn)代碼重復(fù)增加開發(fā)人員負(fù)擔(dān)。橫切關(guān)注點與層的關(guān)系分析通過以上分析我們確定了有四個橫切關(guān)注點分布在系統(tǒng)之中在系統(tǒng)層次設(shè)計實現(xiàn)中每個層所在的包路徑都不一樣顯示層主要都是一些?文件在項目中通常直接放在程序部署的根目錄下本文為這些文件統(tǒng)一定義包路徑包。控制層主要由一個類分發(fā)器和多個類控制器組成類所在的包路徑定義為。類所在的包路徑定義為控制層中所有的類都放在包下。業(yè)務(wù)層主要有兩種類靜態(tài)業(yè)務(wù)方法所在的工具類的包路徑定義為而其他業(yè)務(wù)對象類的包路徑定義為。前者可以調(diào)用后者系統(tǒng)訪問數(shù)據(jù)庫都需要通過具體的業(yè)務(wù)對象類的方法。數(shù)據(jù)訪問層通過封裝對面向?qū)ο笳Z言對關(guān)系型數(shù)據(jù)庫的訪問隱藏映射的實現(xiàn)同時還需要在層定義各種值對象類供各層使用。圖是系統(tǒng)層和主要包的調(diào)用結(jié)構(gòu)關(guān)系圖其中橫切關(guān)注點如圖中注釋部分所示www.docin.com北京交通大學(xué)碩士學(xué)位論文第三章系統(tǒng)架構(gòu)設(shè)計與分析顯示層自控制層

留數(shù)據(jù)層圖系統(tǒng)各層、包之間調(diào)用關(guān)系圖中注釋部分標(biāo)出了四個橫切關(guān)注點緩存、對象持久化、數(shù)據(jù)庫連接維護(hù)、和權(quán)限認(rèn)證以及它們所需要切入的包。這些橫切關(guān)注點涉及系統(tǒng)中核心業(yè)務(wù)流程的三個層次控制層、業(yè)務(wù)層和數(shù)據(jù)層它們在開發(fā)模式下都解決得不太好。下一章本文將利用語言針對這些橫切關(guān)注點詳細(xì)設(shè)計基于的解決方案實現(xiàn)它們與核心業(yè)務(wù)完全分離。印璺彳邕嬰www.docin.com北京交通大學(xué)碩士學(xué)位論文第四章的應(yīng)用與實現(xiàn)第四章的應(yīng)用與實現(xiàn)本章采用語言著重針對第三章分析的橫切關(guān)注點進(jìn)行詳細(xì)設(shè)計與具體實現(xiàn)對基于思想的設(shè)計開發(fā)做進(jìn)一步的研究。實驗環(huán)境的搭建開發(fā)環(huán)境的搭建本文實驗基本軟件、硬件環(huán)境為操作性統(tǒng)專業(yè)版為內(nèi)存為的的筆記本式計算機(jī)。軟件開發(fā)工具主要都是開源的如下面向?qū)ο笳Z言版本為在的網(wǎng)站可以免費下載獲得它的安裝程序目前最新版本是但企業(yè)實際應(yīng)用中并沒有被廣泛采用大多數(shù)仍然使用的版本。集成開發(fā)編輯工具在的官方網(wǎng)站可以免費下載獲得壓縮包解壓后就可以使用不用安裝。不僅開源免費而且功能非常強(qiáng)大提供了很多代碼輔助、跟蹤調(diào)試、項目管理等實用功能還有各類豐富的插件通過插件的擴(kuò)展的功能將進(jìn)一步增強(qiáng)使用更加方便。服務(wù)器采用的版本是的免安裝版的網(wǎng)站上可以下載獲得。配置非常簡單本文基本采用它的默認(rèn)配置它對硬件性能沒有太高的要求通過的插件可以和組合在一起使用。數(shù)據(jù)庫使用的是免安裝版下載壓縮包后直接解壓運行系統(tǒng)就會在后臺啟動網(wǎng)絡(luò)服務(wù)同時下載最新的驅(qū)動在中通過就可以訪問該數(shù)據(jù)庫。在很多方面較以前版本有了很大的改進(jìn)。開發(fā)環(huán)境的搭建目前雖然沒有純粹的語言卻出現(xiàn)了很多工具和基于面向?qū)ο笳Z言擴(kuò)展的語言其中以基于的擴(kuò)展最為突出在使用上非常符合編碼習(xí)慣語言表達(dá)面向方面編程思想非常自然。利用預(yù)編譯www.docin.com北京交通大學(xué)碩士學(xué)位論文第四章的應(yīng)用與實現(xiàn)實現(xiàn)了代碼的“橫切”織入不管在易用、效率、功能上都很出色已經(jīng)逐漸被更多的人視為的實現(xiàn)標(biāo)準(zhǔn)越來越多的人傾向于用描述的思想可以很好將思想映射成具體的實現(xiàn)編碼。在的開發(fā)環(huán)境下搭建主要以下兩步編譯器的安裝本文實驗中采用的是當(dāng)前最新的版本和合并后歸于基金下的項目。由和酬公司贊助添加了一系列特性以支持它的下載地址是一下載得到一文件在正常環(huán)境下包的默認(rèn)執(zhí)行程序為直接點擊該文件運行安裝安裝完畢后需要設(shè)置兩個環(huán)境變量在中添力Ⅱ在中添加插件的安裝插件需要和版本匹配本實驗中采用的下載的插件壓縮包為下載地址一—。插件的安裝非常簡單解壓包得到兩個文件夾和只要將這兩文件夾下的文件釋放到目錄中對應(yīng)文件夾下即可。安裝好插件后的環(huán)境就可以支持使用語言進(jìn)行開發(fā)了除了原有代碼系列輔助功能還提供很多的輔助功能方便基于進(jìn)行項目開發(fā)。以下的詳細(xì)設(shè)計開發(fā)都是在該環(huán)境下進(jìn)行實驗和測試的。對象持久化?dāng)?shù)據(jù)庫設(shè)計分析及映射第三章已經(jīng)分析對象持久化的操作主要在數(shù)據(jù)層數(shù)據(jù)層封裝面向?qū)ο笳Z言對關(guān)系型數(shù)據(jù)的訪問實現(xiàn)細(xì)節(jié)。以一個論壇系統(tǒng)為例數(shù)據(jù)庫中主要的表結(jié)構(gòu)如下www.docin.com北京交通大學(xué)碩士學(xué)位論文第四章的應(yīng)用與實現(xiàn)圖論壇系統(tǒng)主要的表結(jié)構(gòu)這三張表將分別映射到面向?qū)ο笳Z言中三個值對象類用戶表對應(yīng)類帖子表對應(yīng)類版塊表對應(yīng)類。除了類與表對應(yīng)類中也會有與表中每個字段對應(yīng)的屬性每一個屬性都會有一組方法和方法。通過方法訪問值對象類的屬性值達(dá)到訪問數(shù)據(jù)庫相應(yīng)字段的信息相應(yīng)地對方法調(diào)用修改實例的屬性值時就會對應(yīng)到對數(shù)據(jù)庫信息同步這一對象持久化操作如前文所分析是一個橫切關(guān)注點下面基于思想實現(xiàn)分離該橫切關(guān)注點與它的核心業(yè)務(wù)。橫切關(guān)注點業(yè)務(wù)邏輯設(shè)計分析分離對象持久化橫切關(guān)注點時需要解決以下問題只對從數(shù)據(jù)庫記錄中映射產(chǎn)生的實例進(jìn)行持久化。系統(tǒng)架構(gòu)中的已經(jīng)封裝了面向?qū)ο笳Z言對關(guān)系數(shù)據(jù)庫的訪問所有的實例都是通過中的方法獲取得到因此可以對所有的方法增加一個橫切關(guān)注點記錄所有由映射產(chǎn)生的實例借以判斷程序中實例是否需要實例化。需要確保每一條數(shù)據(jù)庫記錄在用戶的一次會話中只能映射成一個實例因此用戶每次讀取數(shù)據(jù)庫需要檢查讀取的實例以前是否已經(jīng)讀取過如果讀取過則需要對已讀取的數(shù)據(jù)與數(shù)據(jù)庫進(jìn)行同步不需要再次映射產(chǎn)生新的實例只需返回已讀取的實例即可這一操作應(yīng)該在通過連接獲取數(shù)據(jù)集映射實例時進(jìn)行。一個好的映射框架都應(yīng)該實現(xiàn)該功能。www.docin.com北京交通大學(xué)碩士學(xué)位論文第四章的應(yīng)用與實現(xiàn)業(yè)務(wù)層可能會對實例進(jìn)行多個屬性值、多次的修改如果每次修改都更新數(shù)據(jù)庫進(jìn)行持久化使得訪問數(shù)據(jù)過于頻繁而且低效對系統(tǒng)性能會造成較大的損害因此對實例修改的持久化操作應(yīng)該放在事務(wù)提交之前統(tǒng)一進(jìn)行盡量減少對數(shù)據(jù)庫的訪問。綜合考慮上述第點和第點假設(shè)用戶在一次會話中兩次訪問數(shù)據(jù)庫獲取了同一實例如果在第二次訪問數(shù)據(jù)庫前修改了第一次訪問數(shù)據(jù)庫獲取的實例那么第二次訪問數(shù)據(jù)庫將可能獲得臟數(shù)據(jù)而且獲取實例進(jìn)行同步第一次獲取的實例將會覆蓋對實例值的修改。因此持久化操作需要在實例值修改后下一次數(shù)據(jù)庫訪問之前進(jìn)行確保訪問數(shù)據(jù)庫獲得最新的數(shù)據(jù)。通過以上分析持久化操作方面編程需要在業(yè)務(wù)層捕獲兩類連接點調(diào)用類的各種方法訪問數(shù)據(jù)庫。在該連接點處切入的橫切業(yè)務(wù)邏輯持久化已經(jīng)被修改后的實例同時記錄由映射新產(chǎn)生的實例調(diào)用實例的方法。在該連接點處設(shè)置標(biāo)志實例相應(yīng)字段已被修改。另外在業(yè)務(wù)方法執(zhí)行完畢進(jìn)行事務(wù)提交之前也需要檢查是否還有實例需要持久化下面章節(jié)中會討論事務(wù)處理橫切關(guān)注點的實現(xiàn)在事務(wù)處理方面的通知體中加入持久化邏輯即可。數(shù)據(jù)結(jié)構(gòu)設(shè)計通過節(jié)的分析對象持久化業(yè)務(wù)邏輯主要是記錄所有映射產(chǎn)生的實例并同時記錄程序中對這些實例所作的修改在適當(dāng)?shù)臅r候進(jìn)行數(shù)據(jù)持久化操作。設(shè)計以下數(shù)據(jù)結(jié)構(gòu)保存本次會話期間所有相關(guān)實例信息www.docin.com北京交通大學(xué)碩士學(xué)位論文第四章的應(yīng)用與實現(xiàn)圖持久化數(shù)據(jù)結(jié)構(gòu)圖在該數(shù)據(jù)結(jié)構(gòu)中每一種類型的實例對應(yīng)中的一條鍵值對的類對象為鍵值又是一個對象。在值對象中的每一個鍵值對記錄實例及其所有修改過的字段。基于該數(shù)據(jù)結(jié)構(gòu)設(shè)計持久化操作類—如圖◆圖類圖該類中主要定義了一個靜態(tài)變量和三個靜態(tài)的公有方法由于系統(tǒng)都是多用戶并發(fā)訪問對于每一個用戶訪問服務(wù)器都需要保存當(dāng)前線程地持久化信息因此定義變量該變量中存儲的對象即為上文中卵對象。方法。記錄映射產(chǎn)生的實例如果該實例已經(jīng)記錄則進(jìn)行同步并返回該實例。方法。記錄某個實例已經(jīng)被修改持久化操作會根據(jù)該修改情況同步數(shù)據(jù)庫中對應(yīng)的記錄。。如果存在實例有字段被修改拼裝語句進(jìn)行對象持久化操作同時清除實例字段被修改信息。捕獲對類方法的調(diào)用定義切入點捕獲在業(yè)務(wù)層對類方法的調(diào)用在這些被捕獲的連接點處切入橫切業(yè)務(wù)邏輯在方法被調(diào)用前檢查是否有實例需要持久化調(diào)用執(zhí)行完成后同步已有映射產(chǎn)生的實例保證同一次回話中每條記錄對應(yīng)一個www.docin.com北京交通大學(xué)碩士學(xué)位論文第四章的應(yīng)用與實現(xiàn)實例再一次記錄映射產(chǎn)生新的實例由于連接點前后都需要切入橫切業(yè)務(wù)因此定義基于該切入點的周圍通知示例代碼如下定義切入點。’捕獲所有對類方法的調(diào)用。限定在業(yè)務(wù)層定義后通知腩所有已經(jīng)修改過值的實例進(jìn)行持久化同時記錄新映射生成實例該通知流程描述如下圖方面通知流程圖捕獲實例的方法在業(yè)務(wù)層類中捕獲實例的方法切入的橫切邏輯判斷實例www.docin.com北京交通大學(xué)碩士學(xué)位論文第四章的應(yīng)用與實現(xiàn)是否來自數(shù)據(jù)庫記錄映射產(chǎn)生從而決定是否需要進(jìn)行持久化操作。大致實現(xiàn)代碼如下定義后通知即可定義切入點曲?’。捕獲所有實例方法的調(diào)用限定在業(yè)務(wù)層廒取上下文實例定義后通知判斷實例來自數(shù)據(jù)庫記錄的映射決定是否記錄該實例需要持久化中的實現(xiàn)原理本人實際項目開發(fā)中幾乎都采用框架它很好地實現(xiàn)了映射的同時對持久化也做了很多工作較好地滿足了實際應(yīng)用需求因此在項目實施中持久化橫切關(guān)注點并沒有采用本文基于的實現(xiàn)方案。然而從以上分析和本人對代碼各個局部實驗測試來看該方案從映射中分離出持久化相關(guān)橫切關(guān)注點程序結(jié)構(gòu)更加清晰、易于實現(xiàn)、減少了開發(fā)工作量。而框架由于利用類庫為類生成代理類增強(qiáng)了類中的和方法這也是一種基于代理機(jī)制編程思想。是一個強(qiáng)大的、高性能、高質(zhì)量的生成類庫它可以在運行期擴(kuò)展類也可以動態(tài)實現(xiàn)的接口類庫也是開源的項目。利用實現(xiàn)原理與基于中的類的實現(xiàn)非常類似只是它可以不再依賴接口直接利用類生成一個原有類的子類則原有類的每個方法調(diào)用都會調(diào)用接口的】函數(shù)。在函數(shù)里就可以通過執(zhí)行“”來執(zhí)行實例原有的方法或者方法在該語句執(zhí)行前后切入所需要的橫切業(yè)務(wù)邏輯根據(jù)需要甚至可以不執(zhí)行核心業(yè)務(wù)操作都可以。示例代碼如下www.docin.com北京交通大學(xué)碩士學(xué)位論文第四章的應(yīng)用與實現(xiàn)生成的子類被回調(diào)接口的方法。【】”調(diào)用日志方法”
利用類庫實現(xiàn)以上所有的實例都通過該工廠“方法創(chuàng)建獲得則該實例的所有方法體中第一行都會被切入語句”調(diào)用日志方法”同時接口方法的參數(shù)列表也暴露了核心業(yè)務(wù)數(shù)據(jù)信息可以供橫切業(yè)務(wù)捕獲相應(yīng)的上下文。正是利用這一原理動態(tài)生成實例并在其方法和方法中切入了持久化相關(guān)的橫切業(yè)務(wù)邏輯。另外在組織多個實例之間的關(guān)系時為了提高性能還切入了對某些屬性延時加載的功能。數(shù)據(jù)庫連接維護(hù)橫切關(guān)注點分析數(shù)據(jù)庫連接維護(hù)是業(yè)務(wù)層中類的業(yè)務(wù)方法的橫切關(guān)注點業(yè)務(wù)層所有類都繼承基礎(chǔ)類。類定義為抽象類在該類中實現(xiàn)了最基本、最簡單一些業(yè)務(wù)操作如向數(shù)據(jù)庫中添加一個實例、刪除一個實例、通過語句得到列表等這些方法既可以被業(yè)務(wù)層外直接調(diào)用也可以在層類調(diào)用提高系統(tǒng)的靈活性。在的子類中實現(xiàn)一些具體業(yè)務(wù)業(yè)務(wù)層中的類的方法調(diào)用關(guān)系如下www.docin.com北京交通大學(xué)碩士學(xué)位論文第四章的應(yīng)用與實現(xiàn)圖業(yè)務(wù)層類調(diào)用關(guān)系圖圖中利用代表各種不同業(yè)務(wù)類盡可能體現(xiàn)業(yè)務(wù)層的各種調(diào)用關(guān)系將這些調(diào)用關(guān)系分成三類業(yè)務(wù)層對本層外部的調(diào)用類依賴實例訪問數(shù)據(jù)實現(xiàn)商業(yè)業(yè)務(wù)方法業(yè)務(wù)方法中所有數(shù)據(jù)庫讀寫操作都需要借助于中的方法因此需要調(diào)用類中的方法業(yè)務(wù)層被層外部調(diào)用在本文架構(gòu)中只限于控制層和工具類中的方法對它們調(diào)用為了提高業(yè)務(wù)層中方法的代碼重用性業(yè)務(wù)層內(nèi)部必然也會存在相互調(diào)用的關(guān)系。所有的業(yè)務(wù)方法都需要通過數(shù)據(jù)庫連接訪問后臺數(shù)據(jù)庫都需要進(jìn)行數(shù)據(jù)庫連接維護(hù)操作為了提高整個系統(tǒng)的性能應(yīng)該把中的實例設(shè)置為延時加載避免不必要的實例的創(chuàng)建在需要使用它的時候才創(chuàng)建提高數(shù)據(jù)庫連接的利用率。因此創(chuàng)建實例應(yīng)該是在類中對屬性讀取的時刻。www.docin.com北京交通大學(xué)碩士學(xué)位論文第四章的應(yīng)用與實現(xiàn)當(dāng)實例在包內(nèi)互相調(diào)用時需要確保一次業(yè)務(wù)流程的執(zhí)行只能使用同一個實例保證一次完整的業(yè)務(wù)處理中使用同一個數(shù)據(jù)庫連接因此還需要將創(chuàng)建的實例保存起來供當(dāng)前線程公用在創(chuàng)建之前需要判斷當(dāng)前線程是否已有實例從而決定是否需要創(chuàng)建。同時數(shù)據(jù)庫維護(hù)中還包含對事務(wù)的處理事務(wù)處理并不是每個業(yè)務(wù)方法都必須的只有當(dāng)業(yè)務(wù)方法涉及“寫數(shù)據(jù)庫”操作時才涉及事務(wù)需要解決一個問題區(qū)別類的業(yè)務(wù)方法是否需要事務(wù)很多工具由程序開發(fā)人員通過定義文件對每個類業(yè)務(wù)方法作一些事務(wù)配置由程序讀取配置文件決定是否切入事務(wù)。定義文件無疑增加了開發(fā)人員的負(fù)擔(dān)。對于事務(wù)處理的判斷本文給出另外一種設(shè)計方案。分析類對數(shù)據(jù)庫的封裝業(yè)務(wù)層訪問數(shù)據(jù)都需要對通類的方法進(jìn)行類中的方法是很有限的而且比較固定那些需要寫數(shù)據(jù)庫的方法也是比較明確如下列舉的方法通過實例再數(shù)據(jù)庫插入一條記錄。通過實例更新數(shù)據(jù)中一條對應(yīng)的記錄。。通過實例刪除數(shù)據(jù)庫中對應(yīng)的一條記錄。和通過語句前者不帶參數(shù)后者帶參數(shù)寫數(shù)據(jù)庫和通過語句前者不帶參數(shù)后者帶參數(shù)寫數(shù)據(jù)庫一旦捕獲到以上這些方法的調(diào)用開啟事務(wù)并標(biāo)記之再次捕獲時根據(jù)該標(biāo)記可以避免多次開啟事務(wù)。在整個業(yè)務(wù)方法執(zhí)行完畢后根據(jù)標(biāo)志決定是否需要作事務(wù)處理提交或者回滾同時關(guān)閉數(shù)據(jù)庫連接。另外在本章節(jié)討論了基于實現(xiàn)持久化方面的操作在實際應(yīng)用系統(tǒng)都運用了框架已經(jīng)做好了持久化這些寫數(shù)據(jù)庫操作自然也需要事務(wù)如何捕獲這些連接點中隱藏了這些持久化操作的實現(xiàn)無法直接捕獲但是可以捕獲對映射產(chǎn)生的實例的方法的調(diào)用一旦捕獲www.docin.com北京交通大學(xué)碩士學(xué)位論文第四章的應(yīng)用與實現(xiàn)同樣開啟事務(wù)設(shè)置事務(wù)開始標(biāo)志。通過上述的分析有三類連接點需要捕獲在類中捕獲對屬性的讀取切入創(chuàng)建實例邏輯在類中捕獲對需要寫數(shù)據(jù)庫操作的方法的調(diào)用和對映射產(chǎn)生實例的方法的調(diào)用切入開啟事務(wù)邏輯在包外捕獲對類方法的調(diào)用切入捕獲異常決定是否提交事務(wù)或者回滾事務(wù)以及關(guān)閉數(shù)據(jù)庫連接。對這三類連接點及其對應(yīng)的橫切業(yè)務(wù)邏輯分別定義方面進(jìn)行實現(xiàn)。創(chuàng)建實例方面編程創(chuàng)建實例的流程如下圖所示圖創(chuàng)建方面橫切業(yè)務(wù)流程首先需要定義該方面的切入點捕獲所有的連接點在類中捕獲所有對屬性的讀取切入的橫切業(yè)務(wù)邏輯如圖所示需要判斷當(dāng)前線程是否已創(chuàng)建實例而決定是否創(chuàng)建實例。因此一旦創(chuàng)建實例就使用中的變量保存起來在該方面中同時提供靜態(tài)方法獲得該實例并將調(diào)用創(chuàng)建實例的邏輯也封裝在其中。定義方面示例代碼www.docin.com北京交通大學(xué)碩士學(xué)位論文第四章的應(yīng)用與實現(xiàn)如下定義切入點定義前通知直接返回當(dāng)前線程的實例’定義變量保存當(dāng)前線程的實例腹淡取當(dāng)前線程的實例硼從變量中獲取當(dāng)前線程的實例如果當(dāng)前線程沒有創(chuàng)建Ⅱ建實例變量中保存創(chuàng)建雕實例返回當(dāng)前線程創(chuàng)建的實例
分析上述方面的實現(xiàn)代碼可以看到屬性一直都沒有進(jìn)行賦值而且通知也沒有的調(diào)用屏蔽了對核心業(yè)務(wù)中對屬性的讀操作通知體中采用了進(jìn)行代替直接返回當(dāng)前線程創(chuàng)建的實例供核心業(yè)務(wù)訪問數(shù)據(jù)庫所有中的屬性的作用已經(jīng)失去了原有面向?qū)ο笳Z言中屬性的作用在這里它只充當(dāng)了面方面定義切入點時一個供捕獲的特征。但是方面
的切入對于面向?qū)ο髮崿F(xiàn)核心業(yè)務(wù)編程卻完全是透明的開發(fā)人員還是可以按照
原來的面向?qū)ο笳Z言方式實現(xiàn)核心業(yè)務(wù)只是不再受橫切業(yè)務(wù)的干擾。這是面向方面編程一個對面向?qū)ο蟊容^徹底的思想突破。開啟事務(wù)方面編程該方面編程需要捕獲的連接點對需要寫數(shù)據(jù)庫操作方法的調(diào)用和對映射產(chǎn)生實例方法的調(diào)用。前者本文已經(jīng)分析就是中僅幾個有限的方法會進(jìn)行寫數(shù)據(jù)庫操作捕獲這些連接點比較容易利用‘¨’操作組合分別對每個方法的原型特征匹配即可。www.docin.com北京交通大學(xué)碩士學(xué)位論文第四章的應(yīng)用與實現(xiàn)對于捕獲調(diào)用實例方法的連接點由于數(shù)據(jù)層使用了框架判斷實例是否由數(shù)據(jù)庫中記錄映射產(chǎn)生有兩種辦法框架將所有映射產(chǎn)生的實例都緩存在了中并且提供了可供調(diào)用。可以捕獲所有的實例方法的調(diào)用然后判斷該實例是否在中從而決定是否需要事務(wù)。另外也利用庫增強(qiáng)了實例的和方法其實映射產(chǎn)生的實例都是類子類的實例這些子類都實現(xiàn)了一個接口。通過對捕獲這個接口的子類可以過濾掉其他的實例。本文選擇第種方式捕獲這些連接點。另外橫切業(yè)務(wù)一開啟事務(wù)在連接點處核心業(yè)務(wù)之前執(zhí)行通知類型為前通知定義方面示例代碼如下定現(xiàn)入點定義切入點’’。’’捕獲類有寫數(shù)據(jù)庫操作方法的調(diào)用’?‘一捕獲映射產(chǎn)生的實例方法的調(diào)用定義前通知膳《取當(dāng)前線程的實例通過實例開啟事務(wù)’第三章節(jié)已經(jīng)討論了在類中實現(xiàn)有關(guān)事務(wù)處理的方法其中方法封裝開啟具體實現(xiàn)細(xì)節(jié)確保一個數(shù)據(jù)庫連接中同一時刻只能開啟一個事務(wù)。www.docin.com北京交通大學(xué)碩士學(xué)位論文第四章的應(yīng)用與實現(xiàn)關(guān)閉數(shù)據(jù)庫連接、結(jié)束事務(wù)方面編程本文設(shè)計的方案中關(guān)閉數(shù)據(jù)庫連接、回滾事務(wù)、提交事務(wù)的橫切業(yè)務(wù)邏輯都在中定義如下靜態(tài)方法封裝對其的調(diào)用進(jìn)行實現(xiàn)關(guān)閉數(shù)據(jù)庫連接朦取當(dāng)前線程的實例朕閉數(shù)據(jù)庫連接提交事務(wù)代碼省略回滾事務(wù)代碼省略后面兩個方法省去了具體實現(xiàn)這些方法供方面的通知體調(diào)用切入核心業(yè)務(wù)中。該方面需要捕獲的連接點從包外對中的方法的調(diào)用由于所有的類都是在包下對業(yè)務(wù)方法捕獲將很容易如示例代碼。由于包含事務(wù)處理需要對業(yè)務(wù)方法進(jìn)行異常捕獲從而決定是提交事務(wù)還是回滾事務(wù)因此定義周圍通知。定義方面示例代碼如下定義切入點’。匹配包下所有類公有方法的調(diào)用一’限定在包外的連接點定義周圍通知肌同用核心業(yè)務(wù)方法類的業(yè)務(wù)方法腱交事務(wù)回滾事務(wù)關(guān)閉數(shù)據(jù)庫連接’www.docin.com北京交通大學(xué)碩士學(xué)位論文第四章的應(yīng)用與實現(xiàn)對與關(guān)閉數(shù)據(jù)庫連接的切入點考慮到控制層在一次用戶請求中可能需要調(diào)用多個業(yè)務(wù)層的業(yè)務(wù)方法在有些項目中會推遲一些可能在出控制層時才關(guān)閉數(shù)據(jù)庫連接避免實例頻繁地創(chuàng)建和銷毀。由于采用面向方面編程這個修改將變得非常容易直接修改該方面就可以實現(xiàn)而不用對核心業(yè)務(wù)代碼做任何修改充分體現(xiàn)了面向方面編程分離橫切關(guān)注點的優(yōu)勢。緩存橫切關(guān)注點切入點分析在包內(nèi)定義工具類實現(xiàn)讀取系統(tǒng)中相對靜態(tài)的信息由于這些信息讀取比較頻繁對這些信息進(jìn)行緩存可以減少數(shù)據(jù)庫訪問次數(shù)提高系統(tǒng)性能。因此緩存是這個包內(nèi)所有公有方法的一個重要橫切關(guān)注點。緩存的切入點所要捕獲的連接點就是包內(nèi)所有公有方法的執(zhí)行在該連接點處將方法執(zhí)行結(jié)果緩存起來當(dāng)下一次發(fā)生同樣的調(diào)用時可以直接返回緩存結(jié)果。在前面設(shè)計實現(xiàn)中都是使用捕獲對特定方法調(diào)用連接點這些方法主要集中在業(yè)務(wù)層和數(shù)據(jù)層如圖所示業(yè)務(wù)層和數(shù)據(jù)層的方法與頁面顯示層不存在直接的調(diào)用關(guān)系而頁面可以直接調(diào)用工具類方法如果仍然使用進(jìn)行捕捉他們的調(diào)用將會失敗當(dāng)前服務(wù)器如、都是對即時編譯它們直接使用標(biāo)準(zhǔn)的編譯器編譯頁面生成的字節(jié)碼的類文件。因此的編譯器對頁面中的連接點不再起作用需要使用另一關(guān)鍵字捕獲工具類方法體中的連接點。同時工具類的方法中會存在內(nèi)部互相調(diào)用的情況需要解決嵌套緩存的問題以此提高緩存效率。中關(guān)鍵字可以實現(xiàn)對循環(huán)切入的控制見節(jié)具體實現(xiàn)。緩存主鍵上下文分析如何判斷是否同樣的一次調(diào)用從而可以利用上一次調(diào)用時緩存的結(jié)果關(guān)鍵是需要獲取連接點處的上下文以上下文為主鍵進(jìn)行緩存被調(diào)用方法的執(zhí)行結(jié)果就可以根據(jù)該緩存進(jìn)行判斷是否有被緩存過的執(zhí)行結(jié)果可直接被重用。工具類的公有方法都是定義靜態(tài)的因此該上下文主要有方法名含包名和類名、實參列表。在通知中提供的關(guān)鍵字中有兩個方法www.docin.com北京交通大學(xué)碩士學(xué)位論文第四章的應(yīng)用與實現(xiàn)暑分別可以獲得這些上下文。以方法名和實參列表為主鍵在緩存中存儲這些公用靜態(tài)方法的執(zhí)行結(jié)果緩存數(shù)據(jù)結(jié)構(gòu)設(shè)計如下圖所示圖緩存數(shù)據(jù)結(jié)構(gòu)圖緩存由一個實例充當(dāng)它的鍵值分別是方法名和一個實例亥實例存放的鍵值對是實參的特征值與被調(diào)用方法的執(zhí)行結(jié)果。實參的特征值通過遞歸組合每一個實參的哈希碼計算得到這種算法與重載類時的方法的算法類似。具體算法如下’www.docin.com北京交通大學(xué)碩士學(xué)位論文第四章的應(yīng)用與實現(xiàn)否圖組合算法基于這種數(shù)據(jù)結(jié)構(gòu)設(shè)計的緩存同時也需要提供一些取值和設(shè)值的操作定義類封裝緩存數(shù)據(jù)及其相應(yīng)的操作緩存類中提供的方法主要有獲取緩存數(shù)據(jù)判斷是否已緩存和緩存調(diào)用結(jié)果。類圖如下www.docin.com北京交通大學(xué)碩士學(xué)位論文第四章的應(yīng)用與實現(xiàn)越塒定義埋存∞醴印◆氓往哈根據(jù)方法名和安’列衰獲取援存中的教撼’№硪鰣刪膪喇叼啪四∥根據(jù)方法名和參斂列衰爿斷是否已作垤存嘲報撼方法名和參數(shù)列衰援存調(diào)用結(jié)摹脯窯埋存圖類緩存方面實現(xiàn)以上分析了方面實現(xiàn)的的切入點和上下文以及緩存數(shù)據(jù)結(jié)構(gòu)設(shè)計實現(xiàn)緩存方面的代碼如下定義切入點’塒’’定義周匿通知利用關(guān)鍵字防止嵌套緩存。蕨取上下文方法名。場【】威取上下文實參列表∥從緩存中獲取數(shù)據(jù)腳果已經(jīng)緩存直接返回緩存的結(jié)果月用核心方面工具類方法將運行結(jié)果存入緩存區(qū)回運行結(jié)果該方面在程序上實現(xiàn)了緩存邏輯與工具類中的一些具體業(yè)務(wù)邏輯編碼完全分離程序編譯之后將會向包內(nèi)所有工具類的方法織入緩存邏輯。緩存的信息是相對靜態(tài)的也會有修改的時候因此需要考慮數(shù)據(jù)同步的問題由于這些信息通常都是由系統(tǒng)的管理員進(jìn)行維護(hù)本文在設(shè)計緩存類的時候提供了方法可以供管理員從前臺發(fā)送請求調(diào)用清空所有的緩存保www.docin.com北京交通大學(xué)碩士學(xué)位論文第四章的應(yīng)用與實現(xiàn)證數(shù)據(jù)同步。這種做法在實際項目實施中取得了較好的效果。緩存設(shè)計實現(xiàn)還有很多工作需要做清空所有緩存實現(xiàn)數(shù)據(jù)同步并不是很理想應(yīng)該由程序自動判斷緩存中不同步的數(shù)據(jù)只清空這部分緩存即可另外還應(yīng)該對緩存內(nèi)容的使用情況進(jìn)行監(jiān)視設(shè)定合適時間內(nèi)如果緩存內(nèi)容沒有被再次使用就可以清除該部分緩存以節(jié)省存儲空間。本文在此不做進(jìn)一步分析了。權(quán)限認(rèn)證控制層的權(quán)限認(rèn)證采用基于角色的訪問控制方法它是目前公認(rèn)解決大型企業(yè)的統(tǒng)一資源訪問控制的有效方法。其顯著的兩大特征是減小授權(quán)管理的復(fù)雜性降低管理開銷。靈活地支持企業(yè)的安全策略并針對企業(yè)的變化有很大的伸縮性。數(shù)據(jù)庫結(jié)構(gòu)設(shè)計權(quán)限認(rèn)證主要有三張表用戶表、角色表、資源表。用戶表記錄系統(tǒng)中所有用戶基本信息主要字段為用戶、用戶名、密碼等。資源表記錄控制層所有控制方法信息每一條記錄對應(yīng)類中的一個控制方法主要字段資源、資源名稱等角色表根據(jù)不同用戶類型定義各種角色主要字段角色角色名稱等。每一個用戶可以對應(yīng)多個角色一個角色可以擁有多個資源權(quán)限用戶與資源不發(fā)生直接關(guān)系通過角色關(guān)聯(lián)自己可以訪問的資源用戶表與角色表、角色表與資源表都是多對多的關(guān)系關(guān)系圖如下www.docin.com北京交通大學(xué)碩士學(xué)位論文第四章的應(yīng)用與實現(xiàn)圖基于角色權(quán)限設(shè)計表關(guān)系圖基于角色權(quán)限設(shè)計方案根據(jù)實際需要還可以加入群表該表的記錄可以與實際應(yīng)用系統(tǒng)中用戶所在的部門組織相對應(yīng)可以實現(xiàn)批量為用戶分配角色。權(quán)限控制邏輯詳細(xì)實現(xiàn)不是本文的重點本節(jié)旨在實現(xiàn)如何運用模式分離具體業(yè)務(wù)邏輯和權(quán)限控制邏輯。權(quán)限上下文分析客戶端請求提交給控制層在控制方法體中處理請求、調(diào)用具體業(yè)務(wù)邏輯之前都需要進(jìn)行權(quán)限認(rèn)證前文已經(jīng)分析了權(quán)限認(rèn)證邏輯實現(xiàn)通過模式分離出來單獨實現(xiàn)需要在切入控制方法體時獲取控制方法信息使其對應(yīng)到資源表中的某一條記錄本文設(shè)計的方案就是通過的關(guān)鍵字獲取控制方法的全稱包名類名方法名控制方法都是不帶參數(shù)的而資源表的資源字段直接取值為方法的全稱。具體實現(xiàn)權(quán)限部分?jǐn)?shù)據(jù)信息相對于具體的業(yè)務(wù)數(shù)據(jù)信息來說是相對較為靜態(tài)的在節(jié)設(shè)計的類增加方法調(diào)用層的業(yè)務(wù)方法∥判斷某個角色是否具備訪問該控制方法的權(quán)限在節(jié)中我們已經(jīng)實現(xiàn)了為所有類中的方法切入了緩存業(yè)務(wù)邏www.docin.com北京交通大學(xué)碩士學(xué)位論文第四章的應(yīng)用與實現(xiàn)輯這樣可以減少權(quán)限認(rèn)證邏輯對數(shù)據(jù)庫的訪問。在用戶登陸系統(tǒng)之后中保存用戶所擁有的角色用戶從客戶端提交請求到中的方法切入權(quán)限認(rèn)證邏輯實現(xiàn)代碼如下定義切入點捕獲所有地控制方法胴浹取上下文空制類中方法的全稱從中獲得用戶的角色信息調(diào)用。進(jìn)行權(quán)限認(rèn)證
一旦權(quán)限認(rèn)證不通過核心業(yè)務(wù)就會被橫切方面攔截拋出異常轉(zhuǎn)向登陸的頁面。www.docin.com北京交通大學(xué)碩士學(xué)位論文第五章基于模式的系統(tǒng)特點分析第五章基于模式的系統(tǒng)特點分析在第三章本文給出了一種系統(tǒng)多層架構(gòu)設(shè)計分析了各層需要切入的橫切關(guān)注點第四章針對這些橫切關(guān)注點已經(jīng)設(shè)計實現(xiàn)了基于的解決方案。基于這種模式的系統(tǒng)與傳統(tǒng)的純模式的系統(tǒng)相比有了很大的改進(jìn)采用純模式設(shè)計的系統(tǒng)各個橫切面業(yè)務(wù)邏輯與核心業(yè)務(wù)邏輯都糾結(jié)在一起相同代碼片段分散在程序中多處。以業(yè)務(wù)層流程順序為例如圖圖面向?qū)ο蟮臉I(yè)務(wù)層順序圖從圖中可以看出業(yè)務(wù)層類的方法除了實現(xiàn)核心業(yè)務(wù)邏輯以外還需要顯式地包含對輔助業(yè)務(wù)數(shù)據(jù)庫連接、事務(wù)處理等相關(guān)代碼的調(diào)用這種純的實現(xiàn)模式使得業(yè)務(wù)方法越多將會導(dǎo)致類似代碼片段越多的分散。而基于本文
面向方面的設(shè)計實現(xiàn)方案完全分離出了橫切方面單獨實現(xiàn)橫切業(yè)務(wù)邏輯利用橫切機(jī)制對所有的業(yè)務(wù)方法統(tǒng)一切入橫切方面業(yè)務(wù)邏輯自動組合實現(xiàn)完整的業(yè)務(wù)流程。橫切業(yè)務(wù)核心業(yè)務(wù)完全處在兩個不同的方向上實現(xiàn)了徹底的解耦避免代碼糾結(jié)。基于模式設(shè)計的本文方案業(yè)務(wù)層流程如圖所示www.docin.com北京交通大學(xué)碩士學(xué)位論文第五章基于模式的系統(tǒng)特點分析翌罌』庫連接、’翌罌庫連接心業(yè)務(wù)方法圖面向方面的業(yè)務(wù)層順序圖圖和圖的對比來看較從一個更高的思想層次構(gòu)建系統(tǒng)模式實現(xiàn)更加自然、簡單更易于理解。的優(yōu)勢總的來說基于模式的系統(tǒng)相比傳統(tǒng)的模式優(yōu)越性主要體現(xiàn)在以下幾個方面耦合性將系統(tǒng)分為兩個方面核心關(guān)注點和橫切關(guān)注點從一個更高的層次對系統(tǒng)做了分解實現(xiàn)了核心業(yè)務(wù)與橫切業(yè)務(wù)的完全解耦將類中實現(xiàn)細(xì)節(jié)的共同部
分抽離出來封裝在方面中單獨進(jìn)行實現(xiàn)具備更好的模塊化。以數(shù)據(jù)庫連接維
護(hù)方面實現(xiàn)為例在業(yè)務(wù)層與控制層完全不再關(guān)心數(shù)據(jù)連接的獲取和關(guān)閉在方面的通知中定義了數(shù)據(jù)連接獲取和關(guān)閉與核一業(yè)務(wù)執(zhí)行的切入關(guān)系實現(xiàn)了任何時候在控制層中調(diào)有模型層業(yè)務(wù)方法都會自動切入數(shù)據(jù)庫連接維護(hù)相關(guān)操作但是在編碼實現(xiàn)上又是完全分離在方面中不僅封裝了橫切業(yè)務(wù)邏輯的www.docin.com北京交通大學(xué)碩士學(xué)位論文第五章基于模式的系統(tǒng)特點分析實現(xiàn)而且也封裝了核心業(yè)務(wù)邏輯對橫切業(yè)務(wù)邏輯的調(diào)用使兩者的耦合性大大降低。在本文的設(shè)計方案中雖然利用加入了各種實現(xiàn)橫切關(guān)注點的代碼但仍然保持核心業(yè)務(wù)多層架構(gòu)特點橫切關(guān)注點方面的實現(xiàn)對于核心關(guān)注點方面完全透明整個系統(tǒng)實現(xiàn)了更高層次的解耦。可讀性分離出橫切方面的業(yè)務(wù)邏輯之后使程序開發(fā)人員可以專注核心業(yè)務(wù)編程不再受橫切業(yè)務(wù)方面的干擾不僅減輕了開發(fā)負(fù)擔(dān)還可以編寫更加簡潔的核心業(yè)務(wù)代碼具備更好可讀性。以事務(wù)處理為例傳統(tǒng)的實現(xiàn)都需要程序員對自己開發(fā)每一個業(yè)務(wù)模塊進(jìn)行操作決定是否事務(wù)回滾或事務(wù)提交操作增加了程序開發(fā)人員的負(fù)擔(dān)同時大量的非核心業(yè)務(wù)代碼影響了人們對程序的閱
讀和理解。而一旦將這些放在方面中實現(xiàn)核心業(yè)務(wù)模塊化大大加強(qiáng)核心方面業(yè)務(wù)代碼將不再與非核心業(yè)務(wù)代碼糾結(jié)在一起實現(xiàn)起來更加容易清晰。可擴(kuò)展性可擴(kuò)展性是思想一個最大的特色它為系統(tǒng)提供了一個新的擴(kuò)展機(jī)制可以非常容易地在不修改已有代碼的基礎(chǔ)上實現(xiàn)系統(tǒng)功能的擴(kuò)展。方面可以在程序任何連接點處注入需要擴(kuò)展的功能邏輯只需要增加有關(guān)方面代碼的實現(xiàn)即可這樣可以推遲很多傳統(tǒng)設(shè)計上的決定。在此以性能監(jiān)控功能為例在一個系統(tǒng)部署運行初期通常都需要監(jiān)控各個業(yè)務(wù)方法的執(zhí)行性能情況傳統(tǒng)的實現(xiàn)方式可能
需要在各個業(yè)務(wù)方法前后手動插入一些代碼目的達(dá)到之后為了避免對性能的影響?yīng)S中枰謩觿h除這樣的做法對于一個大型系統(tǒng)是難以忍受的。但是利用就非常容易實現(xiàn)該功能的插拔定義以下方面即可定義周圍通知””www.docin.com北京交通大學(xué)碩士學(xué)位論文第五章基于模式的系統(tǒng)特點分析在該方面的定義中重用了在關(guān)閉數(shù)據(jù)庫連接方面定義的切入點捕獲所有業(yè)務(wù)方的代用執(zhí)行在其前后切入性能監(jiān)控相關(guān)代碼。整個實現(xiàn)非常簡單。就像是在原有系統(tǒng)中只增加一個新類而已而且不用對原有代碼作任何修改。系統(tǒng)中很多需要擴(kuò)展的功能都可以通過這種方式實現(xiàn)。良好的可擴(kuò)展性同時也具備良好的可維護(hù)性面向方面編程將所有的橫切關(guān)注點集中實現(xiàn)和調(diào)用更加方便對橫切業(yè)務(wù)的維護(hù)。基于模式系統(tǒng)設(shè)計開發(fā)的不足作為一種新的編程思想模式在進(jìn)行系統(tǒng)設(shè)計開發(fā)的時候也存在一些不足的地方本文設(shè)計方案采用語言在環(huán)境下進(jìn)行實驗不足之處主要體現(xiàn)在以下幾個方面的開源社區(qū)已經(jīng)提供的插件在可視化設(shè)計和代碼輔助上做了很大的支持但是仍然存在不足特別是可視化在準(zhǔn)確性和可用性上有些欠缺。另外缺乏對橫切業(yè)務(wù)實現(xiàn)代碼跟蹤調(diào)試的支持。當(dāng)前各種主流的服務(wù)器缺乏對支持。利用語言在開發(fā)環(huán)境下編譯后的字節(jié)代碼在現(xiàn)有的服務(wù)器運行可以不需要專有編譯器支持但在系統(tǒng)中所有頁面都是利用標(biāo)準(zhǔn)的編譯器即時編譯要想捕獲頁面上的連接點就無法實現(xiàn)因此存在一定的局限性。基于面向?qū)ο笳Z言擴(kuò)展的實現(xiàn)原理編譯器在源程序編譯生成字節(jié)碼之前會對源程序作一些橫切織入修改因此對方面織入的做任何修改相關(guān)涉及的類都需要重新編譯對系統(tǒng)部署造成一些麻煩。對編碼風(fēng)格和編碼習(xí)慣的限制在編程中很重要的一點是如何定義切入點精確捕獲所有連接點為了使定義切入點更加容易要求面向?qū)ο缶幊叹邆浣y(tǒng)一編程風(fēng)格甚至需要強(qiáng)制些良好編程習(xí)慣如本文設(shè)計方案中對各層代碼所在的包路徑都做了嚴(yán)格的限制這樣才容易根據(jù)包路徑的特征在不同的層中切入不同的橫切業(yè)務(wù)。定義切入點的時候大多數(shù)都需要根據(jù)對方法名的特征匹配從而捕獲連接點因此對系統(tǒng)的代碼包的組織結(jié)構(gòu)和調(diào)用關(guān)系都提出了強(qiáng)制性的要求例如在頁面www.docin.com北京交通大學(xué)碩士學(xué)位論文第五章基于模式的系統(tǒng)特點分析中就不能直接調(diào)用業(yè)務(wù)層的類的方法否則由于頁面中沒有切入一些必要的橫切業(yè)務(wù)數(shù)據(jù)庫連接不會主動關(guān)閉事務(wù)結(jié)束也得不到處理從而導(dǎo)致出錯強(qiáng)制要求類的業(yè)務(wù)方法只能在控制層等地方被調(diào)用程序才能正確執(zhí)行。另外并不支持對利用反射機(jī)制進(jìn)行方法調(diào)用的捕獲因此試圖利用反射機(jī)制調(diào)用類的業(yè)務(wù)方法也會導(dǎo)致同樣的錯誤。相對于面向?qū)ο缶幊酞ッ嫦蚍矫婢幊痰拇_帶來了更多的代碼編寫限制但是這種限制也有利于幫助我們開發(fā)出程序結(jié)構(gòu)、代碼風(fēng)格更加良好的系統(tǒng)正如的作者所言方面可以用于維護(hù)一個類的幾個方法之間的內(nèi)在一致性它非常適合強(qiáng)制一種按契約進(jìn)行設(shè)計的編程風(fēng)格可以用于強(qiáng)制各種常見的編碼習(xí)慣。作為一種基于語言的擴(kuò)展語言雖然存在著一些固有的缺點但是總的來說目前它還是功能最強(qiáng)大、使用最方便的具。面向方面編程最佳實踐語言作為當(dāng)前語言事實上的規(guī)范使用靈活功能強(qiáng)大更方便體現(xiàn)面向方面編程思想使面向方面編程更加自然。結(jié)合本文的實驗體會提出以下最佳實踐條款盡可能為一些具有相同性質(zhì)的類定義簡單的父類父類最好定義為抽象類或者接口這樣可以非常方便根據(jù)父類對這些類中的連接點捕獲。如本文設(shè)計方案中對所有的業(yè)務(wù)對象類定義了父類。讓業(yè)務(wù)層與控制層、數(shù)據(jù)層徹底分離保持單向的調(diào)用關(guān)系防止各層之間出現(xiàn)循環(huán)調(diào)用關(guān)系。例如一分開。各層都對其他層隱藏本層的具體實現(xiàn)。禁止在和中實現(xiàn)業(yè)務(wù)邏輯。可以使用模式來降低代碼的耦合度在橫切關(guān)注點與核心關(guān)注點之間傳遞上下文因為絕大多數(shù)用戶的一次請求都是在同一個線程中完成盡可能在程序開發(fā)中嚴(yán)格遵循這一點否則需要作特殊處理造成一些麻煩。不要試圖用關(guān)鍵字捕獲頁面中對方法進(jìn)行調(diào)用的連接點當(dāng)前的服務(wù)器尚不支持只會導(dǎo)致失敗。變通的方法可以采用關(guān)鍵字切入被調(diào)用方法體內(nèi)部捕獲方法的執(zhí)行。頁面中減少對后臺業(yè)務(wù)方法的直接調(diào)用盡可能的從對象中獲www.docin.com北京交通大學(xué)碩士學(xué)位論文第五章基于模式的系統(tǒng)特點分析取數(shù)據(jù)。在本文設(shè)計方案中強(qiáng)制禁止頁面直接調(diào)用類的方法但可以調(diào)用業(yè)務(wù)層中工具類方法。各種標(biāo)志符的命名遵循一些約定俗成的習(xí)慣包括方法名、包名、類名、屬性名等命名。這樣方便于利用專有的通配符根據(jù)這些命名特征進(jìn)行匹配從而更加容易捕獲連接點。例如所有的實例的方法都以“”為前綴這樣就可以很容易定義切入點切入對象持久化方面的橫切業(yè)務(wù)。www.docin.com北京交通大學(xué)碩士學(xué)位論文結(jié)論結(jié)論總結(jié)本文對設(shè)計與開發(fā)做了積極地探索和研究。介紹了的主要概念橫切面、切入點、方面等探討了有關(guān)技術(shù)實現(xiàn)原理和設(shè)計開發(fā)理論結(jié)合系統(tǒng)的特點設(shè)計了一種基于的系統(tǒng)的架構(gòu)重點研究了在系統(tǒng)中的應(yīng)用針對系統(tǒng)具有共性的橫切關(guān)注點對象持久化、數(shù)據(jù)庫連接維護(hù)、緩存和權(quán)限認(rèn)證設(shè)計實現(xiàn)了基于的解決方案。從中我們可以看出相比傳統(tǒng)面向?qū)ο缶幊棠J降膬?yōu)越性主要體現(xiàn)在以下三方面減少核心關(guān)注點業(yè)務(wù)開發(fā)人員的負(fù)擔(dān)使他們可以專注商業(yè)業(yè)務(wù)邏輯的開發(fā)提高開發(fā)效率。同時有助于團(tuán)隊成員之間分工協(xié)作由于核心關(guān)注點和橫切關(guān)注點的徹底分離團(tuán)隊成員可以分別專注于這兩方面開發(fā)互相影響大大減小有效發(fā)揮團(tuán)隊力量。有效解決了模式下面臨“橫切”問題時的代碼混亂使系統(tǒng)進(jìn)一步解耦增強(qiáng)了系統(tǒng)的可讀性、可維護(hù)性和可擴(kuò)展性利用可以在不修改系統(tǒng)核心方面代碼的基礎(chǔ)上只需增加“橫切面”就可以很容易實現(xiàn)系統(tǒng)功能的擴(kuò)展。不僅很好的解決系統(tǒng)中已有橫切關(guān)注點與核心關(guān)注點的分離也為以后系統(tǒng)增加新的橫切關(guān)注點擴(kuò)展新的功能提供了更大空間同時對已實現(xiàn)橫切功能維護(hù)變得非常獨立。從單一的層次方向構(gòu)建系統(tǒng)而增加了橫切面方向從一個更高的層次構(gòu)建系統(tǒng)更自然地將系統(tǒng)需求分析映射到編程模式更加方便人們對系統(tǒng)的設(shè)計、開發(fā)和理解。進(jìn)一步工作作為一種新的編程模式仍然處在不斷發(fā)展和完善之中當(dāng)前設(shè)計、開發(fā)、測試?yán)碚撊匀幌喈?dāng)缺乏在業(yè)界缺乏統(tǒng)一的規(guī)范甚至還存在對它的種種爭論在實際應(yīng)用中尚未出現(xiàn)真正的語言。在一個新的編程思想沒有成熟之
前將更加吸引著人們對這些問題的探討和研究。在理論和實踐應(yīng)用方面都www.docin.com北京交通大學(xué)碩士學(xué)位論文結(jié)論有待進(jìn)一步的探討研究實踐應(yīng)用中加強(qiáng)在具體商業(yè)業(yè)務(wù)領(lǐng)域的運用目前大多數(shù)的應(yīng)用仍然局限于解決一些系統(tǒng)級橫切關(guān)注點問題需要擴(kuò)大的應(yīng)用領(lǐng)域在應(yīng)用中不斷總結(jié)經(jīng)驗發(fā)現(xiàn)的規(guī)律充實相關(guān)開發(fā)理論。目前不管是基于動態(tài)代理機(jī)制實現(xiàn)的框架還是基于面向?qū)ο笳Z言的擴(kuò)展都不同程度上存在著一些不足期待著更好的語言。同時思想的實際運用也需要更好的集成開發(fā)工具支持加強(qiáng)代碼輔助、可視化、跟蹤調(diào)試等功能。分析設(shè)計相關(guān)理論需要不斷發(fā)展基于的需求分析和系統(tǒng)設(shè)計的理論方法都非常欠缺對相關(guān)概念和思想很多在業(yè)界仍未形成共識。最后引用的話結(jié)束本文“方面仍然呆在這里。它們?nèi)匀粵]有成為主流應(yīng)用程序一部分的一個方法但它們每一天都變得更加接近”。www.docin.com北京交通大學(xué)碩士學(xué)位論文參考文獻(xiàn)參考文獻(xiàn)【】陶剛編譯‘體驗中面向方面編程》時卻年月【】著∞【】年月【】陳景燕陽國貴著下的權(quán)限控制實現(xiàn)》時】年月【】著技術(shù)簡介》】年月【著馮博琴等譯‘面向?qū)ο蠓治雠c設(shè)計》【】北京機(jī)械工業(yè)出版社年月【】張海潘編著‘軟件工程導(dǎo)論》【】北京清華大學(xué)出版社年月【】∞【】年月【】下的編寫?yīng)血椽丢蕺豹洫莸膽?yīng)用》【【‘用動態(tài)代理實現(xiàn)【】【著精通構(gòu)建與部署應(yīng)用的最佳策略》瞰】北京電子工業(yè)出版社【著潘愛民譯口哪北京機(jī)械工業(yè)出版社年月【】古全友王恩波胥昌勝技術(shù)在系統(tǒng)構(gòu)建中的應(yīng)用》【】計算機(jī)技術(shù)與發(fā)展第卷第期年月【】著個最重要的最佳實踐》【】年月【孫衛(wèi)琴編著《精通對象持久化技術(shù)詳解》川電子工業(yè)出版社年月【格雷德斯基著‘精通【】清華大學(xué)出版社年月【著龔波馮軍程群梅等譯設(shè)計模式手冊》【】機(jī)械工業(yè)出版社年月【李清華著‘基于的系統(tǒng)實現(xiàn)研究》武漢大學(xué)碩士學(xué)位論文年月【】范武蘇一‘基于編織技術(shù)的緩存框架研究和實現(xiàn)》【】軟件導(dǎo)刊年期【∞著‘www.docin.com——一韭至至望查差堡圭竺垡笙蘭堡查蘭堅》【】電子工業(yè)出版社年月】塒刪著》】
【?【】“【咖【】【美詹森美赫魯著譯∞刪㈣》中文版【電子工業(yè)出版社年月【著》【年月【著阱】年月【著》【】北京機(jī)械工業(yè)出版社年月著【北京機(jī)械工業(yè)出版社【】》】年月www.docin.com北京交通大學(xué)碩士學(xué)位論文作者簡歷作者簡歷教育經(jīng)歷年月一至今就讀于北京交通大學(xué)軟件學(xué)院計算機(jī)軟件與理論專業(yè)軟件工程方向攻讀碩士學(xué)位年月一年月就讀于華中師范教育技術(shù)學(xué)專業(yè)計算機(jī)輔助教育方向獲理學(xué)學(xué)士學(xué)位工作實習(xí)經(jīng)歷年月一年月實習(xí)于北京合力金橋軟件技術(shù)有限責(zé)任公司職位工程師年月一年月兼職于長城企業(yè)戰(zhàn)略咨詢研究所職位工程師年月年月任教于九江學(xué)院主講課程語言程序設(shè)計。主要工程項目年月一年月參與中國網(wǎng)通客戶關(guān)系管理》主要技術(shù)框架主要職責(zé)網(wǎng)管數(shù)據(jù)交換接口、用戶數(shù)據(jù)同步接口和統(tǒng)一審批固化模塊的設(shè)計與開發(fā)。年月一年月參與‘中學(xué)生心理健康測試系統(tǒng)》主要的技術(shù)框架包括的、、等功能、本人承擔(dān)的主要工作一些特殊問卷測試、數(shù)據(jù)統(tǒng)計分析、系統(tǒng)配置模塊、自定義問卷發(fā)布等模塊的數(shù)據(jù)庫設(shè)計與開發(fā)以及一些通用代碼的編寫。本人的工作量占整個項目三分之一以上年月年月個人承接《國家軟件專業(yè)孵化器技術(shù)支持中心北交大分中心》的設(shè)計與開發(fā)。本人主要工作數(shù)據(jù)庫設(shè)計、系統(tǒng)架構(gòu)除論壇和美工以外幾乎所有功能模塊設(shè)計開發(fā)實現(xiàn)各個中心之間的注冊用戶的單點等錄部分編碼。論文發(fā)表情況‘面向方面編程在多層架構(gòu)中業(yè)務(wù)層的應(yīng)用》發(fā)表于《計算機(jī)技術(shù)與發(fā)展》年第期《基于多層架構(gòu)中層對數(shù)據(jù)庫訪問的優(yōu)化》發(fā)表于《鐵路計算機(jī)應(yīng)用》年第期www.docin.com北京交通大學(xué)碩士學(xué)位論文獨創(chuàng)性聲明獨創(chuàng)性聲明本人聲明所呈交的學(xué)位論文是本人在導(dǎo)師指導(dǎo)下進(jìn)行的研究工作和取得的研究成果除了文中特別加以標(biāo)注和致謝之處外論文中不包含其他人已經(jīng)發(fā)表或撰寫過的研究成果也不包含為獲得北京交通大學(xué)或其他教育機(jī)構(gòu)的學(xué)位或證書而使用過的材料。與我一同工作的同志對本研究所做的任何貢獻(xiàn)均已在論文中作了明確的說明并表示了謝意。學(xué)位論文作者簽名弋包簪罕簽字日期。一口年月仁日www.docin.com學(xué)位論文版權(quán)使用授權(quán)書本學(xué)位論文作者完全了解北京交通大學(xué)有關(guān)保留、使用學(xué)位論文的規(guī)定。特授權(quán)北京交通大學(xué)可以將學(xué)位論文的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫進(jìn)行檢索并
采用影印、縮印或掃描等復(fù)制手段保存、匯編以供查閱和借閱。同意學(xué)校向國家有關(guān)部門或機(jī)構(gòu)送交論文的復(fù)印件和磁盤。保密的學(xué)位論文在解密后適用本授權(quán)說明學(xué)位論文作者簽名眵暉簽字日期年月日新簽名嬲簽字日期仞彩年日www.docin.com

轉(zhuǎn)載于:https://www.cnblogs.com/wangzhongming/p/7052745.html

總結(jié)

以上是生活随笔為你收集整理的YJ智能框架--面向对象方面编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

国产香蕉97碰碰碰视频在线观看 | 中文字幕在线日本 | ww视频在线观看 | 欧美另类z0zx | 久久久国产网站 | 精品国产亚洲在线 | 中文字幕永久免费 | 国产小视频国产精品 | 天天干天天射天天操 | www五月天 | www99精品| 午夜三级理论 | 色香天天 | 激情婷婷六月 | 欧美aaaxxxx做受视频 | 91日韩国产| 精品亚洲国产视频 | 黄色小视频在线观看免费 | 免费观看9x视频网站在线观看 | 久久天堂亚洲 | 欧美成人性战久久 | 亚洲精品美女久久 | 中文字幕日韩免费视频 | 国产精品久久二区 | a在线观看免费视频 | 久久精品99| 欧美日韩观看 | 天天爱天天射天天干天天 | 狠狠色伊人亚洲综合网站野外 | 欧美日韩精品二区第二页 | 久久人91精品久久久久久不卡 | a√天堂资源 | 色婷婷国产精品 | 91完整版 | 99热99热| 国产成人61精品免费看片 | 日韩在线视频观看免费 | 蜜臀久久99静品久久久久久 | 亚洲精品视频在线观看网站 | a视频免费在线观看 | 日韩中文字幕网站 | 日韩成人高清在线 | 日韩a级免费视频 | 亚洲人成精品久久久久 | 国产在线探花 | 九九热av | 久久久久久激情 | 在线v片免费观看视频 | 在线观看视频免费播放 | 日韩精品中文字幕一区二区 | 99热亚洲精品 | 国产精品自在欧美一区 | 国精产品999国精产品视频 | 久久涩视频| 中文av一区二区 | 欧美91精品 | 久久午夜国产 | 亚洲做受高潮欧美裸体 | 久草在线在线精品观看 | 国内精品久久久久久 | 国产精品久久嫩一区二区免费 | 欧美做受高潮1 | 成人久久电影 | av丝袜美腿 | 人人干天天射 | 97香蕉久久国产在线观看 | 久久免费观看视频 | 日韩69av| 99精品久久精品一区二区 | 在线观看视频h | 欧美一级片在线免费观看 | 国产偷国产偷亚洲清高 | 四虎永久精品在线 | 国产在线观看你懂的 | 久久综合狠狠综合久久激情 | 亚洲成人国产精品 | 2019中文在线观看 | 免费看一及片 | 国产午夜精品免费一区二区三区视频 | 操操操影院| 国产精品中文久久久久久久 | 麻豆视频免费播放 | 日韩城人在线 | 欧美久久久久久久久久 | 在线观看亚洲成人 | 2017狠狠干| 欧美激情综合五月色丁香 | 激情五月五月婷婷 | 精品uu| 99r在线观看 | a级国产乱理论片在线观看 特级毛片在线观看 | 欧美日韩高清一区 | 日韩有码中文字幕在线 | 99国产一区二区三精品乱码 | 国产精品一区二区久久久久 | 91精品秘密在线观看 | 免费在线a| 成年人黄色免费视频 | 五月天视频网站 | 亚洲精品永久免费视频 | 91精品国产高清 | 成人国产精品入口 | 视频直播国产精品 | 国产一区二区成人 | 欧美日韩精品影院 | 免费看片在线观看 | 97超碰色偷偷 | 国产精品麻豆99久久久久久 | 久久九九免费 | 黄色三级在线看 | 日韩电影在线观看一区二区 | 国产精品国内免费一区二区三区 | 亚洲欧美日韩国产一区二区三区 | 亚洲午夜精品一区二区三区电影院 | 亚洲毛片一区二区三区 | 亚洲激情视频在线观看 | 亚洲欧美国内爽妇网 | 91.dizhi永久地址最新 | 国产一级精品绿帽视频 | 久久精品99国产精品亚洲最刺激 | 97国产精品亚洲精品 | 久久1电影院 | 日韩在线精品一区 | 国产不卡一 | 91精品免费视频 | 国产中文字幕国产 | 三级小视频在线观看 | 国产美女精品视频 | 国产精品久久久久婷婷二区次 | 午夜久久久久久久 | 国产成人精品a | 欧美日韩免费在线视频 | av无限看 | 欧美精品午夜 | 国产尤物在线视频 | 欧美日韩在线第一页 | av在线播放一区二区三区 | 日本黄色免费电影网站 | 久久精品79国产精品 | 西西4444www大胆视频 | 又黄又爽又湿又无遮挡的在线视频 | 久热免费在线 | 国产区精品区 | 色综合久久久久综合体桃花网 | 最新日韩视频 | 国产成人精品一区在线 | 午夜在线日韩 | 成在人线av | 精品久久国产 | 91av国产视频| 成人在线观看你懂的 | 国产精品久久久久久久7电影 | 天天色天天射天天综合网 | 婷婷亚洲五月 | 久草视频在线免费 | 狠狠干狠狠久久 | 在线观看www视频 | 91尤物在线播放 | 日韩久久精品一区 | 99亚洲国产精品 | 欧美少妇xx | 日本精a在线观看 | 午夜av免费在线观看 | 久久艹在线观看 | 超碰国产在线播放 | 久久精品99国产精品日本 | 97综合网 | 日韩精品中文字幕久久臀 | 日韩视频中文字幕 | 国产精品亚洲视频 | 国产成人一区二区在线观看 | 久久艹99| 国产123av| 在线中文字幕电影 | 91大神dom调教在线观看 | 久草视频在线免费播放 | 91在线视频免费播放 | 黄色a级片在线观看 | 中文字幕在线观看一区 | 久久久久国产精品厨房 | 天天操天天摸天天干 | 91视频在线看 | 免费99视频| 久久国色夜色精品国产 | 国产免费国产 | 日韩国产精品毛片 | 91香蕉视频 | 国产精品久久久久久久久久久久 | 久久久久二区 | 欧美日韩精 | 丁香婷婷激情五月 | 高清在线一区 | 国产热re99久久6国产精品 | 成人精品999 | 91视频高清免费 | 在线日韩中文字幕 | 欧美在线视频免费 | 又黄又刺激的视频 | 激情综合亚洲精品 | 99看视频在线观看 | 最近中文字幕大全中文字幕免费 | 干综合网 | 最新av网站在线观看 | 亚洲黄色在线 | 久久毛片高清国产 | 欧美国产视频在线 | 欧美亚洲另类在线视频 | 91成人在线免费观看 | 蜜臀av夜夜澡人人爽人人 | 国产成人亚洲精品自产在线 | 亚洲午夜精品在线观看 | 欧美日本啪啪无遮挡网站 | 国产精品视频最多的网站 | 四虎www.| 免费观看丰满少妇做爰 | 亚州成人av在线 | 在线三级播放 | 日韩高清在线一区二区 | 色偷偷网站视频 | 最近免费中文字幕mv在线视频3 | 999久久久久 | 亚洲婷婷在线 | 激情五月婷婷综合 | av片中文字幕 | 国产涩涩网站 | www.狠狠操.com | 中文字幕一区二区三区乱码在线 | 国产在线视频不卡 | 91精品国自产在线观看欧美 | 中文字幕视频网 | 久草视频免费看 | 成年人三级网站 | 99热这里只有精品8 久久综合毛片 | www五月 | 国内一区二区视频 | 久久久伊人网 | 日韩电影在线观看中文字幕 | 91视频观看免费 | 天天操天天拍 | 在线视频欧美精品 | 综合网av| 在线免费视频 你懂得 | 国产成人一区三区 | 亚洲国产一区二区精品专区 | 91人人澡| 91精品一区二区在线观看 | 91麻豆.com| 欧美 亚洲 另类 激情 另类 | 久久久电影 | 国产精品久久久影视 | 日韩激情久久 | 怡红院av久久久久久久 | 久久这里只有精品久久 | 中文字幕综合在线 | 98涩涩国产露脸精品国产网 | 91亚洲国产成人久久精品网站 | 久久黄页 | 丁香五月亚洲综合在线 | 一级片黄色片网站 | 国产成人在线网站 | 成人av影视| 99久久影院 | 国产黄色大片 | 激情网色| 人人射人人射 | 婷婷丁香狠狠爱 | 成人小视频在线观看免费 | 中文字幕在线久一本久 | 射久久 | 视频在线99re | 色偷偷88888欧美精品久久久 | 亚洲精品 在线视频 | 欧美一级性生活片 | 国产精品一区二区吃奶在线观看 | 免费韩国av| 黄色免费网站 | 伊人久久精品久久亚洲一区 | 亚洲一二三久久 | 日韩在线视频不卡 | 黄色大全在线观看 | 99热最新| 一区二区三区在线观看免费 | 99久久精品午夜一区二区小说 | 国产精品va在线播放 | 欧美一级视频在线观看 | 粉嫩av一区二区三区四区在线观看 | 亚洲专区在线播放 | 在线观看黄色的网站 | 久久伊人色综合 | 天天干夜夜爽 | 亚洲伊人第一页 | 国产91在线免费视频 | 日韩久久精品一区 | 日日夜夜狠狠干 | 又黄又刺激视频 | 日批网站在线观看 | 9999在线视频 | 欧美视频国产视频 | 亚洲最新在线 | 日韩精品在线视频免费观看 | 国产视频不卡一区 | 91精品欧美一区二区三区 | 久草网站在线观看 | 精品播放 | 97成人资源| 国产视频精品网 | 久久久久国产精品一区 | 美女黄色网在线播放 | 日韩啪视频 | 肉色欧美久久久久久久免费看 | 久久久久久激情 | 色婷婷激情综合 | 天天色天天综合 | 香蕉成人在线视频 | 久久精品国产精品亚洲 | 久久久久久国产一区二区三区 | 久久免费视频这里只有精品 | 国产精品18久久久久久首页狼 | 国产午夜精品在线 | 97视频免费在线看 | 色噜噜在线观看视频 | 五月婷婷视频 | 色综合天天干 | 色www.| 亚洲久草视频 | 久久爱资源网 | 国产精品99久久久久久宅男 | www亚洲视频 | 国产特级毛片aaaaaa毛片 | 成人免费视频在线观看 | 亚洲日本国产 | 91中文字幕在线观看 | 色婷婷99 | 国产一区福利在线 | 久久久国产精品视频 | 成人午夜电影在线 | 六月色播| 久草久草久草久草 | 精品视频不卡 | 久久久久国产精品厨房 | 九九免费在线视频 | 97精品国产手机 | 我爱av激情网 | 一区中文字幕电影 | 在线观看涩涩 | 久久久久97国产 | 91麻豆操 | 亚洲久草在线 | 91在线91| 欧美一区免费在线观看 | 日韩精品字幕 | 天海翼一区二区三区免费 | 国产精品大片免费观看 | 久久午夜免费观看 | 四虎影视国产精品免费久久 | 69久久久久久久 | 日韩欧美一区二区三区在线观看 | 91精品久久久久久综合五月天 | 欧美日韩二区三区 | 久久视频在线观看中文字幕 | 日日夜夜天天射 | 久久久久免费精品国产小说色大师 | 伊人色综合久久天天 | 欧美精品亚洲精品 | 手机成人在线 | 日韩免费在线观看视频 | 免费网站黄 | 国产精品毛片一区二区三区 | 久草在线视频资源 | 成人久久毛片 | 亚洲h视频在线 | 天堂在线一区二区三区 | 日日干美女| 亚洲欧美视频在线播放 | 日韩三级免费 | 日韩av综合网站 | av一级一片| 天天操综合网站 | 日韩欧美亚洲 | 久久艹人人 | 99综合电影在线视频 | 深爱激情开心 | 六月婷色 | www色网站 | 成人一级黄色片 | 国产亚洲精品久久19p | 激情av网址 | 午夜av免费观看 | 久草视频免费观 | 免费在线观看一级片 | 免费电影一区二区三区 | 日本精品视频在线播放 | 草久久久久 | 久久一区91| 成年人免费看 | 精品久久久久久久久久久久久久久久久久 | 日韩日韩日韩日韩 | 欧美一级视频免费 | 日韩在线免费小视频 | 99精品偷拍视频一区二区三区 | 欧美aa一级片| 蜜臀av性久久久久蜜臀av | 欧洲一区精品 | 亚洲一级片免费观看 | 久久精品中文字幕少妇 | 久久成人国产精品一区二区 | 免费看成人片 | 91精品少妇偷拍99 | 亚洲精品久久久久久久不卡四虎 | 亚洲精品麻豆视频 | 亚洲一区二区高潮无套美女 | 在线观看日韩免费视频 | 91片黄在线观 | 色婷婷一| 国产精品视频不卡 | 五月婷婷国产 | 日韩动漫免费观看高清完整版在线观看 | 一区二精品 | 日韩中文字幕在线观看 | 中文在线a∨在线 | 欧美国产91 | 国产一区二区影院 | 超碰在线网 | 欧美精品亚洲精品 | 国产亚洲欧洲 | 久久久久久久18 | 色综合天天综合 | 二区视频在线 | 91精品久久久久久久91蜜桃 | 亚洲一级黄色片 | 天天玩天天干天天操 | 日韩在线视频免费看 | 欧美日韩高清在线观看 | 五月天色婷婷丁香 | 免费的黄色的网站 | 亚洲成av人影片在线观看 | 综合网天天 | 在线av资源 | 欧美日韩国产高清视频 | 亚洲午夜久久久久久久久 | 久久久毛片| 天天干夜夜爽 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 日韩av有码在线 | www.午夜视频 | 91成人在线观看高潮 | 日韩精品中文字幕在线观看 | 国产字幕在线播放 | 国产伦理久久 | 狠狠躁夜夜a产精品视频 | 亚洲爱av| 国产精品wwwwww| 五月婷婷在线播放 | 国产一级精品在线观看 | 久久草精品 | 在线观看日韩精品视频 | 午夜视频在线观看一区二区三区 | 丁香六月天 | 亚洲欧美视频在线播放 | 欧美一级久久 | wwwwww黄| 青草视频网 | 久久手机免费观看 | 久久最新 | 爱爱av网 | av在线收看| av中文电影 | 久久综合精品一区 | 日韩在线网址 | 久久99在线 | 99超碰在线观看 | 国语自产偷拍精品视频偷 | 亚州天堂 | 激情网第四色 | 丁香婷婷在线观看 | 青春草免费在线视频 | 日本免费久久高清视频 | 欧美另类xxx | 91精品国自产在线偷拍蜜桃 | 中文字幕一区二区三区在线观看 | 日本中文字幕在线视频 | 欧美国产三区 | 黄在线 | 五月天国产精品 | 国产午夜三级一区二区三桃花影视 | 激情久久五月天 | 一区二区三区动漫 | 亚洲在线成人精品 | 91精品一区二区三区蜜臀 | www.夜夜爱 | 久久久一本精品99久久精品66 | 欧美日韩一区二区在线观看 | 国产精品乱看 | 国产99在线| 国产美女网站在线观看 | 国产亚洲视频在线观看 | 国产一区二区影院 | 久久久久久久久亚洲精品 | 久久96| 中文字幕 91| 日韩深夜在线观看 | 国产久视频 | 一区二区伦理 | 免费韩国av | 欧美精品在线一区二区 | 免费在线黄色av | 久草在线视频网 | 五月开心六月伊人色婷婷 | 成人观看视频 | 亚洲免费公开视频 | 欧美日韩一区三区 | 在线一二三区 | 欧美日韩91 | 日韩av片免费在线观看 | 久久精品香蕉视频 | 开心色插 | 中文 一区二区 | 国产一区欧美一区 | 欧美在线视频一区二区 | 国产一级电影在线 | 中文字幕日本在线观看 | 亚洲精品视频在线播放 | 久久精品中文字幕一区二区三区 | 久久99精品波多结衣一区 | 999亚洲国产996395 | 国产成人精品三级 | 国产精品久久久久久久久久久杏吧 | 日本一区二区三区视频在线播放 | 黄色三级在线 | 在线观看日韩国产 | 亚洲国产三级在线观看 | 午夜美女福利直播 | 国内精品久久久久影院优 | 久草免费在线视频 | 91在线免费播放 | 亚洲国产片色 | 国产一级片免费播放 | 天天操·夜夜操 | 在线免费观看视频一区 | 日韩精品第一区 | 日p视频在线观看 | 丁香花五月 | 91成人免费观看视频 | 91在线91拍拍在线91 | 欧美久久久久久久久久久久久 | 日本最大色倩网站www | 欧美在线视频一区二区 | www.狠狠干 | 四虎在线影视 | 国产精品18久久久久久久久久久久 | 六月丁香激情综合 | 中文字幕一二三区 | 最近2019好看的中文字幕免费 | 在线观看一区二区视频 | 久久久免费播放 | 天天精品视频 | 亚洲国产午夜 | 狠狠色狠狠综合久久 | 激情婷婷综合网 | 天天添夜夜操 | 国产午夜精品一区二区三区在线观看 | 丁香久久婷婷 | av日韩在线网站 | 免费a视频 | av在线一级 | 国产成人精品电影久久久 | 久久99久久99 | 亚洲精品在线视频网站 | 亚洲一区网站 | 欧美精品国产综合久久 | www.黄色在线 | 日日爱999| 久久99国产精品久久 | 国产第一二区 | 精品国产一区二区三区蜜臀 | 国产日韩欧美在线观看 | 欧洲在线免费视频 | 91网站在线视频 | 97超碰色偷偷 | 日韩欧美第二页 | 五月开心色 | 欧美吞精| 麻豆视频免费入口 | 一区二区三区视频网站 | 国产精品扒开做爽爽的视频 | 国产在线97| 午夜久久影视 | 麻豆视频一区 | 久久久久久久久久久久久国产精品 | 精品国产一区二区三区男人吃奶 | 欧美激情综合五月 | 又黄又刺激 | 日日操日日干 | 日韩免| 西西4444www大胆无视频 | 国产精品一区在线播放 | 激情视频免费在线 | 日韩欧美精品在线 | 亚洲精品一区二区精华 | 国产精品久久久久久婷婷天堂 | 国产精品二区在线 | av电影在线免费 | 国产精品九色 | bbb搡bbb爽爽爽 | 久久综合9988久久爱 | 欧洲av不卡| 欧美精品免费一区二区 | 四虎影视精品永久在线观看 | 久草影视在线 | 久久精品a | 丁香花在线视频观看免费 | 日韩| 视频在线91| 91香蕉视频在线下载 | av在线网站观看 | 99 国产精品 | 亚洲成色777777在线观看影院 | 欧美中文字幕久久 | 欧美在线你懂的 | av免费网站 | 中文字幕丝袜一区二区 | 久久久精品网站 | 丁香六月伊人 | 麻豆国产在线播放 | 黄色天堂在线观看 | 91人人网| 亚洲午夜精品久久久久久久久 | 91精品导航 | 欧美一级久久久 | 欧美日韩精品免费观看 | 久久久香蕉视频 | 婷婷香蕉| 久久免费黄色大片 | 日韩av在线免费播放 | 五月天精品视频 | 久久久亚洲麻豆日韩精品一区三区 | 国产精品麻豆欧美日韩ww | 国产理伦在线 | 99久久精品久久久久久动态片 | 超碰97中文 | 国产永久免费高清在线观看视频 | 久久久免费视频播放 | 日韩性久久 | 国产精品一区专区欧美日韩 | 久久久999精品视频 国产美女免费观看 | 免费看片亚洲 | 99久久99视频只有精品 | 精品一区二区三区在线播放 | 欧美成年性 | www黄com| 久久特级毛片 | 在线观看国产www | 十八岁以下禁止观看的1000个网站 | 亚洲网站在线 | 日韩专区在线观看 | 国产一区久久久 | 国产成人亚洲在线观看 | 国内精品久久久久久久久久久 | 伊人五月综合 | 精品无人国产偷自产在线 | 狠狠色噜噜狠狠 | 欧美精品做受xxx性少妇 | 久艹视频在线观看 | av一区二区三区在线播放 | 欧美亚洲国产精品久久高清浪潮 | 亚洲a色 | 97在线观看视频 | 麻豆视频91 | 五月精品 | 免费观看视频黄 | 欧美日韩在线视频一区二区 | 在线成人免费 | 亚在线播放中文视频 | 黄网站www| 91成年人视频 | 天天射天天干天天插 | 日韩久久视频 | 午夜精品成人一区二区三区 | 日本中文字幕网址 | 国产在线观看黄 | 在线日韩亚洲 | 欧美巨乳网 | 欧美贵妇性狂欢 | 在线观影网站 | 欧美另类巨大 | 91精品一区国产高清在线gif | 精品视频专区 | 天天射,天天干 | 色小说在线| 激情自拍av | 97在线资源| 欧美在线观看视频一区二区 | 中文字幕精品一区二区三区电影 | 久久97久久97精品免视看 | 综合激情网... | 91大神免费在线观看 | 少妇性色午夜淫片aaaze | 97福利在线观看 | 久久国产女人 | 色婷婷狠狠操 | 日韩有码第一页 | 国产精品18久久久久久久久久久久 | 欧美aa在线 | 日日干夜夜骑 | 久久婷婷精品视频 | 97视频免费在线 | 99免费在线视频观看 | 亚洲视频精选 | 久久久999免费视频 日韩网站在线 | 99热在线观看免费 | 亚洲精品成人av在线 | 久久少妇 | 国产又黄又爽无遮挡 | 久久综合桃花 | 日韩欧美视频在线观看免费 | 久久免费电影 | 国产精品麻豆一区二区三区 | 久草在线在线精品观看 | 最新日韩在线观看视频 | 黄色大片日本 | 国语自产偷拍精品视频偷 | 视频二区在线 | 一区二区不卡 | 国产精品门事件 | 在线观看 亚洲 | 久久激情综合网 | 日韩精品一区二区三区外面 | 国产中文字幕免费 | 日韩欧美国产精品 | 色激情在线 | 在线看国产 | 国产成人av在线 | 日韩av网页 | 精品在线一区二区三区 | 国产成人av在线影院 | 91视频 - x99av| 麻豆精品传媒视频 | 黄色大片日本免费大片 | 天天色天天射天天干 | 久久免费看av | 超碰在线观看av.com | 国产在线日本 | 国产精品h在线观看 | 欧美高清成人 | 日本久久高清视频 | 中文字幕在线国产精品 | 免费观看一区 | 国产在线观看黄 | 国产专区第一页 | 九九热在线播放 | 国产综合精品久久 | 欧美a视频在线观看 | 日b黄色片 | 午夜电影中文字幕 | 91九色视频 | 日本中文字幕免费观看 | 久久精品视频免费播放 | av免费成人| 操操操日日日干干干 | 天天天插 | 玖玖色在线观看 | 一区二区中文字幕在线播放 | 久久久久 免费视频 | 亚洲精品视频二区 | 国产精品久久久久久模特 | 国产黄色免费 | 国产精品久久久久av福利动漫 | 992tv在线成人免费观看 | 亚洲电影影音先锋 | 久久久久免费网站 | 成年人国产精品 | 国产高清绿奴videos | 中文字幕在线观看一区二区 | 最近2019年日本中文免费字幕 | 日韩免费av在线 | 免费在线激情电影 | 国产手机在线视频 | 日韩欧美视频在线播放 | 久久午夜色播影院免费高清 | www.亚洲黄色 | 伊人日日干 | 天天干天天综合 | 中文字幕 在线 一 二 | 天天综合区| 日本久久久久久久久久久 | 久久久久久黄色 | 中文字幕在线看视频 | 亚洲精品乱码久久久久久蜜桃不爽 | 激情婷婷亚洲 | 久久久久久久久久久免费视频 | 激情婷婷在线观看 | 99久久精品国产系列 | 久久综合中文色婷婷 | 久久久精品久久日韩一区综合 | 久久久久免费网站 | 91精品国产一区二区在线观看 | 开心色激情网 | 久久免费看av | 国产精品久久久视频 | 久久不射电影网 | 日韩精品中文字幕在线观看 | 黄色三级免费片 | 天堂在线v | 国产在线无 | 91中文在线视频 | 精品国产乱码久久久久久久 | 免费a v观看 | 五月激情丁香图片 | 麻豆免费在线播放 | 亚洲成年片 | 91精品国产麻豆 | 日本久久久久久科技有限公司 | 国产乱老熟视频网88av | 欧美性生活一级片 | 人人爽人人爽人人 | 国产精品第二十页 | 在线观看中文字幕2021 | 久久久久久高潮国产精品视 | 久操操 | 日本高清dvd | 国产一级免费观看 | 色综合咪咪久久网 | 色偷偷888欧美精品久久久 | 国产高清在线a视频大全 | 亚洲最新在线 | 在线看毛片网站 | 国产理论影院 | 探花视频在线观看免费版 | 91在线免费公开视频 | 一级黄色在线免费观看 | 综合网久久 | 久久亚洲免费 | 狠狠婷婷| 亚洲国产中文在线 | 午夜色婷婷 | 国产福利a| 国际精品久久 | www免费看 | 欧美坐爱视频 | 国产午夜精品一区二区三区 | 久久国内精品99久久6app | 亚洲精品在线网站 | 综合天天| 香蕉视频最新网址 | 久操操 | 亚洲国产成人精品久久 | 亚洲理论在线观看 | 丰满少妇一级片 | 久久高清av| 中文 一区二区 | 九热在线 | 国产三级精品在线 | 成人xxxx | 美女视频久久久 | 免费视频在线观看网站 | 国产成人精品免高潮在线观看 | 欧美日韩国产色综合一二三四 | 久久艹艹 | 国产黄色精品在线 | 香蕉精品视频在线观看 | 日韩资源在线播放 | av福利免费 | 久久综合色8888 | 91av在线免费视频 | 99国内精品久久久久久久 | 97成人免费 | 9999激情 | 中文在线字幕免 | 日韩欧美高清一区二区三区 | 欧美日本一区 | 九九导航| 欧美激情视频一区二区三区免费 | av短片在线观看 | 国产黄色一级大片 | 欧美极品裸体 | 激情欧美丁香 | 又黄又爽又色无遮挡免费 | 天天干天天干天天 | 超碰国产在线播放 | 狠狠插狠狠干 | 51久久成人国产精品麻豆 | avove黑丝| 激情综合网婷婷 | 中文字幕免费一区二区 | 色婷婷激情电影 | 成人在线黄色电影 | 天堂av在线免费 | 国产精品免费在线观看视频 | 天天射天天干天天 | 98精品国产自产在线观看 | 精品视频在线观看 | 一级精品视频在线观看宜春院 | 欧美激情综合色综合啪啪五月 | 99精品视频网站 | av免费在线观看1 | 国产精品久久久区三区天天噜 | 九色一区二区 | 久久高清片 | 午夜视频在线观看网站 | 天天综合网国产 | 欧美激情视频一区 | 久久免费毛片 | 美女露久久 | 伊人久久精品久久亚洲一区 | av在线激情| 久久久久久久久久久久久久免费看 | 麻豆 videos | 99久久99| 日韩精品久久久久 | 久久久性 | 久久国内精品99久久6app | 精品国产诱惑 | 91看片在线免费观看 | av在线免费网站 | 在线欧美最极品的av | 伊人狠狠色丁香婷婷综合 | 午夜视频免费在线观看 | 成人午夜精品久久久久久久3d | 日韩一级黄色大片 | 中文字幕免费观看全部电影 | 最新日韩在线观看 | 丁香婷婷综合网 | 久久久久国产一区二区三区四区 | 精品视频久久久久久 | 色噜噜噜 | 色综合狠狠干 | 美女在线国产 | 免费在线播放 | 日韩精品一区二区三区在线视频 | 亚洲亚洲精品在线观看 | 亚洲丝袜一区二区 | 激情丁香 | 亚洲视频免费在线观看 | 欧美日韩国产精品一区二区三区 | 国产尤物视频在线 | 国产精品一码二码三码在线 | 天天干天天天天 | 福利精品在线 | av片在线看 | 美女免费电影 | 免费观看不卡av | 日韩精品一区二区在线观看 | 精品麻豆| 中文字幕在线播出 | 免费观看国产精品视频 | 成人av在线直播 | 狠狠色噜噜狠狠狠合久 | 免费av在线 | 91毛片视频| 97在线看片 | 激情五月播播久久久精品 | 欧美成人在线免费观看 | 国产精品一区二区果冻传媒 | 亚洲欧美日韩一二三区 | 亚洲精品国产精品国 | 特级a老妇做爰全过程 | 亚洲一区在线看 | 黄色片视频在线观看 | 成片人卡1卡2卡3手机免费看 | 日韩久久午夜一级啪啪 | 一本一道久久a久久综合蜜桃 | 国产一区欧美二区 | 77国产精品 | 亚洲婷久久 | 99视频这里有精品 | 日本在线观看中文字幕无线观看 | 国产99久久精品一区二区永久免费 | 麻豆精品在线 | 久久深爱网 | 欧美伦理一区二区 | 久久久国产成人 | 日韩特级片 | 国产精品9999 | 在线看岛国av | 狠狠干婷婷色 | 久久神马影院 | 一级一片免费看 | 久久影视中文字幕 | 97av精品| 精品 激情 | 免费av网址在线观看 | 日韩在线观看中文 | 国产中文字幕一区 | 97视频在线免费观看 | 免费看毛片网站 | 中文字幕在线播放av | 免费看的黄色片 | 久草免费在线视频观看 | 综合色婷婷 | 国产原创在线观看 | 91免费网址 | 中文字幕在线观看视频免费 | 久久爱www.| 日韩色av色资源 | 91香蕉视频好色先生 | 国产精品二区三区 | 99在线免费视频观看 | 欧美精品中文 |