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

如何應用數據模型?

開發 開發工具
面對這樣海量、復雜的數據,如果只靠著一個 API 請求的結果消費顯然是非常不可取的方案,先不說這些數據能不能正確的解析出來,就說這些數據如何維護,保存時如何收集到所有數據反向序列化給后端都是些頭疼的問題。

 ????一 前言

Vmo 是我在 18 年發布的一個工具庫,用于快速創建數據模型,當時我寫了一篇文章《Vmo 前端數據模型設計》得到過一段時間的關注,當時我從事三維裝修相關的項目。在圖形學的背景基礎及海量復雜的數據的情況下,自然而然在前端則會衍生出一種數據處理、解析、消費的技術方案,也種下了我對數據模型概念的種子。

簡單舉個例子:需要解析一個三維裝修的房子的數據會有哪些呢?

  • 房子(Hourse),樓層(Layer),房間(Room),墻體(Wall),墻面(WallSpace),墻角(Corner),吊頂(Ceiling),踢腳線(Skirting),地(Floor,帶厚度),地面(FloorSpace),門(Door),窗(Window)。
  • 以及會延伸出來大量的變體,比如飄窗,直角飄窗,弧形窗,墻洞,樓梯等等。

在解析這些數據中存在非常多的相互關聯和計算,比如 房間需要和墻面,墻面需要和墻體關聯,墻體和最多 2 個房間關聯,墻角和多個房間關聯,墻角和多個墻體關聯等等

面對這樣海量、復雜的數據,如果只靠著一個 API 請求的結果消費顯然是非常不可取的方案,先不說這些數據能不能正確的解析出來,就說這些數據如何維護,保存時如何收集到所有數據反向序列化給后端都是些頭疼的問題。

當然這些問題在當時我們抽象的各個數據模型中得到了解決,如果想了解具體細節可以查看我之前的文章。

今天我想講的是,在我加入阿里后,一直在思考的關于數據模型的兩個問題:

  • 是不是數據模型這種事情對于常規項目沒有使用場景或者價值呢?常規的,像一些數據查詢,或者填寫一些數據提交。這種需求里面有必要使用什么抽象類,什么數據模型嗎?
  • 為什么在前端圈子里面,很少有看到這方面的內容,現在前端圈子里大多都是在走向函數化,Composition等等,是不是這條路子走的有問題?

在尋覓了 2 年后,主導 Lazada 商家端的商品發布頁面重構時,仿佛找到了一些答案。

二 商品模型

首先在新增一個商品的過程中,實際上是用戶在以客戶端的形式制作一組商品數據,常規的前端視角來看就是提交一份“JSON”。

而編輯就是通過 API 拉取這份“JSON”解析到 Form 表單中,讓用戶進行編輯后,再將這份“JSON”提交。

那么粗略的將數據抽象為模型將會成為這樣:

??

??

 

Well,到目前為止,我們做的事情都感覺像是在脫褲子放屁,多此一舉。哈哈哈,各位看官暫且勿噴,稍安勿躁 。

那么為什么需要把這些數據抽象為一個類呢?我拿一下幾個 Case 來說明:

1 請求數據 & 單元測試

很多時候,前端把對數據的請求和處理是寫在組件中的,更優一點可能會封裝在某個聚類里面,或者某個 Hook 里面,調用時輕巧的拿到狀態和數據。

像商品這樣的數據請求方式會存在多種:草稿中獲取,編輯中獲取,某個類目中獲取(不同類目下,商品屬性不同)。

每種獲取方式請求的接口和參數組合方式可能不同,但最后前端消費的產物卻是相同的。按照策略模式來說,對于一個商品模型的獲取只是使用了不同的策略,但產物卻是一致的,消費端無論調用何種方式,獲取到的結果都是可靠的 Product 模型類。

有經驗的前端都知道,很多時候,在一個項目在一輪輪的迭代后,我們的接口數據往往會存在部分數據需要前端做一定處理或者轉換。

面對這樣的數據處理,如果放在一個組件或者 Hook 中,是不太合適的,在做單元測試或者數據消費的時候都可能會給我們帶來一些阻力。

