天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

你真的了解分層架構(gòu)嗎?——寫(xiě)給被PetShop"毒害"的朋友們

一葉障目

.NET平臺(tái)上的分層架構(gòu)(很多朋友稱其為“三層架構(gòu)”),似乎是一個(gè)長(zhǎng)盛不衰的話題。經(jīng)常看到許多朋友對(duì)其進(jìn)行分析、探討、辯論甚至是抨擊。筆者在仔細(xì)閱讀了大量這方面文章后,認(rèn)為許多朋友在分層架構(gòu)的理解上存在兩個(gè)比較大的偏頗:

1.沒(méi)有從本質(zhì)角度去理解分層的內(nèi)涵,而只是了解其表象。

2.對(duì)分層架構(gòu)的理解過(guò)于狹隘,只是少數(shù)概念,而又不夠深入。

許多朋友言“分層”則必稱“DAL”、“BLL”、“表示層”等概念,殊不知“DAL”的內(nèi)部還有“Data Source 架構(gòu)模式”、“Object-Relational Behavioral 模式”、“Object-Relational Structural 模式”等方面,而其中每個(gè)方面下下又有諸多具體模式,如“Data Source 架構(gòu)模式”又有“Table Data Gateway”、“Row Data Gateway”、“Acitive Record”等等。再說(shuō)“BLL”,大家都知道“BLL”是“業(yè)務(wù)邏輯層”,可是什么是“業(yè)務(wù)邏輯”?“BLL”又可以構(gòu)建為“Transaction Script”、“Domain Model”、“Table Module”三種模式,各是什么意思?另外,分層也不僅只有“數(shù)據(jù)訪問(wèn)層”+“業(yè)務(wù)邏輯層”+“表示層”這一種分法,諸如“服務(wù)層”、“持久化層”、“應(yīng)用控制層”的概念朋友們是否真的熟悉呢。

造成這種現(xiàn)象,我想很大一部分原因是因?yàn)榇蠖鄶?shù).NET平臺(tái)的開(kāi)發(fā)者(包括我在內(nèi))理解分層架構(gòu)是從Microsoft的PetShop開(kāi)始的。因?yàn)镻etShop是官方的Demo,所以被眾多.NET開(kāi)發(fā)者奉為圣經(jīng),甚至成了.NET平臺(tái)上分層架構(gòu)的標(biāo)準(zhǔn)方案。我就曾看到許多朋友在我的博客中留下“分層架構(gòu)還是PetShop最經(jīng)典”、“想學(xué)分層還是看PetShop吧”、“你這是跟PetShop學(xué)得吧”這樣的留言。朋友們太崇敬PetShop了,卻忽略了一個(gè)事實(shí):它僅僅是一個(gè)Demo。退一步說(shuō),即使它是一個(gè)實(shí)際應(yīng)用的項(xiàng)目,這樣通過(guò)一個(gè)具體項(xiàng)目去定義一個(gè)抽象概念的方式也是不科學(xué)的。

舉個(gè)例子,一個(gè)人不知道“牛”是什么東西,于是請(qǐng)教一位奶牛場(chǎng)管理員,管理員遷出一頭奶牛,告訴他:“這就是牛”。從此以后,如果有人問(wèn)他“牛”是什么,他就會(huì)告訴別人“牛”是一種體型龐大,行動(dòng)笨拙,性格溫順,身上有黑白斑塊圖案,還有一個(gè)好大的咪咪,可以擠奶供人喝。有一天,他聽(tīng)說(shuō)西班牙有斗牛這項(xiàng)運(yùn)動(dòng),他大驚道:“這怎么可以!牛那么溫順,怎么能用來(lái)斗呢!而且牛是用來(lái)擠奶喝的啊!”

故事中這個(gè)人犯了一個(gè)什么錯(cuò)誤呢?他把“具體的一頭奶牛”和“牛”這個(gè)抽象概念給劃等號(hào)了。他認(rèn)為牛就是“體型龐大,行動(dòng)笨拙,性格溫順,身上有黑白斑塊圖案,還有一個(gè)好大的咪咪,可以擠奶供人喝”。殊不知這世界上還有黃牛、水牛、牦牛、斗牛、肉牛等各種牛。他沒(méi)能做到“透過(guò)想象看本質(zhì)”從而形成抽象概念,而犯了“一葉障目”的錯(cuò)誤。

