精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

你的分層架構(gòu)還好嗎?

開發(fā) 架構(gòu)
當(dāng)我們開始一個新的項目,我們就開始創(chuàng)建一個個折文件夾。哦,不對,那我們在做分層架構(gòu)設(shè)計。架構(gòu)最后落到現(xiàn)有的計算機操作系統(tǒng)上,其的展示形式是分層架構(gòu)。畢竟,硅基不如碳基。

 分層架構(gòu),不就是建文件夾的藝術(shù)嗎?

[[285132]]

注:本文更適用于中大型項目,小項目開心就好了。因為時代的原因,對部分詞匯描述可能不是那么準(zhǔn)確,歡迎指正。

當(dāng)我們開始一個新的項目,我們就開始創(chuàng)建一個個折文件夾。哦,不對,那我們在做分層架構(gòu)設(shè)計。架構(gòu)最后落到現(xiàn)有的計算機操作系統(tǒng)上,其的展示形式是分層架構(gòu)。畢竟,硅基不如碳基。

可是呢,為什么我們要做分層架構(gòu)設(shè)計呢?通過層(Layer)來隔離不同的關(guān)注點。

So,我要開始瞎扯了。

基本思想:關(guān)注點分離,劃分邊界

注:三層架構(gòu)(controller-service-model)并非等于于 MVC 架構(gòu)模式。對于其的錯誤等同,導(dǎo)致了架構(gòu)上的一系列錯誤。

 

問題:落后的三層架構(gòu)

過去,我總以為對于大部分項目來說,三層分層架構(gòu)之外的部分是大泥球,即隨意化的代碼組織方式。然而,我發(fā)現(xiàn)對于大部分的項目來說,三層分層架構(gòu)的 service 也是個大泥球,我忘記了三層分層架構(gòu)的 model 層也是一堆大泥球。Controller 相對好一點,但是對于某些項目來說也是個小泥球。

大泥球是指一個隨意化的雜亂的結(jié)構(gòu)化系統(tǒng),只是代碼的堆砌和拼湊,往往會導(dǎo)致很多錯誤或者缺陷。

在今天 DDD + 整潔架構(gòu)流行的今天, 三層分層架構(gòu)已經(jīng)完全不能滿足現(xiàn)有應(yīng)用的需求,甚至看上去一團(tuán)糟糕。它存在這么一些問題:

  1. 統(tǒng)一管理是魔鬼,如 controller 文件夾下一堆的代碼,到處亂放的 model。
  2. 缺乏明確的職責(zé)劃分,如 controller 承擔(dān)了 service 的職責(zé)
  3. 臃腫的 service,和貧血的 model
  4. 三層分層之后的隨意文件組織方式,如 kafka 等到處亂放的代碼
  5. ……

可是,為什么會這樣呢?

  1. 職責(zé)(or 限界上下文)沒有劃分明確和清晰
  2. model 層存在大量的二義性
  3. 技術(shù)導(dǎo)向架構(gòu)模式
  4. ……

于是,我們有了一些基本的解決方案,或者說是套路。

重新定義:消除二義性

 

當(dāng)我們談?wù)?service 的時候,我們談?wù)摰氖峭粋€ service 嗎?

當(dāng)我們談?wù)?model 的時候,我們談?wù)摰氖峭环N model 嗎?

若對于一個文法的某一句子存在兩棵不同的語法樹,則該文法是二義性文法。

如果有多種不同類型的類,都被放置在 model 包下。那么,你應(yīng)該消除 model 這個包,改為更表意的名稱,如 Entity、* Request、* Response 等等。同理,一旦你們展開對某個名稱的討論時,是時候好好考慮其中的二義性。

最后,你還需要有一個相關(guān)領(lǐng)域的名詞表。

劃分邊界:業(yè)務(wù)導(dǎo)向架構(gòu)