在我看來,調試一個數據問題最好的辦法,就是寫一個單元測試,對單元測試預期的結果進行調試,往往比我們在瀏覽器中 Mock 一份數據調試數據更高效,對將來的穩定性也更有幫助。

安全感,數據消費起來,一個類和一份 JSON 給開發者帶來的安全感和爽感是完全不同的。消費過數據模型 或者 次一點 消費過Interface的小伙伴,我相信對這一點是非常認同的。

哈哈,說到這里有些小伙伴可能要問了,你說的這個我們用Interface也能達到同樣的效果呀。好,咱們繼續...

2 計算性消費數據

什么叫計算性消費數據的,說的簡單點,就比如:

class Person1 { 
fistName = "Wang";
lastName = "Yee";

get fullName() {
return `${this.lastName} ${this.fistName}`; // Yee Wang
}

get fullNameCN() {
return `${this.fistName} ${this.lastName}`; // Wang Yee
}
}

上面這個例子非常經典且清晰,元數據中可能只是些基本數據,但是很多時候前端需要根據不同場景來進行元數據組裝,以往這些數據往往會被封裝為各個方法,或者被當做 template 寫在組件中,散落在各個角落,每當用到這份數據時可能又會重新按照場景組裝一遍。往往這種時候就會存在 需求缺失,比如某情況下需要將之前所有消費到 fullName 的地方改為小寫。

拿到商品發布來說,計算性消費數據到底有哪些應用場景呢?

在此之前,我想先解釋一下SKU這個數據模型,它其中最核心的元數據是:value: Map

??

??

 

按照上圖這個表格中所示,可以看到該商品共有 6 個 SKU,第一個 SKU 所對應的SKU模型數據應為:

??

??

class SKU { 
value = new Map([
[
new SKUProperty({ id: 1, label: "Color Family" }),
new SKUValue({ id: 101, label: "Red" }),
],
[
new SKUProperty({ id: 2, label: "Size" }),
new SKUValue({ id: 201, label: "33" }),
],
]);
price: string;
}

像這樣一個 SKU Model,它所具備的元數據已經可以清晰描述當前 SKU,而且可以通過 SKU 的擴展方法做到很多有用的數據,比如:

  • getProperties() 獲取該 SKU 有所有屬性,如:Color Family,Size。
  • getValues() 獲取該 SKU 所有Value,如:Red,33。
  • isEqual(anotherSKU: SKU): boolean 比較一個 SKU 是否和當前 SKU 完全相同,這在后續的數據合并中非常有用。
  • getValueByPropertyId(id: string) 通過 PropertyId,獲取一個 SKUValue。

相比與只是一個 Object 對象來說,數據模型能夠帶來非常多的數據處理和數據擴展能力,當某種情況下需要消費由該數據產生的計算性消費數據時,可以很輕易的進行擴展使用,對于數據結構也有更好的預期和掌控力。

結合對該數據模型的單元測試,就可以清晰快速的開發數據層,當數據層可靠后,在視圖層消費就會變得行云流水,得心應手了。

舉個單元測試的例子:

it("alias sku equal", () => { 
const data = [
{
text: "300MB",
value: 2988,
name: "p-1",
},
{
text: "Blue",
value: 2888,
alias: "Blue1",
name: "p-2",
},
];
const sku = SKU.fromData(data);
expect(
sku.isEqual(
SKU.fromData([
{
text: "300MB",
value: 2988,
name: "p-1",
},
{
text: "Blue",
value: 2888,
alias: "Blue2",
name: "p-2",
},
])
)
).toBeFalsy();
});

這種SKU,是一種類型較為特殊的SKU,它其中會存在 alias 字段,當有這種字段時,在做SKU比對時,不但要對 SKUProperty,SKUValue 的ID做比對,還需要對 alias 字段做比對。

所以按照上面的單測來看,結果應該是 false,因為這兩份數據中的alias是不同的。沒辦法,這是一個業務需求。

