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

網(wǎng)易二面:阿里為何建議MVC+Manager層混合架構(gòu)?

開發(fā) 架構(gòu)
我們可以看到,引入 Manager 層可以有效地解決傳統(tǒng) MVC 三層架構(gòu)中存在的問題,使系統(tǒng)的架構(gòu)更加清晰、合理,提高系統(tǒng)的可維護(hù)性和性能。希望本文對大家在系統(tǒng)架構(gòu)設(shè)計(jì)方面有所幫助。

初入編程世界時(shí),前輩們總會教導(dǎo)我們,系統(tǒng)設(shè)計(jì)應(yīng)遵循 MVC(Model - View - Controller) 架構(gòu)。MVC 架構(gòu)就像一個(gè)精巧的齒輪組,將整個(gè)系統(tǒng)清晰地劃分為 Model(模型)、View(視圖)和 Controller(控制器)三個(gè)層次。它巧妙地把用戶視圖和業(yè)務(wù)處理隔離開來,再通過控制器將它們緊密連接,如同搭建起一座溝通的橋梁,實(shí)現(xiàn)了表現(xiàn)與邏輯的完美解耦,是軟件分層架構(gòu)中的經(jīng)典范式。

三層架構(gòu)三層架構(gòu)

MVC 分層架構(gòu)是架構(gòu)領(lǐng)域中最為基礎(chǔ)和簡單的分層方式。當(dāng)我們依據(jù)這種架構(gòu)構(gòu)建項(xiàng)目時(shí),通常會創(chuàng)建三個(gè)關(guān)鍵目錄:controller、service 和 dao,它們分別對應(yīng)著表現(xiàn)層、邏輯層和數(shù)據(jù)訪問層。

圖片圖片


下面,我們來詳細(xì)了解一下每層的具體作用:

  • Controller 層:它就像是交通樞紐的指揮者,主要負(fù)責(zé)對訪問請求進(jìn)行轉(zhuǎn)發(fā)。同時(shí),它還承擔(dān)著各類基本參數(shù)的校驗(yàn)工作,對于一些無需復(fù)用的簡單業(yè)務(wù),也可以在這里直接處理。
  • Service 層:這是業(yè)務(wù)邏輯處理的核心地帶,如同一位技藝精湛的工匠,精心雕琢著每一個(gè)業(yè)務(wù)流程。同時(shí),它還負(fù)責(zé)管理事務(wù),確保數(shù)據(jù)的一致性和完整性。
  • Dao 層:它是與底層數(shù)據(jù)庫(如 MySQL、Oracle 等)進(jìn)行數(shù)據(jù)交互的橋梁,負(fù)責(zé)將業(yè)務(wù)邏輯層的請求轉(zhuǎn)化為數(shù)據(jù)庫操作,為系統(tǒng)提供穩(wěn)定的數(shù)據(jù)支持。

然而,隨著業(yè)務(wù)的不斷發(fā)展和代碼量的持續(xù)增加,這種看似簡單明了的三層架構(gòu)逐漸暴露出一些問題。

MVC 架構(gòu)的弊端

傳統(tǒng)的 MVC 分層架構(gòu)存在以下幾個(gè)較為明顯的問題:

  1. Service 層代碼臃腫:隨著業(yè)務(wù)邏輯的日益復(fù)雜,Service 層需要處理的任務(wù)越來越多,代碼量不斷膨脹,在此,我想給大家送個(gè)福利,關(guān)注工眾號:碼猿技術(shù)專欄,回復(fù)關(guān)鍵詞:1111 即可獲取阿里內(nèi)部 Java 性能優(yōu)化手冊。導(dǎo)致代碼的可讀性和可維護(hù)性急劇下降。
  2. Service 層事務(wù)問題頻發(fā):在 Service 層,大事務(wù)和事務(wù)嵌套的情況時(shí)有發(fā)生。這些問題不僅會導(dǎo)致系統(tǒng)性能下降,還會使問題的排查變得異常困難,給開發(fā)和維護(hù)工作帶來巨大挑戰(zhàn)。
  3. Dao 層業(yè)務(wù)邏輯混雜:Dao 層原本應(yīng)該專注于數(shù)據(jù)訪問,但在實(shí)際開發(fā)中,往往會摻雜一些業(yè)務(wù)邏輯,這使得代碼的職責(zé)不夠清晰,增加了代碼的耦合度。
  4. Dao 層 SQL 語句復(fù)雜:隨著業(yè)務(wù)的發(fā)展,Dao 層的 SQL 語句變得越來越復(fù)雜,關(guān)聯(lián)查詢大量增加。這不僅會影響數(shù)據(jù)庫的性能,還會增加代碼的維護(hù)難度。