開始之前不得不說的是:

  • 微服務(wù)是一種業(yè)務(wù)導(dǎo)向架構(gòu)。
  • 微服務(wù)是一種業(yè)務(wù)導(dǎo)向架構(gòu)。
  • 微服務(wù)是一種業(yè)務(wù)導(dǎo)向架構(gòu)。

所以,如果你的微服務(wù)劃分出現(xiàn)了不同的幾個技術(shù)維度的服務(wù),那么你需要好好反思一下。

So,為了迎接業(yè)務(wù)導(dǎo)向架構(gòu),我們需要以采用水平 + 垂直架構(gòu)的方式來重新劃分架構(gòu),將各業(yè)務(wù)模板的代碼聚合到各自的業(yè)務(wù)模板中,順便把大量地 util 和 common 內(nèi)聚到服務(wù)中。而它們都基于其它低層模板。

隨后,我們還可以嘗試將單體應(yīng)用拆分到微服務(wù)。

但是,我們都不應(yīng)該依賴于低層模塊,于是就有了……。

關(guān)注點分離:針對接口編程

我們看到了整潔架構(gòu):

 

在其中有一個非常重要的原則:

依賴倒置原則:高層模塊不應(yīng)該依賴于低層模塊,二者都應(yīng)該依賴于抽象。

這一點在大部分的項目中,已經(jīng)實踐得相關(guān)的好。畢竟,有各種各樣的 * Service + * ServiceImpl。

除此,為了實現(xiàn)這樣的目標(biāo),對于采用 DDD 架構(gòu)的應(yīng)用來說,在我們的 domain 層的限界上下文,除了包含自身的 entity、vo 等,它應(yīng)該還帶有 repository 的抽象。這樣一來,我們的 domain 層便不依賴

應(yīng)用分層:DDD 與整潔架構(gòu)

 

所以,讓我們來看個問題。這是一個在 GitHub 上 star 數(shù)接近 15K 的 Java 語言編寫的開源 CMS 中,某個模塊的代碼目錄:

  1. ├── cms-admin/ 
  2. ├── cms-common/ 
  3. ├── cms-dao/ 
  4. ├── cms-job/ 
  5. ├── cms-rpc-api/ 
  6. ├── cms-rpc-service/ 
  7. ├── cms-search/ 
  8. └── cms-web/ 

這是一個技術(shù)導(dǎo)向的應(yīng)用架構(gòu)。所以,當(dāng)我要新加一個功能的時候,我需要:

  1. 在 cms-dao 模塊中加一個 model 和一個 mapper
  2. 在 cms-rpc-service 模塊中加一個 service
  3. 在 cms-web 模塊中中加一個 controller

“完美”,沒有什么問題啊。

而隨著時間的推移,你現(xiàn)在已經(jīng)有一個巨大無比的 model 層,修改代碼時需要在不同的模塊跳轉(zhuǎn)。而不能快速修改相關(guān)的代碼。甚至于,你無法采用微服務(wù)架構(gòu),你是一個巨大的單體應(yīng)用。

為了挽救這樣的一個項目,我們不得不嘗試做一些事情。

切割基礎(chǔ)設(shè)施

 

你的基礎(chǔ)設(shè)施自開發(fā)完成之后,基本不變,而你的業(yè)務(wù)代碼一直在發(fā)生變化。

引起技術(shù)實現(xiàn)發(fā)生變化的原因與引起領(lǐng)域邏輯發(fā)生變化的原因顯然不同,這就導(dǎo)致基礎(chǔ)設(shè)施和領(lǐng)域邏輯問題會以不同速率發(fā)生變化。——《領(lǐng)域驅(qū)動設(shè)計模式、原理與實踐》

當(dāng)你來到一個項目一眼看到這么多基礎(chǔ)設(shè)施相關(guān)的目錄結(jié)構(gòu)時:

  1. ├── controller 
  2. ├── interceptor 
  3. ├── jms 
  4. ├── rocketmq 
  5. ├── schedule 
  6. └── task 