如果在視圖層做數據比對時,使用的是純數據進行比對,很有可能漏掉這部分邏輯,這就會導致項目變得捉襟見肘,拆東墻補西墻。

反正,在消費層遇到很多的需要對數據處理或判斷時,大可以將這部分能力交給數據模型來處理,由數據模型來保證數據的穩定性。

3 數據關系

使用數據模型,還可以幫你清晰管理數據關系,比如商品和SKU之間,SKU和SKUProperty,SKUValue 之間的關系。

我舉個具體案例:

??

??

 

這是一個商品編輯時組 笛卡爾積(Cartesian product) 的過程,當我們的SKU屬性被用戶添加或者修改時,將會觸發笛卡爾積的重新計算出最新的排列組合結果。

比如當用戶新增一個尺碼為35時,笛卡爾積將會多出兩項組合結果。同理,如果當維度增加一列時,比如添加材質維度,將會產生更多SKU結果。

以往,前端開發者總會將這部分計算過程封裝成為一個數學方法,放在utils中隨時調用,這看起沒什么問題。

如果將這個過程看做是,一個 SKUCollection 數據模型的構建過程的話,一切就會將變得順理成章:

test('sku calculate whether valid', () => { 
const skuCellection = SKUCollection.fromData({
'p-3xxxx': [
{
text: '300MB',
value: 2,
},
{
text: '128GB',
value: 3,
},
],
'p-4xxxx': [
{
text: 'Blue',
value: 3,
},
{
text: 'Red',
value: 15,
},
{
text: 'Green',
value: 1,
},
],
});

expect(
skuCellection.value
).toEqual(
// 6 SKU Model
);
});

有了這樣一個數據模型結構后,就可以清晰的通過數據模型來調用其相關的數據和計算性數據。

另外,不同的數據模型雖然相互依賴,但對數據解析和計算性數據缺相互獨立,可以做到獨立使用和單元測試。

??

??

 

三 異常模型

商品發布本質上是一個較為復雜的表單提交頁面。由于字段多,交互復雜等原因,在產品設計過程中,就已經將很多字段先拆分為不同模塊,來減輕用戶心理負擔。

比如會存在:基礎信息,商品屬性,詳描,運費等。

在填寫過程中,會存在部分 前端校驗 + 后端校驗 的場景。

在數據提交或者其他數據寫入過程中,后端同時會處理字段校驗,當后端發現某個字段填寫錯誤時,服務端將返回錯誤信息及錯誤字段信息。

為了更好的交互體驗,前端將會根據返回獲取到字段信息,定位到對應的字段位置,顯示錯誤信息并報紅,另外還需要根據當前字段判斷其所歸屬的模塊進行報錯。

??

??

 

還有一種情況是:服務端的第一層校驗通過,調用其他商品上游鏈路時拋出異常,此時上游鏈路可能已經丟失字段信息,面對這樣的異常數據,前端需要展示在表單頂部,并且提供traceId,以便追蹤定位異常。

??

??這樣的異常數據,通常處理都需要和后端反復確認不同Case的表現情況,有些異常甚至很難出現一次,我們在迭代過程中往往會因為一些組件變動或者邏輯變動丟失這部分數據消費能力。

就商品發布來說,顯而易見的"保存"的動作是一個需要處理異常的情況,所以我們會在提交的地方寫上很多后端返回異常時的處理邏輯。

當有一天,有另外一個迭代需要寫入操作時,同樣也會產生異常的情況,這些的異常情況再次處理時又會有很多數據轉換和錯誤顯示的邏輯。

如果收到這份后端返回數據,將他轉換為異常數據模型,然后交由視圖層消費,這樣會讓所有異常模型下需要處理的邏輯復用避免交互邏輯丟失。

當然,視圖層如何更巧妙的消費該數據模型又是另外一個有意思的設計,此處暫且不表,后面我還會寫一篇專門介紹商品發布的視圖層狀態管理設計。

四 總結

在商品發布中,除了上述提到的幾個數據模型以外,其實還構建了一些其他類型的數據模型,如:運費模型,商品質量分模型,類目推薦模型等... 然后由這些多個子模型共同組合成為一個商品的模型。