為了解決這些問題,我們可以參考《alibaba java 開發(fā)手冊》,在 Service 層之下新增一個(gè)通用業(yè)務(wù)處理層——Manager 層。

圖片圖片

在這個(gè)新的分層架構(gòu)中,Manager 層與 Service 層相互協(xié)作,各司其職。Manager 層提供原子性的服務(wù)接口,就像一個(gè)個(gè)標(biāo)準(zhǔn)化的零件;而 Service 層則根據(jù)業(yè)務(wù)邏輯的需求,對這些原子接口進(jìn)行編排組合,構(gòu)建出完整的業(yè)務(wù)流程。

Manager 層的特征

《alibaba java 開發(fā)手冊》對 Manager 層有如下描述:

Manager 層作為通用業(yè)務(wù)處理層,具有以下顯著特征:

  1. 第三方平臺封裝層:負(fù)責(zé)對第三方平臺的接口進(jìn)行封裝,對返回結(jié)果進(jìn)行預(yù)處理,并將異常信息進(jìn)行轉(zhuǎn)化,以適配上層接口的需求。
  2. Service 層通用能力下沉:將 Service 層的一些通用能力下沉到 Manager 層,如緩存方案的實(shí)現(xiàn)、中間件的通用處理等,提高代碼的復(fù)用性和可維護(hù)性。
  3. DAO 層組合復(fù)用:與 DAO 層進(jìn)行交互,對多個(gè) DAO 進(jìn)行組合復(fù)用,實(shí)現(xiàn)復(fù)雜業(yè)務(wù)的數(shù)據(jù)訪問需求。

在實(shí)際開發(fā)中,我們可以按照以下方式使用 Manager 層:

  1. 復(fù)雜業(yè)務(wù)處理:對于復(fù)雜的業(yè)務(wù)場景,Service 層負(fù)責(zé)準(zhǔn)備好所需的數(shù)據(jù),并將其傳遞給 Manager 層。Manager 層負(fù)責(zé)業(yè)務(wù)的編排和事務(wù)的處理,并且不允許相互調(diào)用,避免出現(xiàn)事務(wù)嵌套的問題。
  2. 通用業(yè)務(wù) DAO 封裝:Manager 層專注于編寫不包含業(yè)務(wù)邏輯的 SQL 語言,對通用業(yè)務(wù)進(jìn)行 DAO 層的封裝,提高代碼的復(fù)用性和可維護(hù)性。
  3. 復(fù)雜查詢拆分:為了避免復(fù)雜的 join 查詢對數(shù)據(jù)庫造成過大壓力,我們可以在 Manager 層對復(fù)雜查詢進(jìn)行拆分,將其轉(zhuǎn)化為多個(gè)簡單的查詢,減輕數(shù)據(jù)庫的負(fù)擔(dān)。

需要注意的是,對于簡單的業(yè)務(wù)場景,我們可以不使用 Manager 層,以免增加系統(tǒng)的復(fù)雜度。

Manager 層使用案例

下面,我們通過一個(gè)具體的例子來說明 Manager 層的使用場景。