其實(shí),許多朋友之所以對(duì)分層架構(gòu)理解片面或偏頗,是因?yàn)榕c故事中這個(gè)人犯了相同的錯(cuò)誤。當(dāng)初,我們不知道何為“分層架構(gòu)”,于是微軟給了我們一個(gè)PetShop,說(shuō):“看!這就是.NET平臺(tái)下分層架構(gòu)的產(chǎn)品。”于是我們“恍然大悟”:“噢!這就是分層架構(gòu)啊!”。就這樣,我們把“分層架構(gòu)”這樣一個(gè)內(nèi)涵和外延都極大的抽象概念和一個(gè)具體的Demo劃了等號(hào),從而也變成了故事中那個(gè)人——我們言分層架構(gòu)必稱DAL、BLL,我們做項(xiàng)目必然依照PetShop方式架構(gòu)……

我們確實(shí)被PetShop“毒害”了。但這不是微軟的錯(cuò),更不是PetShop的錯(cuò),就像在故事中,我們不能把罪責(zé)歸咎于奶牛場(chǎng)管理員或那頭奶牛。錯(cuò)在我們自己!當(dāng)微軟給我們PetShop時(shí),我們應(yīng)該在腦中清醒認(rèn)識(shí)到:這是一個(gè)分層架構(gòu)的Demo。而不是理解成了“這就是分層架構(gòu)”。我們應(yīng)該鉆研、思考,從而抓住分層架構(gòu)的本質(zhì),可是我們沒(méi)有。與其說(shuō)我們是被PetShop“毒害”了,倒不如說(shuō)我們是被自己、被自己那種不良的學(xué)習(xí)習(xí)慣毒害了。我們僅看表象,還是只看了一個(gè)表象,然后就冒然對(duì)分層架構(gòu)蓋棺定論。而沒(méi)能透過(guò)想象看本質(zhì)。所以,我們同樣犯了“一葉障目”的錯(cuò)誤。

以上的錯(cuò)誤,筆者也曾經(jīng)犯過(guò)!所以,在下文中,我想和朋友們一起分享一下我在反省自己的過(guò)程中,悟出的一些心得體會(huì),希望能借此幫助更多朋友盡快走出“一葉障目”。

洞悉分層的本質(zhì)

我們可以討論如何分層,可以討論分層的利弊,可以討論分層有沒(méi)有價(jià)值……但在這一切一切討論之前,我們要先弄清楚一件事:分層的本質(zhì)是什么?或者說(shuō):分層是怎么來(lái)的?如果這個(gè)問(wèn)題不明晰,那么我們其他的討論猶如“浮沙之上筑高臺(tái)”,再精辟的言辭,如果沒(méi)有一個(gè)牢固的基礎(chǔ),也是站不住腳的。

想要了解分層的本質(zhì),就不得不說(shuō)說(shuō)分工。分工可以說(shuō)是勞動(dòng)生產(chǎn)力上最大的改良,最初分工的好處體現(xiàn)在“比較優(yōu)勢(shì)”上,由于各司其職,每個(gè)人可以從事其最擅長(zhǎng)的勞動(dòng),再加上單純勞動(dòng)所帶來(lái)的勞動(dòng)熟練度提升和減少了更換勞動(dòng)時(shí)的損失,使得勞動(dòng)生產(chǎn)率大幅提升。然而,隨著社會(huì)的發(fā)展,我們發(fā)現(xiàn)某些特殊形式的分工不但可以提高生產(chǎn)力,還有另一些好處!為了理解這些好處,我們舉個(gè)實(shí)際的例子。

今天是六一國(guó)際兒童節(jié),一位母親想給她的女兒買(mǎi)一個(gè)奶油蛋糕作為禮物。我們知道,蛋糕需要面粉、需要雞蛋、需要牛奶等等,還需呀經(jīng)過(guò)一系列復(fù)雜的加工和包裝過(guò)程,但是這位母親不需要關(guān)心這些,她只要去附近的超市直接買(mǎi)就行了。而超市里既沒(méi)有養(yǎng)雞場(chǎng),也沒(méi)有奶牛場(chǎng),更沒(méi)有種小麥的農(nóng)民伯伯和烘焙蛋糕的工人師傅。這個(gè)簡(jiǎn)單的“買(mǎi)蛋糕”場(chǎng)景,大約可以用下圖表示。

圖1、制作蛋糕的分工