有一天,我們又加了一個 Kafka,我們又不新加一個文件夾,而這樣的分層設(shè)計看上去沒有一點組織。然后呢,我們打開目錄的時候,無法快速定位到我們的代碼。

除了從目錄上 infrastructure 包/層,容納相關(guān)的基礎(chǔ)設(shè)施代碼。我們還要考慮到分層上的單一職責(zé),因為需要剝離基礎(chǔ)設(shè)施與業(yè)務(wù)代碼的關(guān)系。所以,為了實現(xiàn) Clean Architecture 的大業(yè),你還需要一層抽象接口,比如你要訪問存儲業(yè)務(wù)相關(guān)的數(shù)據(jù)。那么抽象在你的 domain 中,具體的 RepositoryImpl 實現(xiàn)是在你的基礎(chǔ)設(shè)施。

離心分離模型

 

在一個系統(tǒng)中,你會存在這么一些不同的 model:

(PS:部分描述可能不準(zhǔn)確,歡迎指正)

  • 與數(shù)據(jù)庫表結(jié)構(gòu)對應(yīng)的 DO( Data Object)/ PO(Persistant Object)。
  • 查詢數(shù)據(jù)的 Query、Request。
  • 對外傳輸?shù)膶ο螅篋TO( Data Transfer Object)。
  • 業(yè)務(wù)層之間的數(shù)據(jù)對象:VO(Value Object) / BO(Business Object)。
  • 訪問數(shù)據(jù)庫的:DAO (Data Access Object數(shù)據(jù)訪問對象)。
  • 以及我們想要的 DDD 中的實體 Entity
  • 還有其它的 POJO( Plain Ordinary Java Object)

但是它們都是 model,所以它們都被扔到 model 中……,又或者是 bean 中……。導(dǎo)致,你有了一個巨大比的 model 層。

所以,在 DDD 又或者是 Clean Architecture,我們重新命名了不同的模式:

  • 使用 Command / Request 作為輸入?yún)?shù)。其中的 Command 模式在完成后需要發(fā)出對應(yīng)的 Event。
  • 使用 Response / DTO / Representation 作為返回結(jié)果。
  • 對 Entity 大家保持了一致的意見
  • 還有 PO / DO 作為作為數(shù)據(jù)庫的存儲模型
  • DAO 作為數(shù)據(jù)庫的訪問模型
  • ……

不過,其實你只要不再讓使用 model 和 bean,相似會有更多地收獲。

以領(lǐng)域為核心,豐富行為

 

當(dāng)完成了大坨的移動文件夾操作之后,我們來到了最麻煩和復(fù)雜的一部分。

我們需要對領(lǐng)域模型進(jìn)行重新建模,重新規(guī)劃 model 和 service,讓 model 變成了富血模型。也許,你需要一場 Event Storming,才能完成真正意義的事件風(fēng)暴建模。不過,步驟上也不會有太多的差異。

  1. 重新劃分包。即在保持業(yè)務(wù)不中斷的情況下重構(gòu),以讓新的代碼運行在新的架構(gòu)上。
  2. 分析抽象領(lǐng)域模型
  3. 編寫 API 測試,保證現(xiàn)有的功能
  4. 編寫抽象接口,進(jìn)行依賴反轉(zhuǎn)
  5. 拆分 service 層,重構(gòu)代碼。將行為綁定于是領(lǐng)域?qū)ο笊稀?/li>

其它的情況,還要進(jìn)行 case by case 的分析。

剩下的呢?

共享的業(yè)務(wù)邏輯,可以采用 sharedkernel,或者其它模式來處理。

待繼續(xù)補充。

代碼共用分層:功能內(nèi)聚

 

創(chuàng)建通用的共享組件導(dǎo)致了一系列問題,比如耦合、協(xié)調(diào)難度和復(fù)雜度增加。