假設(shè)我們有一個(gè)用戶系統(tǒng),其中有一個(gè)獲取用戶信息的接口。在傳統(tǒng)的三層架構(gòu)中,該接口調(diào)用邏輯 Service 層的 getUser 方法,getUser 方法再與 User DB 交互獲取數(shù)據(jù),具體流程如左圖所示。

這時(shí),產(chǎn)品提出了一個(gè)新的需求:在 APP 中展示用戶信息時(shí),如果用戶不存在,需要自動為用戶創(chuàng)建一個(gè)新用戶。同時(shí),HTML5 頁面需要保留之前的邏輯,即不需要創(chuàng)建用戶。

圖片圖片

在傳統(tǒng)的三層架構(gòu)下,邏輯層的邊界變得模糊不清,表現(xiàn)層也不得不承擔(dān)一部分業(yè)務(wù)邏輯。我們通常會在表現(xiàn)層 Controller 中添加業(yè)務(wù)邏輯處理代碼,將獲取用戶和創(chuàng)建用戶的接口進(jìn)行編排。

而引入 Manager 層之后,情況就大不一樣了。Manager 層提供創(chuàng)建用戶和獲取用戶信息的接口,就像提供了兩個(gè)獨(dú)立的工具;Service 層則負(fù)責(zé)將這兩個(gè)接口進(jìn)行組裝,構(gòu)建出完整的業(yè)務(wù)流程。這樣一來,原本分散在表現(xiàn)層的業(yè)務(wù)邏輯就被統(tǒng)一到了 Service 層,每一層的職責(zé)更加清晰明確。

接下來,我們通過一段實(shí)際代碼來看看 Service 層與 Manager 層是如何區(qū)分的。

傳統(tǒng)三層架構(gòu)代碼示例

@Transactional(rollbackFor = Throwable.class)
public Result<String> upOrDown(Long departmentId, Long swapId) {
    // 驗(yàn)證 1
    DepartmentEntity departmentEntity = departmentDao.selectById(departmentId);
    if (departmentEntity == null) {
        return Result.error("部門xxx不存在");
    }
    // 驗(yàn)證 2
    DepartmentEntity swapEntity = departmentDao.selectById(swapId);
    if (swapEntity == null) {
        return Result.error("部門xxx不存在");
    }
    // 驗(yàn)證 3
    Long count = employeeDao.countByDepartmentId(departmentId);
    if (count != null && count > 0) {
        return Result.error("員工不存在");
    }
    // 操作數(shù)據(jù)庫 4
    Long departmentSort = departmentEntity.getSort();
    departmentEntity.setSort(swapEntity.getSort());
    departmentDao.updateById(departmentEntity);
    swapEntity.setSort(departmentSort);
    departmentDao.updateById(swapEntity);
    return Result.OK("success");
}

這段代碼在傳統(tǒng)的三層架構(gòu)中很常見,但它存在一個(gè)明顯的問題——長事務(wù)問題(類似的情況還包括調(diào)用第三方接口)。在這段代碼中,前三步的驗(yàn)證操作都使用了同一個(gè)數(shù)據(jù)庫連接 connection。由于方法上添加了 @Transactional 注解,整個(gè)驗(yàn)證過程會一直占用該連接,占用時(shí)間可能會很長,直到方法執(zhí)行結(jié)束,連接才會被歸還給數(shù)據(jù)庫連接池。

對于復(fù)雜業(yè)務(wù)來說,這種長時(shí)間占用同一個(gè)數(shù)據(jù)庫連接的做法并不是一個(gè)好的選擇。我們應(yīng)該盡量縮短連接的占用時(shí)間,提高系統(tǒng)的性能和并發(fā)處理能力。

說明:對于@Transactional 注解,當(dāng) spring 遇到該注解時(shí),會自動從數(shù)據(jù)庫連接池中獲取 connection,并開啟事務(wù)然后綁定到 ThreadLocal 上,如果業(yè)務(wù)并沒有進(jìn)入到最終的 操作數(shù)據(jù)庫環(huán)節(jié),那么就沒有必要獲取連接并開啟事務(wù),應(yīng)該直接將 connection 返回給數(shù)據(jù)庫連接池,供其他使用。

