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

疫情下更合適的開發模式

原創 精選
開發
本文想要從SCM patterns的視角來對比一下mainline開發模式和PR開發模式。

作者 | 鄭茗蔓

問題的提出

任何復雜的軟件都是團隊工作的產物,所以我們會利用版本控制工具和不同的分支策略來協助團隊的日常開發和交流,mainline開發模式和pull request開發模式(以下簡稱PR)則是最常用到的兩種模式。在開發時選擇哪種模式也成了一個經常被討論的話題。

在疫情時代,遠距離辦公可能會阻礙團隊的交流,PR開發模式也變得越來越流行。一方面PR開發模式可以為代碼開發帶來更好的隔離性,但另一方面,PR開發模式其實是一種更難掌握或者說要求更高的開發模式。比如:審查和合并 PR 的速度至少取決于三個因素:上下文、大小和原子性。此外,PR開發模式對重構不是很友好。因為重構需要高頻率的集成來盡早發現和解決引入的沖突,但在PR開發模式之下是比較難做到的。

相比之下,mainlina開發模式是我更為傾向的一種實踐。首先,它不需要考慮太多額外的因素。開發人員只需要有了“健康”的commit之后,就能與mainline集成,將自己的代碼變更在團隊中可視化。此外,它對重構有很好的支持,因為mainline開發模式本身就支持持續集成。

《Software Configuration Management Patterns》(以下簡稱SCM patterns)一書從軟件配置管理的角度出發,關注那些會影響代碼編寫、功能實現以及代碼更改等日常工作的各個方面,并將其總結成一系列模式。

下面,本文想要從SCM patterns的視角來對比一下mainline開發模式和PR開發模式。

概念的厘清

為了更好地理解這兩種開發模式,以及將其進行對比,有必要先對相關的基本概念以及兩種模式的概念進行簡要的說明。

Codeline和Codeline Policy組合差異決定開發模式的不同

不同的codeline和codeline policy的組合可以形成不同的開發模式。從形式上看,mainline開發模式和PR開發模式的區別,其實是codeline和codeline policy的不同。因此,我們有必要先了解一下這二者的基本概念。

(1) Codeline

codeline其實就是我們常說的branch(Brad Appleton在這里有做說明),在SCM patterns中,codeline的定義如下:

A codeline is a progression of the set of source files and other artifacts
that make up some software component as it changes over time. Every time you
change a file or other artifact in the version control system, you create a
revision of that artifact.

(2) Codeline Policy

codeline policy實際上是對于codeline的使用手冊,為每一條codeline持續運行提供了保障機制,也能夠讓開發人員更加明確的知道:應該將代碼簽入哪個codeline、何時簽入以及在簽入前要運行哪些測試。每個codeline都會相應地有一個codeline policy。

舉個例子:

Development codeline:可以簽入臨時代碼,但相關組件需要是可以構建的。

  • Mainline:所有組件必須編譯和鏈接,并通過回歸測試;已完成并且經過測試的新功能可以簽入。
  • Release codeline:軟件必須在簽入前構建并通過回歸測試;簽入的代碼僅限于錯誤修復;不得簽入新特性或功能;簽入后,分支被凍結,直到整個QA 周期完成。

總的來說,不同的codeline在不同的項目中,有不同的目的和不同的codeline policy,同時也代表著不同的穩定程度,比如:active development codeline是以快速開發為主,穩定程度足夠開發就好;而release codeline則是一個完全測試,必須保持足夠穩定的codeline。相比之下,release codeline對穩定程度的要求則高很多。

對待mainline和active development line的方式決定兩種開發模式的不同

了解完上面的基本概念之后,下面我們來正式認識一下這兩種不同的開發模式。mainline開發模式和PR開發模式兩者明顯的區別是對待mainline和active development line的方式不同。

(1) Mainline

mainline是一個特殊的codeline,通常它被認為是代表了團隊代碼的當前狀態,用作子分支及其合并的基礎。Martin Flower是這樣描述mainline的:

A single, shared, branch that acts as the current state of the product