這樣的數據模型在消費起來,開發者其實不會太過關心究竟需要請求什么API,返回的數據究竟是什么樣的,他們的返回是否要處理、轉換、兼容等問題。

同時,這樣高質量的數據模型其實不依賴于視圖層的框架,它可以被抽離作為一個獨立的包來管理維護,然后在其他頁面引入使用,比如商品域可能遇到的:商品管理,商品選擇,運費編輯,商品質量分預覽等等...

回到開頭,我提到的問題:

  • 是不是數據模型這種事情對于常規項目沒有使用場景或者價值呢?常規的,像一些數據查詢,或者填寫一些數據提交。這種需求里面有必要使用什么抽象類,什么數據模型嗎?
  • 為什么在前端圈子里面,很少有看到這方面的內容,現在前端圈子里大多都是在走向函數化,Composition等等,是不是這條路子走的有問題?

首先肯定的是,在我所使用的過程中,數據模型確實非常清晰,有力,牢固的解決了我所面到的業務問題,所以它是有價值的。

至于和常規的需求,到底應該用什么好呢?哈哈,這個問題有個比較無賴的回答,小孩子才考慮什么要什么不要,成年人什么都要,沒有什么技術是非黑即白的。

Vite 就只能在 Vue 的項目里面使用嗎?

什么合適用什么,簡單的數據查詢展示不需要這么精細的數據處理,當然可以直接拿來即用咯,解決業務問題的方法就是好方法!

至于Composition API,其實在商品發布的重構過程中,基本絕大多數都是使用這種設計思路來實現的,這樣的設計確實能讓我們清晰的分辨每個方法是干什么的,是否會影響交互,以及這樣的交互是在做什么,每個交互都在一個位置維護和處理,后面我會單獨寫一篇介紹。

實踐過程中發現,數據模型和Composition API并不沖突,一個是用來處理數據層,一個是用來處理視圖層,它們相輔相成結合一些訂閱模式的設計,就會讓整個項目的劃分異常清晰,我十分建議大家在以后遇到單點項目較為復雜時能夠使用這一套思路來解決業務問題!

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2021-07-14 10:09:05

架構模型數據

2010-05-26 14:37:56

Cassandra數據

2012-03-05 10:54:03

NoSQL

2009-09-18 14:07:51

LINQ to SQL

2021-01-27 05:34:33

Python對象模型

2017-06-27 10:08:29

數據倉庫模型

2011-05-17 17:12:39

2016-11-02 12:32:47

數據分析大數據模型

2010-08-11 09:29:25

FlexJava數據模型

2022-12-09 09:39:01

數據治理

2022-08-15 14:49:12

物聯網數據模型存儲

2016-01-07 11:25:12

數據模型訓練數據

2020-10-14 06:28:38

數據倉庫模型

2024-11-15 11:43:21

2023-02-26 17:46:03

2009-11-12 16:39:02

ADO.NET實體數據

2009-07-20 14:14:03

PowerDesign

2021-01-15 13:18:39

數據模型領域模型代碼

2011-03-23 09:54:47

數據模型數據庫設計

2021-04-16 15:03:56

數字化轉型IT技術
點贊
收藏

51CTO技術棧公眾號