圖1大約說(shuō)明了一個(gè)蛋糕是如何從到達(dá)顧客手里的。可以看到,制作蛋糕不是一個(gè)單一的勞動(dòng),需要許多的分工,如果自底向上看,主要的分工包括:基礎(chǔ)物質(zhì)資料的種植生產(chǎn)、原料加工、蛋糕加工、商業(yè)銷(xiāo)售。并不是所有分工都如上圖這樣,上圖所示的分工,有一些特點(diǎn),下面總結(jié)一下。

1.下層不知道上層的存在。例如奶牛廠生產(chǎn)牛奶,它不必知道牛奶被拿去做什么,可能被奶油廠收購(gòu)去做奶油,也可能被雪糕廠收購(gòu)了做雪糕,也可能被收購(gòu)去做奶糖,總之,它只管完成自己的職責(zé)——生產(chǎn)牛奶,而對(duì)于它的上層一無(wú)所知。同樣,奶油加工廠只管生產(chǎn)奶油,它不必知道奶油被拿去做蛋糕還是做摩卡咖啡。

2.每一層僅僅知道它的下一層(最后一層除外,因?yàn)樽詈笠粚記](méi)有下一層),而不知道另外的下層。例如,蛋糕廠只需知道從面粉廠、奶油廠和雞蛋廠提取面粉、奶油、雞蛋就行了,而不必關(guān)心面粉是怎么來(lái)了、奶油是怎么來(lái)的這些問(wèn)題。

可以說(shuō),符合以上兩點(diǎn)的分工就是分層架構(gòu)的思想來(lái)源。下面說(shuō)的稍微正式一點(diǎn)。所謂分層思想,就是這樣一種分工:它將系統(tǒng)按不同的職責(zé)組織成有序的層次。其中,除最上層外,每一層僅提供若干服務(wù)供其相鄰的上層使用,但不知道上層的存在;除最下層外,每一層僅調(diào)用其臨近下層的服務(wù)。

所以,所謂“分層思想”,不過(guò)是一種特殊的分工形式。而計(jì)算機(jī)軟件架構(gòu)中的分層思想,是將這一思想應(yīng)用于軟件開(kāi)發(fā)中的特例,而PetShop所使用的“DAL+BLL+PL”的方式,又不過(guò)是將這一思想應(yīng)用于軟件開(kāi)發(fā)中的特例的特例。例如,如果某個(gè)系統(tǒng)的業(yè)務(wù)很簡(jiǎn)單,僅僅是增刪改查,那么BLL就沒(méi)有作用,“DAL+PL”的方式就可以很好完成,這也是很好的分層架構(gòu)。再如,如果某個(gè)系統(tǒng)的業(yè)務(wù)很復(fù)雜,需要先規(guī)格化,再做運(yùn)算,再做整理,那么“DAL+規(guī)格化層+計(jì)算層+整理層+PL”這種五層架構(gòu)也是很合理的啊。如果某個(gè)系統(tǒng)BLL所暴露的接口太繁雜,那么使用Facade模式在BLL和PL之間加一個(gè)“Facade Service Layer”也是很正常的。再者,如果某個(gè)系統(tǒng)不需要數(shù)據(jù)存取功能,例如計(jì)算器程序,我們只是想把表示和業(yè)務(wù)(計(jì)算功能)分開(kāi),那么就沒(méi)有DAL了,“BLL+PL”就是合理的。所以,用分層的思想進(jìn)行架構(gòu),本質(zhì)是“將系統(tǒng)按不同職責(zé)組織成有序?qū)哟?hellip;…”這一段話描述的,而不是簡(jiǎn)單“將系統(tǒng)分成DAL+BLL+PL”,更不是“按PetShop的方式進(jìn)行架構(gòu)”。

下面,摘錄一段Fowler在《Patterns of Enterprise Application Architecture》中對(duì)分層的定義:

When thinking of a system in terms of layers, you imagine the principal subsystem in the software arranged in some form of layer cake,where each layer rests on lower layer. In this scheme the higher layer uses various services defined by lower layer,but lower layer is unaware of the higher layer. Furthemore, each layer usally hides its lower layers from the layers above.

——Martin Fowler, 《Patterns of Enterprise Application Architecture》, P17

大致譯文如下:

當(dāng)我們說(shuō)一個(gè)系統(tǒng)是分層架構(gòu)的時(shí)候,你可以把這個(gè)軟件想象成一個(gè)有很多層的蛋糕的樣子,其中每一層放在它的下一層上。較高層使用諸多較低層定義和提供的服務(wù),但較低層并沒(méi)有察覺(jué)較高層的存在。另外,每一層都會(huì)對(duì)其上層隱藏更低的層。