當(dāng)我看到一個個巨大的 common 包時,我開始痛恨 common、 base、 util 這些該死的包,還有它們目錄下統(tǒng)一管理的 bean。我們真的已經(jīng)把它們用爛了,所以你應(yīng)該重新審視一下你的項目代碼。

所以,從這種意義上來說:復(fù)用與低耦合,本身存在一定的互斥關(guān)系。

base 下的 base

過去,我曾經(jīng)重構(gòu)過一個 base 項目的代碼,正是這次重構(gòu)讓我意識到 base 并不是一個好東西。如果在項目中已經(jīng)抽取出了一個 base 模塊,那么這個模塊下是不應(yīng)該存在 base 這樣的業(yè)務(wù)邏輯。而且,base 這個東西導(dǎo)致了一個問題是,只要是共用的東西就會不加思索的扔到 base 中。

你會有一個 base 的包,放著各種抽象接口,但是你需要一個更好的名字,比如 concepts,比如 support。

總之,你不應(yīng)該存在 base 模塊,讓開發(fā)人員思考一下哪去放新的類。

無比臃腫的 bean 和 model

“這本身是怪不得程序員的,要怪就怪該死的 Java 語言。”

轉(zhuǎn)而,我開始考慮一個問題,當(dāng)個包(文件夾)下的文件數(shù)是否不應(yīng)該超過一定的數(shù)量?

如果一個包下的類數(shù),超過一定的范圍,那么我們應(yīng)該考慮是否存在職責(zé)相似的類。

這部分可以參考上一部分的離心分離模型。

什么不是 common

common 這個名字真的很爛,比 base 和 model 更爛。

一旦你從項目中拆出了一個 common 模塊,那只會有一個結(jié)果,你將得到一個 5G 時代的 jar 包。甚至于,你看到有一塊代碼在 IDE 中是灰色的、未使用的,你也不敢輕易去刪除這些代碼。直到有一天,這個 common 包構(gòu)建出來的大小有 10M、20M,而你只需要引用一個 AESUtil 的時候,你才發(fā)現(xiàn)了問題:原本幾十 K 的 hello, world,現(xiàn)在變成了幾十 M。

不要事先創(chuàng)建 common 模塊,你可能不會有這個模塊。

任何的水平分層拆分應(yīng)用,在項目復(fù)雜化的今天都是不靠譜的。

誰用誰管理,而不是覺得是 common 就扔 common 模塊。

它真是個 util 嗎?

 

哦,不,它是個惡魔,因為它是 util。

你會往 xxUtil 不加思索地扔入邏輯,正如你會往 common/bean 中扔入所有的 model,直次有一天,你擁有一個巨大無比的 base、common 代碼。

大多數(shù)情況下,所有和業(yè)務(wù)相關(guān)的 Util 都存在一定的問題,如 CaptchaUtil,它要么應(yīng)該劃到自己的上下文中去,要么扔到諸如于 domain/shared 等共享上下文,而不是和其它 util 放到一起。

而諸如 FileUtil、DateUtil、RedisUtil、JdbcUtil 這些都可以說是基礎(chǔ)設(shè)施相關(guān)的部分,它們可以劃到 infrastructure/file 又或者是 infrastructure/date 目錄下,而不是統(tǒng)一的管理這些 util。

如 StackOverflow 的相關(guān)問題所列,我們還有諸如 Coordinator、Builder、Writer、Reader、Handler、Container、Protocol、Target、Converter、Controller、View、Factory、Entity、Bucket 等名稱。

試著干掉 Util,你將收獲更多的類,笑~。

需要個例子?

看看 Spring Framework 的源碼的分層結(jié)構(gòu),如 Spring Orm:

  1. └── orm 
  2.  ├── ObjectOptimisticLockingFailureException.java 
  3.  ├── ObjectRetrievalFailureException.java 
  4.  ├── hibernate5a/ 
  5.  ├── jpa/ 
  6.  └── package-info.java 