需要注意的是mainline是一個codeline,而mainline開發模式是一種development model。

(2) Active development line

active development line是開發人員開發代碼所使用的codeline/branch。但這個codeline的特點是:足夠穩定,能保證開發即可。

(3) Mainline開發模式

mainline開發模式是一種開發人員在mainline上直接進行開發工作的模式。此時,mainline = active development line。在SCM patterns中,作者是這樣描述mainline development model的:

When you are developing a single product release, develop off of a mainline.
A mainline is a “home codeline” that you do all your development on except in
special circumstances.

(4) Pull request 開發模式

PR開發模式則是開發人員在分支上進行開發,然后通過pull request的方式,將分支合并回mainline的一種開發模式。此時,mainline != active development line。

兩種模式的對比

通過上面對兩種開發模式的介紹,我們知道兩者一個明顯的區別是mainline和active development line是否為同一codeline。那么接下來,我想通過集成設計、codeline穩定程度的變化和出發點這三個方面來對兩種開發模式進行對比。

mainline開發模式的集成設計比PR開發模式更為簡單

首先,我們來看codeline和CI設計的問題。

在mainline開發模式中:mainline = active development line

如果需要一個非常穩定的代碼線(stable codeline)以做發布相關或已發布的bug修復等工作的時候,通常會切一個release codeline,此時:

release codeline = stable codeline

在PR開發模式中:feature branch = active development line

注:feature branch在這里指PR所對應的那個分支。

通常,采用PR開發模式其實就是因為mainline需要非常穩定,所以此時:

mainline = stable codeline

因此,這兩種模式對mainline的穩定程度要求是不同的,mainline開發模式對mainline的穩定程度要求是低于PR開發模式的。此外,codeline和CI的聯系是非常緊密的,因為CI的觸發來自于代碼的改變,而代碼的改變來自于特定codeline的commit。所以,在考慮設計我們的CI的時候,同樣也需要考慮如何設計我們的codeline。在SCM patterns的視角下,就是對private workspace的要求不同。

注:圖片來源于《Software Configuration Management Patterns》官方網站

在SCM patterns這張圖中,我們可以看到:private workspace模式的"Complete with"需要integration build和private system build等。而integration build和private system build都需要一系列測試的支持(smoke test、unit test、regression test)。

在mainline開發模式中,開發人員通常是在本地完成開發并通過了codeline policy的提交要求之后,直接將代碼合并到mainline。這個過程中,開發人員會進行頻繁地集成,與mainline的集成通常是在一天之內。由于我們的active development line(mainline)在遠端只有一條,只有當我們進行mainline上的提交的時候,才會觸發CI的運轉。這個時候,我們CI數量等于mainline的數量,其實也就是1條CI。

但在PR開發模式中,開發人員通常是在PR被approve之后,才能對mainline進行集成,因此集成時間通常是好幾天甚至一兩周。這個時候,由于mainline = stable line,但因為feature branch不會對mainline頻繁集成,為了避免feature branch在集成時對stable line引入嚴重的錯誤,因此也會要求feature branch能夠進行更多的測試。但更多的測試也往往意味著更多的開銷,為了讓本地開發高效進行,通常會把build和test放到CI上去。因而在PR開發模式下,通常是一個PR(feature branch/active development line)對應一個CI,這個時候,我們CI數量等于mainline + feature branch的數量。

由此可見,mainline開發模式和PR開發模式對CI的設計是不同,其根本在于codeline的穩定程度影響著對private workspace的要求。

注:把mainline上的代碼持續合并代碼到PR的active development codeline不叫集成,因為集成是pull和push雙方向,Martin Flower的《Patterns for Managing Source Code Branches》文章里也有對此做說明。

mainline開發模式中mainline的穩定程度在持續集成下比PR開發模式更容易發生變化

雖然在mainline開發模式下,mainline = active development line,我們對mainline的穩定程度要求可能不如stable line/release line這么高。但由于頻繁持續的集成,其實mainline/active development line的穩定程度是會發生改變并且趨向于穩定的,而在PR模式下,active development line和mainline的穩定程度則不會一起變化。