引入 Manager 層后的代碼示例

// DepartmentService.java
public Result<String> upOrDown(Long departmentId, Long swapId) {
    // 驗(yàn)證 1
    DepartmentEntity departmentEntity = departmentDao.selectById(departmentId);
    if (departmentEntity == null) {
        return Result.error("部門xxx不存在");
    }
    // 驗(yàn)證 2
    DepartmentEntity swapEntity = departmentDao.selectById(swapId);
    if (swapEntity == null) {
        return Result.error("部門xxx不存在");
    }
    // 驗(yàn)證 3
    Long count = employeeDao.countByDepartmentId(departmentId);
    if (count != null && count > 0) {
        return Result.error("員工不存在");
    }
    // 操作數(shù)據(jù)庫 4
    departmentManager.upOrDown(departmentEntity, swapEntity);
    return Result.OK("success");
}

// DepartmentManager.java
@Transactional(rollbackFor = Throwable.class)
public void upOrDown(DepartmentEntity departmentEntity, DepartmentEntity swapEntity) {
    Long departmentSort = departmentEntity.getSort();
    departmentEntity.setSort(swapEntity.getSort());
    departmentDao.updateById(departmentEntity);
    swapEntity.setSort(departmentSort);
    departmentDao.updateById(swapEntity);
}

在引入 Manager 層之后,我們將數(shù)據(jù)準(zhǔn)備工作放在 Service 層,然后將數(shù)據(jù)傳遞給 Manager 層。Manager 層添加 @Transactional 事務(wù)注解,負(fù)責(zé)進(jìn)行數(shù)據(jù)庫操作。這樣一來,就避免了長事務(wù)問題,提高了系統(tǒng)的性能和可維護(hù)性。

通過以上的分析和示例,我們可以看到,引入 Manager 層可以有效地解決傳統(tǒng) MVC 三層架構(gòu)中存在的問題,使系統(tǒng)的架構(gòu)更加清晰、合理,提高系統(tǒng)的可維護(hù)性和性能。希望本文對大家在系統(tǒng)架構(gòu)設(shè)計(jì)方面有所幫助。

責(zé)任編輯:武曉燕 來源: 碼猿技術(shù)專欄
相關(guān)推薦

2021-04-25 09:58:48

mmapJava面試

2021-03-17 15:54:32

IO零拷貝方式

2023-03-26 00:48:14

CPUSQL性能

2021-12-28 14:53:47

Java編程語言

2024-03-22 13:31:00

線程策略線程池

2022-06-02 10:54:16

BrokerRocketMQ

2021-10-27 20:54:24

分庫分表高并發(fā)

2022-04-15 11:26:14

緩存功能

2022-10-18 08:38:16

內(nèi)存泄漏線程

2023-11-01 21:45:59

數(shù)據(jù)庫MySQL單表

2009-04-30 15:56:50

三層架構(gòu)MVCMVP

2009-07-28 15:08:50

MVC三層架構(gòu)實(shí)例

2025-02-26 07:53:21

2023-10-30 01:02:56

Java類類加載器雙親委派

2020-08-06 10:53:18

混合云多云云計(jì)算

2022-09-05 16:55:23

RocketMQBroker

2021-09-18 08:54:19

zookeeper一致性算法CAP

2025-05-06 07:45:12

2012-02-07 10:40:13

MVCJava

2014-02-11 10:27:21

阿里高德
點(diǎn)贊
收藏

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