——馬丁 福勒, 《企業(yè)應(yīng)用架構(gòu)模式》, P17

但是,這里有一點(diǎn)需要聲明:雖然說(shuō)“DAL+BLL+PL”不等價(jià)于分層架構(gòu),而僅僅是一種實(shí)例。但同時(shí)我們要清楚的認(rèn)識(shí)到,這個(gè)方式之所以如此流行,以至于微軟的官方示例都這樣架構(gòu),是因?yàn)閷?duì)于許多系統(tǒng),特別是大中型MIS系統(tǒng),這種架構(gòu)方式是應(yīng)該優(yōu)先考慮的。在這一節(jié)中,筆者絕對(duì)沒(méi)有對(duì)“DAL+BLL+PL”進(jìn)行批判的意思,相反,當(dāng)開(kāi)發(fā)系統(tǒng)時(shí),這種方式可以優(yōu)先考慮,然后可以根據(jù)系統(tǒng)的特點(diǎn),進(jìn)行一定得改良。筆者在本節(jié)所強(qiáng)調(diào)的是:不能把“DAL+BLL+PL”看做分層架構(gòu)的本質(zhì),更不能和“分層架構(gòu)”這個(gè)思想概念劃等號(hào)。

分層架構(gòu)的利弊分析

在理解了分層架構(gòu)的本質(zhì)的基礎(chǔ)上,我們才可以放心大膽的對(duì)分層架構(gòu)進(jìn)行利弊分析。廢話少講,這一節(jié)我們直接切入正題。

分層架構(gòu)的優(yōu)點(diǎn)如下:

1.分離開(kāi)發(fā)人員的關(guān)注。由于某一層僅僅調(diào)用其相鄰下一層所提供的服務(wù),所以,只要本層的API和相鄰下一層的API定義完整,開(kāi)發(fā)人員在開(kāi)發(fā)某一層時(shí)就可以像關(guān)注集中于這一層所用的思想、模式、技術(shù),這樣,就等同于將分工帶來(lái)的生產(chǎn)力提高優(yōu)勢(shì)引入軟件開(kāi)發(fā)。又如買(mǎi)蛋糕的例子,作為超市,只要知道下層API(如何從蛋糕廠獲取蛋糕)和本層需要實(shí)現(xiàn)的API(把蛋糕銷(xiāo)售給客戶),就可以制定自己的業(yè)務(wù)模式很策略計(jì)劃了,而不必關(guān)心如何種小麥、如何磨面粉、如何做奶油、如何做蛋糕等。這樣,超市只需進(jìn)行商業(yè)運(yùn)作,而不必進(jìn)行產(chǎn)業(yè)運(yùn)作,如此專一,必然提高業(yè)務(wù)水平。

2.無(wú)損替換。想象一下,如果某家奶牛場(chǎng)倒閉了,奶油加工廠也要跟著倒閉嗎?當(dāng)然不會(huì),它可以迅速更換一家奶牛場(chǎng),因?yàn)楦鱾€(gè)奶牛場(chǎng)都可以實(shí)現(xiàn)“提供牛奶”這項(xiàng)服務(wù)。再譬如,如果某天國(guó)家出臺(tái)政策,要求所有奶油廠必須從審查合格的奶牛場(chǎng)引進(jìn)原料,恰好某奶油廠的合作牛奶供應(yīng)商沒(méi)能通過(guò)審查,那么,只要換一家通過(guò)審查的合作就行了。而且奶油廠內(nèi)部的各個(gè)環(huán)節(jié)一動(dòng)不用動(dòng),因?yàn)椴煌哪膛?chǎng)都可以提供“供應(yīng)牛奶”這個(gè)服務(wù)。而如果奶油廠自己養(yǎng)牛生產(chǎn)牛奶,一旦遇到這個(gè)政策,還得自己去有關(guān)部門(mén)進(jìn)行審查,調(diào)整相應(yīng)業(yè)務(wù)流程,牽一發(fā)而動(dòng)全身。程序中同樣的道理,最常聽(tīng)說(shuō)的可能就是遷移數(shù)據(jù)庫(kù)了。