在進行對比之前,我們先來看Laura Wingerd在她的書《Practical Perforce》中提出的一種“tofu”模型。“tofu”模型是對codeline的穩定性和質量的一種非正式評估。“tofu”模型會根據以下四個方面來對codeline進行度量:

  • How close software is to being released
  • How rigorously changes must be reviewed and tested
  • How much impact a change has on schedules
  • How much a codeline is changing

注:圖片來源于《Practical Perforce》

從圖上我們能看見,release codeline在“tofu”模型上處于最高(firm),通常來說,它不會有太大的變化,也會有嚴格的審查和測試要求,即使是輕微的變化也可能會影響發布計劃。mainline是中等,代碼的更改會需要通過測試,但離發布時間更遠,對發布計劃的影響處于中等。development codeline處于最低(soft),往往會變化迅速,離軟件發布最遠,甚至可能還沒有針對其最新開發的測試。

現在回過頭來看我們這兩種開發模式。

在PR開發模式中,mainline和active development line本身就是兩條codeline,對應的policy也不相同。這里或許會說,我將mainline的policy應用到active development line上,試圖提升active development line在“tofu”模型中的位置,從而間接提升mainline的位置。但其實開發人員始終是在active development line上開發,而非mainline。在active development line沒有被集成到mainline之前,它們始終是兩條codeline。另外,PR開發模式和持續集成也是割裂的,因為PR決定了集成頻率的上限,只有在PR被approve之后才能被集成到mainline中。這種割裂則讓PR開發模式下的mainline難以享受持續集成帶來的好處,比如:更早的發現和解決問題以減少風險。因此,在PR開發模式下,mainline和development line始終會是處于一高(mainline)一低(development line)的狀態,無論development line多么靠近mainline。

但在mainline開發模式中,mainline和active development line是同一條codeline。那么在“tofu”模型中,由于是同一條codeline,這也就意味著將development line/mainline的上限從mainline變成了release line。其次,由于mainline開發模式本身對持續集成就有著很好的支持,其穩定程度也在不斷地集成中趨向于穩定。因為代碼的更改會非常頻繁地集成到mainline中,每一次的合并實際上都是對mainline質量的一次考驗。此外,如果大家能堅持執行“一旦有失敗的commit,所有開發人員的第一優先級是修復錯誤并且不能向mainline提交commit”的理念,那么mainline的質量會趨向于維持在一個較高的水平。

mainline開發模式的出發點比PR開發模式更有利于團隊的長期發展

mainline開發模式和PR開發模式都需要維護代碼質量,但這兩種模式卻又有著不同的出發點。mainline開發模式的出發點是對團隊內開發人員的信任,外加自動化測試套件來維護代碼質量,而PR開發模式的出發點是對陌生開發人員的不信任,從而需要依賴于人工審核來維護代碼質量。

基于不同的出發點,我們也常常能看見二者被使用到不同的項目之中。開源項目和商業項目則是非常典型的例子,不同的項目背景往往也有著不同的組織結構。

開源項目通常是由一些受信任核心成員和不受信任的陌生的開發人員組成。任何陌生人都能接觸到開源項目的源碼,并且通過創建分支,提交PR的形式,對項目進行貢獻。而這些工作,在提交PR之前,項目中的核心成員,對這個人和這個PR完成所需要的時間都是不確定或者說無感知的。PR開發模式很好地解耦了mainline與不受信任開發者之間的依賴關系,既不影響現有軟件的狀態,同時又為想要對軟件作出貢獻的人提供了較低的門檻,并且保證了核心成員對軟件的質量的充分話語權。

商業項目則不同,其通常是由技術領導人和一些開發人員組成。技術領導人對團隊中的開發人員會有一定的了解,并且對一個功能大概會在什么時間內完成也會有相應的計劃,整個團隊通常具有一定的信任度基礎。

因此,PR開發模式常見于開源項目中,而mainline開發模式則常見于商業項目中。