高清在线观看av| 国产激情在线免费观看| 美女免费久久| 国产999精品久久| 2021国产精品视频| 五月天婷婷丁香网| xxxx日韩| 欧美色综合影院| 中文精品无码中文字幕无码专区| 特黄视频在线观看| 久久国产麻豆精品| 久久免费视频在线观看| 欧美巨胸大乳hitomi| 第四色在线一区二区| 欧美视频一区在线| heyzo亚洲| 超碰电影在线播放| 国产亚洲成年网址在线观看| 91久久精品www人人做人人爽| 国产剧情在线视频| 亚洲大片在线| 久久久精品免费| 强伦人妻一区二区三区| 成人动态视频| 91精品国产麻豆| 亚洲综合在线网站| 精品捆绑调教一区二区三区| 亚洲天堂av一区| 日本精品一区二区三区高清 久久| 亚洲a视频在线观看| 美女网站色91| 欧美有码在线观看| 五月天综合激情| 欧美特黄一区| 久久中文久久字幕| 日本在线观看网址| 狠狠色狠狠色综合婷婷tag| 亚洲变态欧美另类捆绑| 91精品视频国产| 精品176极品一区| 欧美日韩亚洲天堂| 缅甸午夜性猛交xxxx| 密臀av在线| 亚洲欧美视频一区| 一本一道久久久a久久久精品91| 神马电影在线观看| 99国产精品一区| 国产精品视频入口| 精品区在线观看| 国产一区三区三区| 成人做爽爽免费视频| 中文字幕精品在线观看| 日韩电影免费在线| 国产精品99久久久久久www| 特黄视频免费看| 国产免费成人| 欧美专区在线播放| 日韩精品在线免费视频| 国产精品夜夜夜| 18久久久久久| 亚洲精品男人的天堂| 蜜桃久久av| 日韩av免费在线| 波多野结衣高清视频| 男人操女人的视频在线观看欧美| 国产精品91久久| 中文字幕一区二区三区波野结| 免费在线看成人av| 成人h视频在线观看播放| 91女人18毛片水多国产| 国内精品国产成人| 国产精品免费视频一区二区 | 欧美91大片| 欧美大片在线看| 日韩av无码中文字幕| 西西裸体人体做爰大胆久久久| 国产成人精品免费视频| 亚洲影视一区二区| 国产一本一道久久香蕉| 粉嫩av一区二区三区免费观看| 天堂在线中文网| 国产人久久人人人人爽| 91免费网站视频| 阿v视频在线| 91搞黄在线观看| 中文字幕线观看| 动漫视频在线一区| 亚洲欧洲国产一区| 亚洲精品久久久久久国| 亚洲视频久久| 国产成人a亚洲精品| 国产又大又粗又长| 91啪亚洲精品| 色乱码一区二区三区熟女| 波多野结衣在线观看| 欧美在线观看18| 无码人妻丰满熟妇啪啪网站| 国产亚洲一区二区三区啪| 操91在线视频| 999视频在线| 懂色av一区二区三区蜜臀| 久中文字幕一区| av电影免费在线观看| 欧美日韩亚洲一区二| 欧美一级免费在线| 色综合综合色| 久久999免费视频| 精品免费囯产一区二区三区| 国产盗摄精品一区二区三区在线| 欧美日韩天天操| 成人午夜在线影视| 日本精品视频一区二区| 日韩成人av影院| 欧美色图国产精品| 亚洲97在线观看| 国产免费黄色网址| 国产欧美日韩综合精品一区二区| 人人妻人人澡人人爽欧美一区| 97人人做人人爽香蕉精品| 亚洲国产精品成人va在线观看| 在线视频这里只有精品| 男女精品网站| 国产欧美一区二区三区不卡高清| 免费大片黄在线观看视频网站| 狠狠躁夜夜躁人人爽超碰91| 美女网站视频在线观看| 亚洲精品极品少妇16p| 日本人成精品视频在线| 秋霞网一区二区| 亚洲理论在线观看| 国产探花在线看| 国产亚洲一卡2卡3卡4卡新区| 7m精品福利视频导航| 亚洲精品第五页| 一区二区三区四区亚洲| 亚洲免费黄色网| 第一会所sis001亚洲| 国产不卡在线观看| 久色视频在线| 91久久香蕉国产日韩欧美9色| 亚洲中文字幕一区| 日韩网站在线| 精品伦精品一区二区三区视频 | 亚洲激情图片一区| 日本中文字幕观看| 999久久久国产精品| 国产欧美精品久久久| h视频在线免费| 欧美日韩一区视频| 中国美女黄色一级片| 欧美aaa在线| 特级西西444www大精品视频| 国产经典一区| 最近更新的2019中文字幕| 亚洲免费视频二区| 国产精品精品国产色婷婷| 制服丝袜综合网| 97精品国产福利一区二区三区| 国产精品视频xxxx| 国产丝袜在线| 日韩美一区二区三区| 国产一级一片免费播放放a| 成人网男人的天堂| 日韩在线综合网| 欧美精品系列| 成人淫片在线看| 免费不卡av| 亚洲欧美日韩在线高清直播| 波多野结衣不卡| 国产精品电影院| 色网站在线视频| 激情欧美一区二区三区| 精品日本一区二区三区| 欧美黄色网页| 久久黄色av网站| 人妻与黑人一区二区三区| 欧美日韩另类字幕中文| 亚洲女优在线观看| 国产在线视视频有精品| 毛片在线播放视频| 国产日韩视频在线| 亚洲mm色国产网站| 午夜av不卡| 中文字幕亚洲一区在线观看 | 亚洲欧美国产日韩中文字幕| 亚洲网站在线免费观看| 一区二区三区av电影| 亚洲欧美视频在线播放| 久久精品国产成人一区二区三区 | 91精品国产综合久久精品| 久久9999久久免费精品国产| 国产欧美一区二区精品秋霞影院 | 91亚洲精品乱码久久久久久蜜桃| 91国产精品视频在线观看| 午夜精品网站| 色爱区成人综合网| 岛国精品一区| 国产精品一区二区久久久| 黄色大片在线| 伊人久久久久久久久久久久久| 国产精品人妻一区二区三区| 精品久久久一区二区| 国产精品99久久久久久成人| 2017欧美狠狠色| 天天色天天干天天色| 美女日韩在线中文字幕| 91免费国产精品| 日韩理论电影大全| 精品一区二区三区日本| 精品一区二区三区中文字幕视频| 欧美影院在线播放| 久草在线视频福利| 精品国偷自产在线视频| 国内三级在线观看| 亚洲第一页自拍| 国产av一区二区三区| 色屁屁一区二区| 日韩精品无码一区二区| 伊人婷婷欧美激情| 欧美一区二区三区观看| 久久久久久久久伊人| 日本少妇xxxx软件| 狠狠色丁香婷综合久久| 国产又大又黄又粗的视频| 国产精品久久久久久模特| 2022中文字幕| 国产精品成人a在线观看| 视频在线99re| 美日韩中文字幕| 精品一区国产| 国产伦理久久久久久妇女| 2014国产精品| 国产亚洲精aa在线看| 国产综合福利在线| 99只有精品| 国产精品久久久久久一区二区| 亚洲日本天堂| 国产91精品久久久久久| 成人免费图片免费观看| 久久久免费电影| 丝袜中文在线| 欧美韩国理论所午夜片917电影| 动漫一区在线| 欧美精品一区三区| 欧美人体视频xxxxx| 久久成人精品一区二区三区| 超碰公开在线| 欧美二区乱c黑人| 特级毛片在线| 国产69精品久久久久99| 丰满诱人av在线播放| 色综合色综合网色综合| 福利小视频在线| 97福利一区二区| av资源亚洲| 国产成人精品视频在线| 91福利精品在线观看| 国产精品尤物福利片在线观看| 国产伊人久久| 亚洲一区二区三区xxx视频| 一区二区三区欧洲区| 国产精品一区二区不卡视频| 青青草原在线亚洲| 日本不卡二区高清三区| 成人短片线上看| 欧美日韩一区二区三区电影| 国产精品www994| 你懂的av在线| 丝袜美腿亚洲综合| www.99r| 国产精品伊人色| av鲁丝一区鲁丝二区鲁丝三区| 久久先锋影音av| 成人精品一二三区| 一区二区三区中文在线| 中文字幕亚洲精品在线| 91黄色免费看| 97视频免费在线| 亚洲精品成人久久| 丁香婷婷在线观看| 欧美大片免费观看| 国产免费不卡| 亚洲va欧美va在线观看| 欧美一级全黄| 自拍偷拍视频在线| 亚洲欧美久久| 久久精品亚洲天堂| 91亚洲资源网| 老熟妇高潮一区二区三区| 性感美女极品91精品| 波多野结衣视频在线观看| 欧美一区二区三区播放老司机| 性做久久久久久久久久| 国产偷亚洲偷欧美偷精品| 视频一区二区三区不卡| 久久欧美在线电影| 久久婷婷五月综合色丁香| 国产精品入口免费| 欧美电影免费观看高清| 99国产精品白浆在线观看免费| 久久高清免费观看| 一区二区三区四区影院| 国产精品免费免费| 国偷自拍第113页| 欧美一区二区三区电影| 国产在线视频你懂得| 久久人人爽人人爽人人片av高清| h1515四虎成人| 精品伦理一区二区三区| 欧美国产免费| 亚洲欧美日韩精品一区| 国产婷婷色一区二区三区在线| 黄色一级片在线| 欧美日韩在线直播| 欧美另类自拍| 91av在线播放视频| 综合成人在线| 中国一级黄色录像| 麻豆精品久久久| 国产黄片一区二区三区| 午夜精品久久久久久| 亚洲国产综合网| 日韩在线视频网站| 精品日本视频| 日韩精品无码一区二区三区| 国产情侣一区| 污片免费在线观看| 亚洲一区在线观看网站| 国产高清免费观看| 久久精品人人爽| 亚洲欧美一级| 亚洲欧洲精品在线观看| 全部av―极品视觉盛宴亚洲| 中文字幕在线免费看线人 | 伊人久久久久久久久久久久久 | 国产精品日日做人人爱| 九热爱视频精品视频| 国产成人亚洲精品无码h在线| 99免费精品在线观看| 日韩精品视频免费播放| 亚洲精品99久久久久| av日韩国产| 精品国产乱码一区二区三区四区| 亚洲午夜一区| 国产真实乱人偷精品| 午夜欧美视频在线观看 | 91视频亚洲| 欧美 国产 精品| 国产乱妇无码大片在线观看| 强乱中文字幕av一区乱码| 日韩精品一区二区三区三区免费| 天天色天天射天天综合网| 99视频免费观看| 国产精品xvideos88| 日本护士做爰视频| 粉嫩av一区二区三区免费野| 国产在线视频资源| 国产精品视频色| 自拍视频亚洲| 亚洲天堂av网站| 欧美性猛交xxxx黑人| 国产二区在线播放| 成人免费直播live| 精品福利av| 亚洲专区区免费| 欧美亚洲综合另类| 好了av在线| 国产另类第一区| 日韩国产在线观看一区| 多男操一女视频| 亚洲а∨天堂久久精品9966| 网友自拍亚洲| 佐佐木明希av| 99久久婷婷国产精品综合| 嫩草影院一区二区三区| 久久视频在线免费观看| 精品伊人久久久| 久久久国产欧美| 亚洲一区二区中文在线| 欧美高清成人| 成人女保姆的销魂服务| 亚洲免费大片| 日本视频在线免费| 亚洲国产精品高清久久久| 电影一区电影二区| 国产青草视频在线观看| 久久精品亚洲国产奇米99| 国产毛片在线视频| …久久精品99久久香蕉国产| 天天超碰亚洲| 在线精品一区二区三区| 欧美日韩午夜精品| 1区2区3区在线| 一区二区在线不卡| 99re亚洲国产精品| 99久久久国产精品无码网爆| 欧美壮男野外gaytube| 亚洲色图插插| 国产探花视频在线播放| 亚洲丁香久久久|