3.降低了系統(tǒng)間的依賴。還是蛋糕那個(gè)例子,如果某天蛋糕廠內(nèi)部換機(jī)器了,或業(yè)務(wù)流程調(diào)整了,請(qǐng)問(wèn)顧客需要關(guān)心嗎?顯然不用,因?yàn)轭櫩椭徽{(diào)用超市提供的服務(wù)。而超市為顧客隱藏了下面所有產(chǎn)業(yè)細(xì)節(jié)。如果每一個(gè)顧客買(mǎi)一樣商品,都要了解這個(gè)商品從原料生產(chǎn)到成型再到銷(xiāo)售的一系列細(xì)節(jié),豈不累死了。換做程序中,就如表示層只管調(diào)用業(yè)務(wù)層的服務(wù),至于業(yè)務(wù)層下還有幾層?各種數(shù)據(jù)是怎么來(lái)的?怎么存的?是真實(shí)的還是捏造的?都不需要了解,這大大降低了系統(tǒng)各職責(zé)之間的依賴。

4.復(fù)用。例如,你可以去這個(gè)超市買(mǎi)東西,我也可以去這個(gè)超市買(mǎi)東西。蛋糕廠可以從面粉廠提取面粉,饅頭廠也可以。這樣,同樣的層就可以為不同的上層提供服務(wù),達(dá)到了復(fù)用的目的。具體到程序中,例如氣象局制作發(fā)布了一個(gè)“Service Layer”,用于提供天氣預(yù)告信息。這樣新浪、搜狐這些網(wǎng)站可以利用這個(gè)服務(wù)層提供的服務(wù),制作天氣預(yù)告頁(yè)面,QQ也可以利用這個(gè)服務(wù)在它的聊天工具上添加天氣預(yù)告,你自己做一個(gè)軟件需要用到天氣預(yù)告功能,也可以調(diào)用氣象臺(tái)的“Service Layer”。

說(shuō)罷優(yōu)點(diǎn),再來(lái)談?wù)劮謱蛹軜?gòu)的弊端:

1.級(jí)聯(lián)修改問(wèn)題。這個(gè)問(wèn)題在現(xiàn)實(shí)中不好比喻,但在程序中相信很多朋友都明白。例如,一個(gè)人事管理系統(tǒng),本來(lái)查看人員信息只能分頁(yè)查看,而現(xiàn)在,需要增加一個(gè)功能:在分頁(yè)的同時(shí)還能分部門(mén)。例如,可以查看“銷(xiāo)售部的前50個(gè)人”,這樣,為了這個(gè)功能所有層都需要修改。

2.性能問(wèn)題。本來(lái)直來(lái)直去的操作,現(xiàn)在要層層傳遞,勢(shì)必造成性能的下降。就如在購(gòu)買(mǎi)蛋糕的例子中。顧客在享受分工帶來(lái)的便利時(shí),也要承受由于不同層的部門(mén)分布各地而造成的蛋糕價(jià)格上升,這是因?yàn)榉謱釉黾恿顺杀荆邕\(yùn)輸、不同層間部門(mén)的協(xié)調(diào)管理成本等。

縱觀以上分析,分層架構(gòu)有利有弊。這是一定得,世上任何事物都有利弊,所以,把“分層架構(gòu)捧上天”和“一棍子打死”這兩種做法都是不明智也是不科學(xué)的。對(duì)待分層架構(gòu),我們的態(tài)度應(yīng)當(dāng)是明晰其本質(zhì)和利弊,然后根絕具體情況做出理性的分析和抉擇。

從上面的分析可以看出,分層架構(gòu)可以降低層內(nèi)變化的成本,而對(duì)于API的變化非常敏感。如在級(jí)聯(lián)修改中提到的“在分頁(yè)的同時(shí)還能分部門(mén)”的新需求,就是對(duì)API進(jìn)行的變動(dòng)。API的變動(dòng)對(duì)于分層架構(gòu)是致命的,修改起來(lái)難度非常大。所以,一個(gè)簡(jiǎn)單的判斷法則就是:如果您的系統(tǒng)層內(nèi)頻繁變動(dòng)(甚至整層替換)可能性很大,而API變動(dòng)可能性很小,就使用分層;而如果API可能會(huì)頻繁變動(dòng),那就要謹(jǐn)慎使用分層架構(gòu)了。

后面的話

其實(shí),我想說(shuō)的主要內(nèi)容,就是前面三節(jié)了。不過(guò)還是有些話,想和大家嘮叨嘮叨。