在受信任的團隊氛圍中工作通常既有利于團隊發展,對個人也是一種鼓勵。因此,mainline開發模式對開發人員更為友好。由于團隊信任度并非一成不變,因此在某些時候,使用PR開發模式也不失為一種好方法。

以我個人的經歷舉例:在我剛開始參加工作,成為一名開發人員的時候,當時項目上正好使用PR開發模式,我會經常去找經驗豐富的前輩幫忙看自己的PR。不同于code review,PR往往給予代碼審核者一個更加全面的視角,因為不限于code review的時間,審核人員也能根據自己的思路對整個PR的實現代碼進行詳細的理解,因此,PR的審核相較于code review會更加仔細,對于代碼質量有更加嚴格的控制;而對于被審核者,根據相應的指導和建議進行代碼修改,也能較快地提升代碼的能力。但在加入項目一年多以后,大家對彼此更加了解和信任之后,則采取了mainline開發模式和code review的相對較寬松的方式來對代碼質量進行管理。

結語

盡管在當下隨著遠距離辦公更為普遍,PR開發模式越來越流行,我們仍然需要小心謹慎地使用它。在使用PR開發模式的時候,我們需要合理決定PR的大小,避免PR過大導致將codeline演變成feature branch。同時,團隊需要提出合理的機制以保證PR審核的及時性,否則這種開發模式將極大地阻礙團隊的開發效率。

相比之下,我個人更傾向于mainline開發模式,它在團隊交流上具有天然的優勢。開發人員之間其實是通過集成來進行交流的。怎么快速知道別人的代碼更改會不會影響我,怎么快速知道我的代碼對mainline產生的影響,怎么將自己的代碼放到大家可見的地方以讓別人知道我的更改。這一系列的問題的根本解決方式就是:與mainline快速集成。其次,關于集成的設計成本也較PR開發模式的一個PR(active development line)對應一條CI更低。最后,在談到團隊信任氛圍上,mainline開發模式的出發點是以營造一個相互信任的開發環境,并同時賦予每一個開發人員自由向mainline提交代碼的權利,這是一種更加健康和可持續發展的方式。

責任編輯:趙寧寧 來源: Thoughtworks洞見
相關推薦

2011-09-30 09:14:29

云計算

2022-11-09 10:26:27

存儲引擎MySQL數據庫

2020-01-10 10:58:34

ZooKeeperEureka注冊中心

2025-04-09 08:20:00

2020-01-02 13:44:31

互聯網工業物聯網安全

2009-12-16 09:58:35

Chrome OS

2024-06-03 09:44:33

2023-02-22 16:47:09

編程語言RustGolang

2025-05-28 00:00:00

CSS前端Flexbox

2023-05-04 07:16:56

U盤USB接口USB-A接口

2020-02-06 15:09:54

疫情物聯網IOT

2018-05-02 08:40:36

存儲密碼字符

2019-09-27 18:13:59

MySQL索引數據庫

2013-07-02 12:11:52

華為TD-LTE中國移動

2013-05-23 16:28:22

TD-LTE4G移動通信網絡

2021-01-19 18:58:23

云計算ARVR

2010-08-20 13:47:11

BlackBerry應BlackBerry

2021-05-27 10:47:24

云計算云計算產業云應用

2018-05-25 14:37:58

2020-01-30 11:28:58

互聯網數據技術
點贊
收藏

51CTO技術棧公眾號