又或者是 spring-context 下的目錄分層結(jié)構(gòu):

  1. └── springframework 
  2.  ├── cache 
  3.  │   ├── annotation 
  4.  │   ├── concurrent 
  5.  │   ├── config 
  6.  │   ├── interceptor 
  7.  │   └── support 
  8.  ├── context 
  9.  │   ├── annotation 
  10.  │   ├── config 
  11.  │   ├── event 
  12.  │   ├── expression 
  13.  │   ├── i18n 
  14.  │   ├── index 
  15.  │   ├── support 
  16.  │   └── weaving 

它們都在自己的限界上下文內(nèi),維護(hù)自己的 annotaion、bean、support、i18n 等等的包。

分層架構(gòu)重構(gòu)

 

所以,我們可以嘗試這么去做架構(gòu)重構(gòu)

  1. 分析、診斷現(xiàn)有項目結(jié)構(gòu)
  2. 劃分新的分層架構(gòu)
  3. 功能測試
  4. 使用抽象解耦依賴
  5. 進(jìn)行細(xì)粒度的代碼重構(gòu)
  6. 重新劃分領(lǐng)域服務(wù)

還有嗎?

  1. 不要預(yù)先設(shè)計,而是定義原則與規(guī)范。
  2. 以簡單的設(shè)計開始,在生命周期中演進(jìn)架構(gòu)。
  3. 以多個 common 包,替代統(tǒng)一的 common 包
  4. TBC。

結(jié)論

 

那么,我們怎么才能做好分層架構(gòu)呢?

by experience。

哦,不對,DDD 大法好。

責(zé)任編輯:武曉燕 來源: Phodal phodal
相關(guān)推薦

2012-05-11 09:45:07

海量數(shù)據(jù)

2022-02-22 19:26:58

Wi-Fi 6EWi-Fi 7Wi-Fi 6

2009-07-27 10:11:08

富士康孫丹勇

2019-05-23 11:23:50

2013-07-15 09:57:24

微軟SaaSTurner

2023-03-09 08:13:34

2022-05-17 14:17:50

物理安全網(wǎng)絡(luò)攻擊網(wǎng)絡(luò)安全

2020-11-17 09:15:21

ColabJupyterPython

2021-06-17 07:47:03

軟件架構(gòu)分層

2019-12-18 15:05:17

運營商5G物聯(lián)網(wǎng)

2023-01-05 08:12:11

分層應(yīng)用代碼

2015-03-12 11:04:39

App StoreDNS宕機

2015-03-12 09:57:44

App StoreDNS宕機

2009-06-02 09:48:36

分層架構(gòu)PetShop.NET

2023-08-02 08:51:46

服務(wù)架構(gòu)分層架構(gòu)

2025-11-14 09:13:52

2023-04-07 14:04:51

AI

2024-03-29 12:50:00

項目分層模型

2023-06-16 13:34:00

軟件架構(gòu)模式

2020-08-12 09:44:10

AI 數(shù)據(jù)人工智能
點贊
收藏

51CTO技術(shù)棧公眾號