日韩精品在线视频美女| 欧洲不卡av| 第84页国产精品| 国产欧美日韩免费观看| 中文字幕一区在线| 18久久久久久| 日本成人在线免费| 中文字幕av影院| 精品久久国产一区| 日本一区二区视频在线观看| 国语自产偷拍精品视频偷| 亚洲国产高清av| 久久精品国产亚洲一区二区三区| 亚洲在线成人精品| 国产精品久久久久久亚洲调教| 成人区人妻精品一区二| 日本亚洲精品| 日产国产欧美视频一区精品| 欧美精品一区二区三区一线天视频 | 日韩欧美在线播放| 国产精品免费一区二区三区在线观看 | 久久久777精品电影网影网| 九九久久久久99精品| 欧美一级xxxx| 麻豆tv在线| 91麻豆国产香蕉久久精品| 97在线视频国产| 91网址在线观看精品| 免费a级毛片在线播放| 成a人片国产精品| 欧美精品videosex牲欧美| 国产欧美一区二| 91视频免费在线看| 日韩视频一二区| 亚洲成国产人片在线观看| 国产伦精品一区二区三| 国产孕妇孕交大片孕| 亚洲成av人电影| 日韩欧美黄色影院| 每日在线观看av| 你懂的免费在线观看| 视频精品一区二区| 中文字幕无线精品亚洲乱码一区 | 日韩不卡在线播放| 西野翔中文久久精品国产| 欧美视频免费在线观看| 日本aa在线观看| 天天干在线观看| 久久亚洲综合| 97欧美精品一区二区三区| a在线视频播放观看免费观看| 日韩欧美中文在线观看| 欧美日韩国产中文| 日韩国产成人无码av毛片| 欧美jizz18性欧美| 国产精品久久久久久久久快鸭| 欧美亚洲另类久久综合| 人妻一区二区视频| 粉嫩av一区二区三区四区五区 | 亚洲电影免费观看高清完整版在线观看| 久无码久无码av无码| 无码精品人妻一区二区三区影院| 免费影视亚洲| 国产亚洲成aⅴ人片在线观看| 国产精品揄拍一区二区| 精品处破女学生| 精品免费在线| 宅男噜噜噜66一区二区66| 91免费黄视频| 天堂中文在线播放| 亚洲欧美电影院| 欧美一二三区| 亚洲第一精品网站| 日韩黄色免费电影| 欧美激情亚洲一区| 日韩成年人视频| 99视频精品全部免费在线视频| 亚洲国产高清自拍| 亚洲精品国产品国语在线| 91免费视频国产| 青青操免费在线视频| 91九色精品国产一区二区| 久久网福利资源网站| www.色天使| 99a精品视频在线观看| 欧美丝袜丝nylons| 国产一区二区在线视频播放| 国产在线高潮| 欧美激情在线观看视频免费| 色99中文字幕| 飘雪影视在线观看免费观看| 国产成人av电影在线| 国产国语刺激对白av不卡| 久久伊人成人网| 国产精品入口| 欧美极品少妇xxxxⅹ裸体艺术| 日本少妇在线观看| 日韩成人一区二区三区在线观看| 成人在线中文字幕| 香蕉久久一区二区三区| 中文欧美字幕免费| 涩涩日韩在线| 欧洲一区二区三区| 欧美性色综合网| 日本一级大毛片a一| 国产美女亚洲精品7777| 欧美人动与zoxxxx乱| av电影在线播放| 色综合咪咪久久网| 中文字幕精品一区二区精品| 精品爆乳一区二区三区无码av| 在线观看免费一区二区| 久久精品在线播放| 手机在线免费看毛片| 狠狠久久综合| 精品国产美女a久久9999| 欧美另类一区二区三区| 九热视频在线观看| 国产极品久久久久久久久波多结野 | 巨乳诱惑日韩免费av| 96久久精品| 精品国自产拍在线观看| 韩国成人在线视频| 91欧美精品午夜性色福利在线| 午夜福利一区二区三区| 夜色激情一区二区| 色婷婷一区二区三区av免费看| 欧洲精品一区| 亚洲欧美资源在线| 国精产品视频一二二区| 欧美www视频在线观看| www.亚洲人.com| 欧美亚洲日本在线| 免费视频一区二区| 亚洲自拍欧美色图| 日韩一级片免费观看| 91在线码无精品| 欧美精品尤物在线| 高清视频在线观看三级| 欧美日韩加勒比精品一区| 国产精品-区区久久久狼| 日韩久久一区二区三区| 欧美日本韩国一区| 男人的天堂av网| 综合激情视频| 成人国产精品日本在线| 丰满熟妇人妻中文字幕| 成人综合激情网| 久久手机视频| 毛片激情在线观看| 欧美日韩免费在线视频| 黄色av免费播放| 欧美成人国产| 日韩免费观看网站| jlzzjlzzjlzz亚洲人| 99热99精品| 亚洲欧美日韩国产成人综合一二三区 | 国产成人在线观看免费网站| 精品一卡二卡三卡四卡日本乱码 | 自拍自偷一区二区三区| 中文字幕在线日韩| 中文字幕+乱码+中文乱码www| 国产麻豆欧美日韩一区| 久久精品一区二区三区不卡免费视频| av中文在线资源库| 在线不卡中文字幕| 97精品在线播放| 亚洲欧美日韩国产综合精品二区 | 4438全国亚洲精品观看视频| 亚洲美女av在线| 男人的天堂久久久| 国产精品99久久久久久久女警| 大胆欧美熟妇xx| 天堂俺去俺来也www久久婷婷| 日本不卡视频在线播放| www.五月婷婷| 亚洲国产成人porn| 人妻熟女aⅴ一区二区三区汇编| 翔田千里一区二区| 一本色道婷婷久久欧美| 在线高清av| 中文字幕v亚洲ⅴv天堂| 国产精品国产av| 亚洲午夜久久久久久久久电影网 | 中国 免费 av| 成人黄色免费短视频| 精品久久久久久久久久久久久久久| 亚洲欧洲久久久| 免费在线观看不卡| 欧美一级爱爱视频| 亚洲美女色播| 一区二区三区日韩在线| 在线精品免费视| 日本一区二区免费在线| 免费不卡av网站| 婷婷六月综合| 国语精品中文字幕| 国产国产一区| 孩xxxx性bbbb欧美| 日本视频在线| 亚洲欧美在线看| 亚洲精品福利网站| 在线免费不卡电影| 中文字幕5566| 国产亚洲精品v| 伊人久久婷婷色综合98网| 精品欧美日韩精品| 欧美另类在线播放| 精品久久av| 日本精品一级二级| www..com.cn蕾丝视频在线观看免费版| 国模大尺度一区二区三区| 北条麻妃69av| 美女亚洲一区| 国产精品久久久久免费a∨| 日本色护士高潮视频在线观看| 日韩一区二区三区三四区视频在线观看| 永久免费看mv网站入口| 久久亚洲私人国产精品va媚药| 欧美牲交a欧美牲交aⅴ免费真| 亚洲欧美偷拍自拍| 亚洲精品在线免费看| 亚洲精品456| 成人av蜜桃| 欧美13videosex性极品| 亚洲精品视频免费| 亚洲精品一区二区三区区别| 欧美日韩视频在线第一区| 日韩一卡二卡在线观看| 狠狠v欧美v日韩v亚洲ⅴ| 无码人妻丰满熟妇区五十路百度| 精品视频网站| 美国av一区二区三区| 精品日本视频| 欧美在线免费观看| 98色花堂精品视频在线观看| 久久99久久亚洲国产| 搞黄网站在线观看| 亚洲国产精品yw在线观看| 99视频免费看| 日韩视频在线观看一区二区| 91好色先生tv| 亚洲va韩国va欧美va精品| 97人妻天天摸天天爽天天| 成人亚洲精品久久久久软件| www.偷拍.com| 国产盗摄精品一区二区三区在线| av在线免费看片| 国产在线国偷精品产拍免费yy| 国产精品视频网站在线观看 | 中文字幕亚洲欧美一区二区三区| 牛牛热在线视频| 亚洲深夜福利网站| 国产高清一级毛片在线不卡| 日韩一区二区三区av| 99热精品在线播放| 日韩女优制服丝袜电影| 成人毛片在线免费观看| 亚洲福利在线看| 色就是色亚洲色图| 国产亚洲人成网站在线观看| 国产精品劲爆视频| 一级特黄aa大片| 欧美日本在线播放| 99视频国产精品免费观看a| 日韩精品专区在线影院重磅| 成人毛片在线精品国产| 日韩av在线天堂网| 国产农村老头老太视频| 日韩欧美亚洲成人| 中文字幕一区二区三区四区欧美| 亚洲精品日产精品乱码不卡| 麻豆一区产品精品蜜桃的特点 | 亚洲人成电影网站色…| 国产福利片在线| 久久影院模特热| a级片在线免费| 国产成人精品视| 国产亚洲高清在线观看| 国产一区二区在线网站| 日本免费一区二区三区等视频| 97超级碰碰人国产在线观看| 欧美大片高清| 91久久在线观看| 大奶在线精品| 91国产丝袜在线放| 久久av偷拍| 久久精品国产一区二区三区日韩 | 自拍偷拍 国产| 国产一区二区三区久久久 | 久久久伊人欧美| 日本精品不卡| 99re6在线| 精品国产一区二区三区久久久樱花| 警花观音坐莲激情销魂小说| 精品一区二区三区的国产在线观看| 咪咪色在线视频| 国产农村妇女毛片精品久久莱园子| 天天干天天草天天| 日本麻豆一区二区三区视频| 欧美一级大片免费看| 久久精品一区四区| 日本免费在线播放| 亚洲午夜激情av| 中国精品一区二区| 精品国产麻豆免费人成网站| 91在线视频免费看| 一区二区三区四区在线观看视频| 成人ww免费完整版在线观看| 日韩美女视频免费看| 911精品国产| 亚洲ai欧洲av| aa国产精品| 成年人观看网站| 国产乱理伦片在线观看夜一区| 蜜桃无码一区二区三区| 亚洲国产精品久久久久婷婷884| 中文字幕+乱码+中文| 亚洲欧美在线第一页| 超碰97国产精品人人cao| 午夜精品久久久久久久白皮肤 | 久久99精品久久久久久水蜜桃| 香蕉综合视频| 久久撸在线视频| 国产日韩欧美高清在线| 天天干天天干天天| 亚洲成人黄色在线观看| 一区二区三区伦理| 欧美精品video| 亚洲综合视频| 亚洲精品在线视频观看| 日韩精品三区四区| 熟女俱乐部一区二区| 亚洲国产电影在线观看| 国产成人在线免费视频| 在线观看区一区二| 深夜影院在线观看| 中文字幕亚洲一区| 欧美一区久久久| 欧美极品视频一区二区三区| 国产日韩一区| 性久久久久久久久久| 精品久久久久久久久久久久久| 成人免费视频国产免费| 精品视频www| 欧美电影免费看| 欧美日韩免费观看一区| 久久国产高清| 国产资源中文字幕| 亚洲人吸女人奶水| 国产精品自拍99| 日韩国产欧美精品一区二区三区| 大桥未久在线视频| 欧美精品欧美精品系列c| 天堂va蜜桃一区二区三区漫画版| 亚洲av无码一区二区二三区| 色综合色狠狠综合色| 国产精品无码AV| 日韩一区二区欧美| 国产专区精品| 久久99久久99精品| 91在线一区二区| 最近中文在线观看| 亚洲精品wwwww| 一个人看的www视频在线免费观看| 另类欧美小说| 日韩精品91亚洲二区在线观看 | 一区二区三区不卡视频| 欧美视频久久久| 日韩美女视频中文字幕| 久久中文亚洲字幕| 精品人妻无码中文字幕18禁| 五月天视频一区| 成黄免费在线| 国语自产在线不卡| 久久av电影| 一级黄色在线播放| 亚洲一区二区黄色| 欧美精品a∨在线观看不卡 | 欧美大片在线看| 九九热这里有精品| 特大黑人娇小亚洲女mp4| 奇米色一区二区| 青青草原在线免费观看| 亚洲黄色有码视频| 97成人超碰| 国产中文字幕乱人伦在线观看| 久久奇米777| 国产黄a三级三级看三级| 2019日本中文字幕| 国产精品宾馆| 亚洲精品亚洲人成人网| 一卡二卡三卡在线观看| 欧美大片在线看免费观看| 国产亚洲一区二区三区啪| 五月天国产视频| 色女孩综合影院| 欧美亚洲系列| 色一情一乱一伦一区二区三区丨 | 欧美亚洲三区|