不卡av在线免费观看| 91tv官网精品成人亚洲| 日本久久一区二区三区| 欧美日韩精品免费看 | 亚洲444eee在线观看| 久久精品国产精品国产精品污| 亚洲第一网站在线观看| 精品久久视频| 日韩欧美不卡一区| 18禁男女爽爽爽午夜网站免费| 91在线直播| 高清久久久久久| 国产成人黄色av| 三级全黄做爰视频| 香蕉视频一区二区三区| 在线播放/欧美激情| 日韩黄色短视频| 阿v免费在线观看| 成人精品免费看| 成人福利网站在线观看| 日本亚洲欧美在线| 在线观看国产精品入口| 亚洲精品有码在线| 日本黄色www| 另类中文字幕国产精品| 一级女性全黄久久生活片免费| 欧美一区2区三区4区公司二百| 国产婷婷在线视频| 男女av一区三区二区色多| www.欧美三级电影.com| 精品人妻少妇嫩草av无码| 日本一区二区乱| 欧美日精品一区视频| 少妇人妻在线视频| 毛片在线导航| 国产精品久久久久婷婷| 精品综合在线| 二区三区在线视频| 国产一区二区三区精品欧美日韩一区二区三区 | 久久xxxx| 97在线视频国产| 精品一级少妇久久久久久久| 中文国语毛片高清视频| 午夜视频在线| 久久精品亚洲麻豆av一区二区| 97超碰最新| 国产女人18毛片18精品| 久久99精品国产麻豆不卡| 国产成人午夜视频网址| 亚洲 欧美 成人| 国产欧美一级| 97久久久久久| 久久久久久久久影院| 伊人久久成人| 久久久久久久久网站| 国产稀缺精品盗摄盗拍| 天天综合网网欲色| 久久九九国产精品怡红院| 天堂av网手机版| 欧美一站二站| 综合久久五月天| 18精品爽国产三级网站| 91亚洲成人| 日韩亚洲一区二区| 久久久久人妻一区精品色| 日韩国产一区| 久久影视电视剧免费网站清宫辞电视| 福利视频第一页| 国产精品久久久久蜜臀| 精品国偷自产在线视频| 黄色一级片中国| 激情欧美日韩| 国产91成人video| 中文字幕视频网| 日韩综合在线视频| 国产日韩av在线| 国产91视频在线| 成人精品亚洲人成在线| 国产精品一区二区免费| 水中色av综合| 国产精品久久网站| 一本色道久久88亚洲精品综合| 手机av在线播放| 午夜免费久久看| 欧美国产日韩在线播放| 95精品视频| 精品国产99国产精品| 国产男男chinese网站| 精品72久久久久中文字幕| 深夜成人在线观看| 国产一级做a爱免费视频| 国产欧美成人| 国产精品一区二区在线| www.精品视频| 国产亚洲婷婷免费| 日韩一二区视频| 日本在线啊啊| 777久久久精品| 少妇一级淫片免费放播放| 国产99亚洲| 久久成人精品一区二区三区| 亚洲 欧美 视频| 久久超级碰视频| 精品国产综合久久| 日本中文字幕在线观看| 午夜电影一区二区三区| 亚洲美女性囗交| 欧美一区二区三区久久| 久久精品国产成人精品| 青青草av在线播放| 国产原创一区二区| 欧美日韩大片一区二区三区| 黄网页在线观看| 一本色道久久综合亚洲aⅴ蜜桃 | 三年中文高清在线观看第6集 | 香蕉久久一区二区不卡无毒影院| 久草福利视频在线| 国产精品一区二区中文字幕| 中文字幕在线亚洲| 国产精品777777| 国产91精品久久久久久久网曝门| 婷婷久久伊人| f2c人成在线观看免费视频| 欧美猛男gaygay网站| aa片在线观看视频在线播放| 亚洲精品一区二区在线看| 青青久久aⅴ北条麻妃| 亚洲精品无码专区| 日韩美女视频一区| 欧美日韩亚洲自拍| 天海翼亚洲一区二区三区| 欧美丰满少妇xxxxx做受| 伊人精品一区二区三区| 久久亚洲综合色一区二区三区| 大胆欧美熟妇xx| 99久久久成人国产精品| 中文字幕亚洲综合| 亚洲成人av网址| 久久这里只有精品视频网| 99er在线视频| 四虎国产精品成人免费影视| 国产亚洲免费的视频看| 中文字幕在线欧美| 久久综合视频网| 亚洲美免无码中文字幕在线 | 欧美xxxxxxxx| 欧美激情国产精品免费| 国产综合久久久久久鬼色| 亚洲人久久久| 四虎精品永久免费| 日韩亚洲在线观看| 国产精品一二三四五区| 国产精品美女久久久久久久久久久| 成人免费观看毛片| 国产欧美日韩精品一区二区免费| 欧美一级电影免费在线观看| 天堂av在线免费观看| 精品免费在线观看| 一出一进一爽一粗一大视频| 国产视频一区三区| 你懂的视频在线一区二区| 欧美xxx网站| 亚洲最新视频在线| 中文字幕一区二区三区免费看| 国产精品久久久久影院亚瑟| 亚洲一区二区福利视频| 欧美精品啪啪| 好吊色欧美一区二区三区四区 | 狠狠干狠狠久久| 精品人妻一区二区三区视频| 久久久成人网| 亚洲视频欧美在线| 亚洲一区av| 欧美激情在线狂野欧美精品| 日本精品一二区| 欧美性xxxxxxxxx| 91麻豆精品国产91久久综合| 久久99久久久久| 999一区二区三区| 亚洲v天堂v手机在线| 国产精品扒开腿做爽爽爽视频 | 成人免费一区二区三区在线观看| 天堂网成人在线| 国产主播一区| 欧美日韩在线精品| 成人97精品毛片免费看| 久久久久久久久久久亚洲| 嫩草研究院在线| 欧美精品日日鲁夜夜添| 国产主播在线播放| 久久精品无码一区二区三区| 天堂在线中文在线| 亚洲国产片色| 亚洲欧美日韩国产yyy| 伊人久久影院| 国产精品爱久久久久久久| caoporn97在线视频| 日韩电视剧免费观看网站| 中文字幕精品无码亚| 亚洲国产视频直播| 精品一区二区三孕妇视频| 99久久夜色精品国产网站| 日韩免费高清在线| 国精品一区二区| 天堂精品一区二区三区| 麻豆一区二区| 成人午夜一级二级三级| 亚洲v.com| 欧美成人免费小视频| 国产中文字幕在线看| 精品免费一区二区三区| 最近中文字幕在线观看| 天天色天天操综合| 一区二区成人免费视频| 国产日本欧美一区二区| 亚洲欧美日韩偷拍| 国产精品一区二区免费不卡| 91网址在线播放| 国产精品久久777777毛茸茸| 国产女主播av| 日韩欧美中文| 欧美性大战久久久久| 成人性生交大片免费看中文视频| 国产伦精品免费视频| 小早川怜子影音先锋在线观看| 欧美俄罗斯性视频| 成人日韩欧美| 日韩在线免费观看视频| 激情视频在线观看免费| 亚洲国产私拍精品国模在线观看| 99视频在线观看免费| 欧美日韩卡一卡二| 蜜臀99久久精品久久久久小说| 午夜不卡在线视频| 久久久久久久久久久久久久久久久| 国产精品国产三级国产aⅴ原创| 四虎国产精品成人免费入口| 99久久精品国产一区二区三区| 粗大的内捧猛烈进出视频| 国产真实乱子伦精品视频| 精品久久久久久中文字幕2017| 亚洲影音先锋| 久久精品免费一区二区| 亚洲精品乱码久久久久久蜜桃麻豆| 日本a级片在线观看| 亚洲成人一区| 黄黄视频在线观看| 牛牛国产精品| 日本老太婆做爰视频| 国产精品激情电影| 黄页网站在线观看视频| 亚洲啪啪91| 无码中文字幕色专区| 136国产福利精品导航网址| 日韩a级在线观看| 亚洲高清网站| 久久久999视频| 久久午夜av| 日本www.色| 麻豆精品久久精品色综合| 手机在线看福利| 精品一区二区三区免费观看| 午夜xxxxx| 国产精品18久久久久久久久久久久 | 波多野结衣视频一区二区| 午夜精品蜜臀一区二区三区免费| 9765激情中文在线| 庆余年2免费日韩剧观看大牛| 欧美日韩不卡| 91精品国产自产在线老师啪| 精品久久亚洲| 精品国产一区二区三区日日嗨| 你懂的一区二区三区| 无遮挡亚洲一区| 欧美在线黄色| 亚洲熟妇无码另类久久久| 老司机午夜免费精品视频 | 99久久亚洲国产日韩美女| 国产精品永久免费| 999久久久精品一区二区| 精品乱码一区| 久久中文字幕二区| 欧美中日韩在线| 久久一区中文字幕| 亚洲一区二区福利视频| 菠萝蜜视频在线观看一区| 变态另类ts人妖一区二区| 亚洲免费在线电影| 成年人午夜视频| 欧美乱妇20p| 囯产精品久久久久久| 亚洲另类xxxx| av网址在线| 欧洲精品在线视频| 国产一区二区三区免费在线| 国产成人成网站在线播放青青| 精品在线手机视频| 天天想你在线观看完整版电影免费| 国产日韩高清一区二区三区在线| www.精品在线| www.亚洲人| 日韩激情综合网| 一本色道**综合亚洲精品蜜桃冫| 国产精品久久久久久免费免熟| 亚洲精品电影在线| 久操视频在线免费播放| 5278欧美一区二区三区| 国产在线一区不卡| 日韩欧美在线一区二区| 一区在线免费| 在线播放av中文字幕| 久久蜜桃av一区精品变态类天堂 | www.在线播放| 97久久精品人人澡人人爽缅北| 91精品国产一区二区在线观看| 久久这里精品国产99丫e6| 91精品国产麻豆国产在线观看 | 国产一级特黄aaa大片| 欧美三级电影网| 全色精品综合影院| 欧美极品少妇xxxxⅹ免费视频| 欧美一区=区三区| 免费试看一区| 亚洲深夜av| 丰满少妇一区二区三区专区| 国产精品五月天| 无码人妻精品一区二区蜜桃色欲| 欧美精品一区二区精品网| gogo在线高清视频| 国产一区二中文字幕在线看| 经典一区二区| 欧美成人精品欧美一级乱| 99视频有精品| 日本中文字幕免费观看| 欧美成人性战久久| caoporm免费视频在线| 国产日韩在线看片| 日韩欧美国产精品综合嫩v| 无码少妇一区二区三区芒果| 99久久er热在这里只有精品15| 免费在线看黄网址| 日韩精品专区在线影院重磅| av网站网址在线观看| 亚洲综合成人婷婷小说| 66久久国产| 亚洲国产综合av| 亚洲精品中文在线影院| a在线观看视频| 欧美裸身视频免费观看| 亚洲一区二区三区在线免费| 成人av在线播放观看| 国产91精品一区二区麻豆网站| 强乱中文字幕av一区乱码| 日韩欧美国产小视频| 丝袜在线观看| 国内成+人亚洲| 国产一级久久| 国产美女精品久久| 在线观看av一区二区| 番号在线播放| 成人av色在线观看| 欧美激情四色| xxxwww国产| 精品人伦一区二区三区蜜桃网站| 日本福利在线观看| 国产精品久久久久久久久影视| 国产成人手机高清在线观看网站| 亚洲精品一二三四五区| 国产精品国产三级国产专播品爱网 | 一二三四区在线观看| 岛国视频一区免费观看| 国产精品亚洲产品| 欧美黄色激情视频| 制服视频三区第一页精品| 色呦呦视频在线观看| 精品视频免费观看| 日韩国产成人精品| 国产传媒免费在线观看| 欧美精品一区二区三区久久久| 欧美一区国产| 亚洲色图都市激情| 91视频在线看| 夜夜爽8888| 久久久久国产精品免费网站| 亚洲成a人片77777在线播放| 在线免费av播放| 亚洲一区二区av电影| 国产一级片在线| 99久久精品无码一区二区毛片 | 国产精品揄拍一区二区| 一区二区在线| 精品人妻一区二区三区视频| 欧美日韩成人在线| av岛国在线| 亚洲欧美久久久久一区二区三区| 丁香婷婷综合网| 日本一区二区三区久久| 国内精品久久久久| 国产精品久久久久久| 自拍偷拍亚洲天堂|