精品少妇一区二区三区免费观看| 国产精品久久久久久久久晋中 | 日本中文字幕不卡| 日韩在线免费av| 奇米视频7777| heyzo高清中文字幕在线| www.久久精品| 91精品久久久久久久久| www.av视频在线观看| av亚洲免费| 亚洲第一精品福利| xxww在线观看| 蜜桃视频在线观看免费视频| 欧美国产1区2区| 国产一级特黄a大片99| 中文字幕一区二区人妻痴汉电车| 黄色在线成人| 一区二区三区高清国产| www.555国产精品免费| 99只有精品| 天天综合色天天| 在线播放 亚洲| 日本黄在线观看| 国产成人精品三级| 国产精品偷伦免费视频观看的| 久操免费在线视频| 国产精品久久久久9999赢消| 亚洲免费伊人电影在线观看av| 天堂av.com| 中国色在线日|韩| 亚洲一区欧美一区| 一区二区在线观看网站| 黄色片在线看| 91丨porny丨最新| 国产亚洲欧美一区二区 | 亚洲国产一区二区三区四区| 激情文学亚洲色图| 青青热久免费精品视频在线18| 精品国产福利视频| 欧美一级片免费播放| 尤物视频在线看| 综合在线观看色| 亚洲一区二区三区免费看| 激情在线视频| 久久综合中文字幕| 久久久久一区二区| 婷婷色在线观看| 成人福利视频网站| 国产精品二区三区| 亚洲精品国产一区二| 国产高清久久久久| 99国产超薄丝袜足j在线观看| 国产农村妇女毛片精品久久| 九一九一国产精品| 91在线观看免费高清完整版在线观看| 波多野结衣家庭主妇| 日韩精品国产欧美| 国产精品国内视频| 一区二区视频播放| 美女一区二区三区| 国产日韩在线看| 国产精品无码久久av| 国精产品一区一区三区mba视频| 国产在线a不卡| 99久久精品日本一区二区免费| 激情深爱一区二区| 99在线国产| 午夜视频1000| 国产日产欧美精品一区二区三区| 日韩福利影院| 欧美成人三区| 亚洲在线视频网站| 黄色国产一级视频| 六月婷婷综合| 欧美日韩国产色站一区二区三区| 欧美性受xxxxxx黑人xyx性爽| 精品午夜av| 欧美成人一区二区三区片免费| 国产成人精品综合久久久久99| 超碰在线一区| 亚洲欧美综合区自拍另类| 来吧亚洲综合网| 国产综合激情| 国内精品久久影院| 五月婷婷激情五月| 国产乱码精品一区二区三区av| 91精品国产综合久久香蕉的用户体验| 99热这里只有精品在线| av日韩在线网站| 五月天亚洲综合| 中文国产字幕在线观看| 欧美视频一区二区三区…| 久久99爱视频| 久久九九热re6这里有精品| 亚洲午夜色婷婷在线| 综合五月激情网| 国产精品永久| 国产在线视频不卡| 天堂中文网在线| 日韩美女精品在线| 男女超爽视频免费播放| 欧美午夜三级| 精品成人在线观看| 调教驯服丰满美艳麻麻在线视频| 最新精品国产| 7m精品福利视频导航| 国产精品久久久久久无人区| 91色在线porny| 国产又粗又大又爽的视频| 国产高清不卡| 亚洲成av人乱码色午夜| 国产在视频线精品视频| 国产日韩欧美三区| 97se亚洲综合在线| av黄色在线观看| 日韩欧美精品中文字幕| 婷婷激情综合五月天| 九九综合九九| 国内自拍欧美激情| 精品国产亚洲一区二区麻豆| 国产精品亲子伦对白| 国产精品wwwww| 国产精品白丝一区二区三区| 久久在精品线影院精品国产| 国产免费一区二区三区四区五区 | 成人欧美视频在线| 国产在线更新| 欧美色综合久久| 一色道久久88加勒比一| 国产精品视频久久一区| 成人免费视频网站入口| caoporn97在线视频| 欧美日韩成人在线| 国产在线综合视频| 久久av在线| 久久精品日产第一区二区三区乱码 | 免费观看性欧美大片无片| 深夜福利日韩在线看| 亚洲国产无线乱码在线观看| 久久久国产精品午夜一区ai换脸| 久久亚洲中文字幕无码| 久久精品国产亚洲5555| 97久久伊人激情网| 欧美特级特黄aaaaaa在线看| 亚洲一级电影视频| 折磨小男生性器羞耻的故事| 伊人精品在线| 国产美女精品在线观看| 欧美人与禽猛交乱配| 欧美成人精品二区三区99精品| 日韩精品一区二区亚洲av性色| 久久av中文字幕片| gogogo免费高清日本写真| 99视频有精品高清视频| 成人444kkkk在线观看| 国产视频一区二区三区四区五区| 中文字幕日本乱码精品影院| 久久6免费视频| 欧美在线免费| 国产精品一码二码三码在线| 美女扒开腿让男人桶爽久久软| 日韩成人中文字幕| 日韩三级一区二区| 国产精品毛片久久久久久| www.51色.com| 精品1区2区3区4区| 久久影院理伦片| h1515四虎成人| 久久在线免费视频| 免费国产精品视频| 欧美性猛xxx| 日韩免费av一区| 国产不卡视频在线播放| www.爱色av.com| 日韩av片子| 97久久夜色精品国产九色| 伦理在线一区| 亚洲午夜精品久久久久久性色| 一级久久久久久久| 亚洲第一搞黄网站| 美女被到爽高潮视频| 日本不卡不码高清免费观看| 伊人网在线免费| 日韩黄色网络| 成人久久18免费网站图片| jizz一区二区三区| 国产亚洲欧美aaaa| 亚洲成人一级片| 色94色欧美sute亚洲线路二| 久久久久久视频| 97人人爽人人| 亚洲欧美bt| www.午夜色| 亚洲成在人线免费观看| 91中文在线观看| 国产精品一区二区av影院萌芽| 久久久精品视频成人| 欧美日韩影视| 日韩三级高清在线| 懂色av蜜臀av粉嫩av喷吹 | 日本少妇性生活| 毛片a片免费观看| 成人午夜视屏| 色哟哟入口国产精品| 亚洲av无码片一区二区三区| 色婷婷激情综合| 欧美三级免费看| 国产欧美一区二区精品性| 97中文字幕在线观看| 免费美女久久99| 人妻有码中文字幕| 韩国av一区| 中文字幕精品一区日韩| 精品影片在线观看的网站| 999热视频| 亚洲18在线| 国产精品久久久久久久app| 日韩在线伦理| 久久久久久久久国产| 黄色网页在线看| 国产一区二区三区四区福利| 亚洲av电影一区| 亚洲成人a级网| 亚洲av无码国产综合专区| 欧美乱妇15p| 久久久久久av无码免费看大片| 欧美午夜影院在线视频| 黄网站免费在线| 亚洲黄色在线视频| 国产suv精品一区二区68| 国产精品私人影院| 亚洲永久无码7777kkk| 成人污污视频在线观看| 久久黄色一级视频| 国内精品在线播放| 九一精品久久久| 精品亚洲免费视频| 国产5g成人5g天天爽| 精品在线播放免费| 中文字幕精品一区二区三区在线| 人妖欧美一区二区| 性生交免费视频| 美女在线一区二区| 中文字幕免费高清在线| 久久99精品国产.久久久久久| 天天干天天操天天做| 麻豆一区二区99久久久久| www.涩涩涩| 久久精品国产精品亚洲红杏 | 日本aⅴ亚洲精品中文乱码| av网址在线观看免费| 天堂一区二区在线| 黄色aaa级片| 看电视剧不卡顿的网站| 亚洲妇熟xx妇色黄蜜桃| 国产河南妇女毛片精品久久久| 手机av在线网站| 国产精品18久久久| 人妻互换一二三区激情视频| 99久久精品国产一区二区三区 | 91精品国产沙发| 在线高清av| 国产精品国产三级国产专播精品人| 国产经典一区| 51国产成人精品午夜福中文下载| 五月亚洲婷婷| 美脚丝袜一区二区三区在线观看| 九九热精品视频在线观看| 亚洲不卡1区| 久久精品国产www456c0m| 糖心vlog在线免费观看| 亚洲香蕉网站| 欧美牲交a欧美牲交aⅴ免费下载| 日韩成人一级片| 伦伦影院午夜理论片| 91影院在线观看| 肉色超薄丝袜脚交69xx图片 | 国产天堂亚洲国产碰碰| 日本激情视频一区二区三区| 亚洲一区在线视频观看| xxxx.国产| 欧美日韩成人综合| 黑人操亚洲女人| 亚洲一区第一页| 丝袜中文在线| 日韩av电影手机在线观看| 亚洲欧美综合久久久久久v动漫| 成人在线看片| 欧美色婷婷久久99精品红桃| 国产资源第一页| 久久成人亚洲| 中文字幕一二三区| 国产日韩欧美激情| 久久精品亚洲无码| 欧美剧情电影在线观看完整版免费励志电影| 99久久久久久久| 亚洲欧美综合另类中字| 久操av在线| 国产色视频一区| 色天下一区二区三区| 欧美与动交zoz0z| 亚欧成人精品| 91人人澡人人爽| 国产精品久久久久久亚洲伦| 日韩字幕在线观看| 91精品国模一区二区三区| 日本v片在线免费观看| 欧美刺激性大交免费视频| 久久久人成影片一区二区三区在哪下载 | 免费看污视频的网站| 精品少妇一区二区三区在线视频| 91免费在线| 日韩av123| 开心激情综合| 男的插女的下面视频| 国产在线观看一区二区| 亚洲AV无码成人精品区明星换面| 亚洲国产日产av| 国产手机av在线| 日韩在线播放一区| 亚洲精品粉嫩美女一区| 精品在线不卡| 日韩亚洲精品在线| 欧美久久久久久久久久久| 日韩理论片网站| 91在线观看喷潮| 色哟哟网站入口亚洲精品| 日韩在线短视频| 欧美综合激情| 葵司免费一区二区三区四区五区| 香港三级日本三级| 亚洲成人在线观看视频| 亚洲国产精品suv| 久久国产精彩视频| 成人免费91| 男女激烈动态图| 国产激情视频一区二区在线观看 | 东热在线免费视频| 国产精品美女av| 日韩成人综合| 黄色在线视频网| 中文在线一区二区 | 欧美大片拔萝卜| 黄色影院在线看| 国产精品国模大尺度私拍| 黄色成人91| 伊人网综合视频| 精品久久久久久久久久久| 无码精品视频一区二区三区| 性欧美长视频免费观看不卡| 伦理一区二区三区| 欧美性大战久久久久xxx| 久久久夜色精品亚洲| 免费视频网站在线观看入口| 伊人av综合网| 国产专区精品| 全黄性性激高免费视频| 99热这里都是精品| aaaaaa毛片| 日韩中文字幕第一页| 麻豆国产一区二区三区四区| 国产又粗又猛又爽又黄的网站| 成人免费高清在线| 在线能看的av| 亚洲小视频在线| 91麻豆精品| 久无码久无码av无码| 久久综合色之久久综合| 国产精品国产精品国产| 久久精品最新地址| 粉嫩久久久久久久极品| 免费观看日韩毛片| 国产精品久久久久永久免费观看| 国产福利视频导航| 欧美性视频精品| 色88久久久久高潮综合影院| 色欲无码人妻久久精品| 欧美日韩午夜剧场| 日韩免费网站| 国产日韩一区二区三区| 日韩激情中文字幕| 五月天av网站| 精品亚洲男同gayvideo网站 | 午夜影院日韩| 在线免费看av网站| 日韩国产精品亚洲а∨天堂免| 欧美日一区二区三区| 国产一区 在线播放| 久久久久久久性| 国产高清视频免费| 日产精品99久久久久久| 亚洲精品97| 男人天堂av电影| 精品国产一区二区三区久久影院| 欧美福利在线播放| 国产欧美日韩网站| 中文字幕一区二区三| 色综合888| 超碰国产精品久久国产精品99| 日韩成人一级大片|