這篇文章,不是一篇技術(shù)文章,所以通篇不提技術(shù)細(xì)節(jié),而只是想幫大家澄清對(duì)分層的誤解。最近看了很多對(duì)分層架構(gòu)(或三層架構(gòu))的探討,其中以批判居多,有的甚至認(rèn)為分層就是個(gè)沒(méi)用的垃圾東西。我想,產(chǎn)生這種想法的人,大致經(jīng)過(guò)了以下階段:聽(tīng)說(shuō)分層,粗略學(xué)習(xí)分層、模仿使用分層、用得十分不爽、出來(lái)批判。

其實(shí),任何技術(shù)都是客觀的,都沒(méi)有錯(cuò)誤,錯(cuò)誤在人,是人沒(méi)有正確使用,或沒(méi)有用到合適的地方。就像我們不能批判刀片不適合劈叉,也不能批判柴刀不適合刮胡子。一項(xiàng)技術(shù)想要發(fā)揮威力,關(guān)鍵要正確運(yùn)用,而要正確運(yùn)用,就需要有深厚的功底,需要我們努力學(xué)習(xí),勤于思考。這不是一朝一夕的事情,要有持久的毅力。我們要爭(zhēng)取做一個(gè)善于用功、善于把握事物本質(zhì)的人,而不是一個(gè)用刀片劈柴、用柴刀刮胡子,然后大罵刀片和柴刀都是垃圾的人。

分層思想從來(lái)就不是軟件架構(gòu)中首先提出來(lái)的,我們天天上網(wǎng)用到的網(wǎng)絡(luò),都遵循OSI七層協(xié)議,網(wǎng)絡(luò)結(jié)構(gòu)的設(shè)計(jì)是分層思想合理應(yīng)用的一個(gè)典范。另外,在許多其他工程技術(shù)領(lǐng)域,分層思想也是很普遍的。所以,不要把分層當(dāng)成計(jì)算機(jī)人士甚至軟件開(kāi)發(fā)人士獨(dú)有的能力,相對(duì)那些領(lǐng)域,將分層應(yīng)用于軟件架構(gòu)的技術(shù)還很不成熟,還有許多事情等待我們?nèi)プ觥?/p>

最后強(qiáng)烈推薦一本書(shū):Martin Fowler的《Patterns of Enterprise Application Architecture》,相信看完這本書(shū),對(duì)于分層思想的理解和分層中具體模式的運(yùn)用決策都會(huì)有大幅提高。你會(huì)明白,原來(lái)分層不是只有“DAL”、“BLL”,原來(lái)分層還有怎么多內(nèi)在的東西。

最后祝大家六一快樂(lè)!:)

作者:EricZhang(T2噬菌體)
出處:http://leoo2sk.cnblogs.com
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。

it知識(shí)庫(kù)你真的了解分層架構(gòu)嗎?——寫(xiě)給被PetShop"毒害"的朋友們,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 麻豆国产96在线日韩麻豆 | 亚洲高清一区二区三区电影 | 旧里番YY6080在线播放 | 毛片亚洲毛片亚洲毛片 | 亚洲AV精品乱码专区 | 处破女免费播放 | 不戴套挺进人妻怀孕 | 亚洲精品久久久久久久蜜臀老牛 | 精品久久久99大香线蕉 | 成年黄网站免费大全毛片 | 在线视频 中文字幕 | 欧美成人momandson | 色欲午夜无码久久久久久 | 99在线观看视频免费 | 动漫美女和男人下载 | 国产精品第八页 | 老师小扫货水能么多叫出来 | 亚洲欧美另类无码专区 | 国产色无码精品视频国产 | 色中色最新地址登陆 | tobu中国日本高清 | 亚洲a视频在线 | 最近免费中文字幕完整版HD | 办公室激情在线观看 | 精品国内自产拍在线观看视频 | 甜性涩爱bt下载 | 影音先锋xfplay影院av | 欧美双拳极限扩张 | 人C交ZZZ0OOZZZ000| 国产成人精品免费视频软件 | 蜜桃AV色欲A片精品一区 | 国产成人女人视频在线观看 | 精品国产5g影院天天爽 | 亚洲人成色777777老人头 | 中文字幕无码一区二区免费 | 99精品国产高清自在线看超 | 又黄又湿免费高清视频 | 成年色黄APP下载 | ZZoo兽2皇 | 999视频精品全部免费观看 | www精品一区二区三区四区 |