日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

java代码重构

發(fā)布時間:2025/3/17 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java代码重构 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

重構(gòu)(Refactoring)就是在不改變軟件現(xiàn)有功能的基礎(chǔ)上,通過調(diào)整程序代碼改善軟件的質(zhì)量、性能,使其程序的設(shè)計模式和架構(gòu)更趨合理,提高軟件的擴展性和維護性。

  也許有人會問,為什么不在項目開始時多花些時間把設(shè)計做好,而要以后花時間來重構(gòu)呢?要知道一個完美得可以預(yù)見未來任何變化的設(shè)計,或一個靈活得可以容納任何擴展的設(shè)計是不存在的。系統(tǒng)設(shè)計人員對即將著手的項目往往只能從大方向予以把控,而無法知道每個細(xì)枝末節(jié),其次永遠(yuǎn)不變的就是變化,提出需求的用戶往往要在軟件成型后,始才開始"品頭論足",系統(tǒng)設(shè)計人員畢竟不是先知先覺的神仙,功能的變化導(dǎo)致設(shè)計的調(diào)整再所難免。所以"測試為先,持續(xù)重構(gòu)"作為良好開發(fā)習(xí)慣被越來越多的人所采納,測試和重構(gòu)像黃河的護堤,成為保證軟件質(zhì)量的法寶。

一、為什么要重構(gòu)(Refactoring)

?????? 在不改變系統(tǒng)功能的情況下,改變系統(tǒng)的實現(xiàn)方式。為什么要這么做?投入精力不用來滿足客戶關(guān)心的需求,而是僅僅改變了軟件的實現(xiàn)方式,這是否是在浪費客戶的投資呢?

?????? 重構(gòu)的重要性要從軟件的生命周期說起。軟件不同與普通的產(chǎn)品,他是一種智力產(chǎn)品,沒有具體的物理形態(tài)。一個軟件不可能發(fā)生物理損耗,界面上的按鈕永遠(yuǎn)不會因為按動次數(shù)太多而發(fā)生接觸不良。那么為什么一個軟件制造出來以后,卻不能永遠(yuǎn)使用下去呢?

?????? 對軟件的生命造成威脅的因素只有一個:需求的變更。一個軟件總是為解決某種特定的需求而產(chǎn)生,時代在發(fā)展,客戶的業(yè)務(wù)也在發(fā)生變化。有的需求相對穩(wěn)定一些,有的需求變化的比較劇烈,還有的需求已經(jīng)消失了,或者轉(zhuǎn)化成了別的需求。在這種情況下,軟件必須相應(yīng)的改變。

?????? 考慮到成本和時間等因素,當(dāng)然不是所有的需求變化都要在軟件系統(tǒng)中實現(xiàn)。但是總的說來,軟件要適應(yīng)需求的變化,以保持自己的生命力。

?????? 這就產(chǎn)生了一種糟糕的現(xiàn)象:軟件產(chǎn)品最初制造出來,是經(jīng)過精心的設(shè)計,具有良好架構(gòu)的。但是隨著時間的發(fā)展、需求的變化,必須不斷的修改原有的功能、追加新的功能,還免不了有一些缺陷需要修改。為了實現(xiàn)變更,不可避免的要違反最初的設(shè)計構(gòu)架。經(jīng)過一段時間以后,軟件的架構(gòu)就千瘡百孔了。bug越來越多,越來越難維護,新的需求越來越難實現(xiàn),軟件的構(gòu)架對新的需求漸漸的失去支持能力,而是成為一種制約。最后新需求的開發(fā)成本會超過開發(fā)一個新的軟件的成本,這就是這個軟件系統(tǒng)的生命走到盡頭的時候。

?????? 重構(gòu)就能夠最大限度的避免這樣一種現(xiàn)象。系統(tǒng)發(fā)展到一定階段后,使用重構(gòu)的方式,不改變系統(tǒng)的外部功能,只對內(nèi)部的結(jié)構(gòu)進行重新的整理。通過重構(gòu),不斷的調(diào)整系統(tǒng)的結(jié)構(gòu),使系統(tǒng)對于需求的變更始終具有較強的適應(yīng)能力。

  通過重構(gòu)可以達到以下的目標(biāo):

  ·持續(xù)偏糾和改進軟件設(shè)計

  重構(gòu)和設(shè)計是相輔相成的,它和設(shè)計彼此互補。有了重構(gòu),你仍然必須做預(yù)先的設(shè)計,但是不必是最優(yōu)的設(shè)計,只需要一個合理的解決方案就夠了,如果沒有重構(gòu)、程序設(shè)計會逐漸腐敗變質(zhì),愈來愈像斷線的風(fēng)箏,脫韁的野馬無法控制。重構(gòu)其實就是整理代碼,讓所有帶著發(fā)散傾向的代碼回歸本位。

  ·使代碼更易為人所理解

  Martin Flower在《重構(gòu)》中有一句經(jīng)典的話:"任何一個傻瓜都能寫出計算機可以理解的程序,只有寫出人類容易理解的程序才是優(yōu)秀的程序員。"對此,筆者感觸很深,有些程序員總是能夠快速編寫出可運行的代碼,但代碼中晦澀的命名使人暈眩得需要緊握坐椅扶手,試想一個新兵到來接手這樣的代碼他會不會想當(dāng)逃兵呢?

  軟件的生命周期往往需要多批程序員來維護,我們往往忽略了這些后來人。為了使代碼容易被他人理解,需要在實現(xiàn)軟件功能時做許多額外的事件,如清晰的排版布局,簡明扼要的注釋,其中命名也是一個重要的方面。一個很好的辦法就是采用暗喻命名,即以對象實現(xiàn)的功能的依據(jù),用形象化或擬人化的手法進行命名,一個很好的態(tài)度就是將每個代碼元素像新生兒一樣命名,也許筆者有點命名偏執(zhí)狂的傾向,如能榮此雅號,將深以此為幸。

  對于那些讓人充滿迷茫感甚至誤導(dǎo)性的命名,需要果決地、大刀闊斧地整容,永遠(yuǎn)不要手下留情!

  ·幫助發(fā)現(xiàn)隱藏的代碼缺陷

  孔子說過:溫故而知新。重構(gòu)代碼時逼迫你加深理解原先所寫的代碼。筆者常有寫下程序后,卻發(fā)生對自己的程序邏輯不甚理解的情景,曾為此驚悚過,后來發(fā)現(xiàn)這種癥狀居然是許多程序員常患的"感冒"。當(dāng)你也發(fā)生這樣的情形時,通過重構(gòu)代碼可以加深對原設(shè)計的理解,發(fā)現(xiàn)其中的問題和隱患,構(gòu)建出更好的代碼。

  ·從長遠(yuǎn)來看,有助于提高編程效率

  當(dāng)你發(fā)現(xiàn)解決一個問題變得異常復(fù)雜時,往往不是問題本身造成的,而是你用錯了方法,拙劣的設(shè)計往往導(dǎo)致臃腫的編碼。

  改善設(shè)計、提高可讀性、減少缺陷都是為了穩(wěn)住陣腳。良好的設(shè)計是成功的一半,停下來通過重構(gòu)改進設(shè)計,或許會在當(dāng)前減緩速度,但它帶來的后發(fā)優(yōu)勢卻是不可低估的。

二、何時著手重構(gòu)(Refactoring)

  新官上任三把火,開始一個全新的項目時,程序員往往也會燃起三把火:緊鑼密鼓、腳不停蹄、加班加點,一支聲勢浩大的千軍萬"碼"夾裹著程序員激情和扣擊鍵盤的鳴金奮力前行,勢如破竹,攻城掠地,直指"黃龍府"。

  開發(fā)經(jīng)理是這支浩浩湯湯代碼隊伍的統(tǒng)帥,他負(fù)責(zé)這支隊伍的命運,當(dāng)齊恒公站在山頂上看到管仲訓(xùn)練的隊伍整齊劃一地前進時,他感嘆說"我有這樣一支軍隊哪里還怕沒有勝利呢?"。但很遺憾,你手中的這支隊伍原本只是散兵游勇,在前進中招兵買馬,不斷壯大,所以隊伍變形在所難免。當(dāng)開發(fā)經(jīng)理發(fā)覺隊伍變形時,也許就是克制住攻克前方山頭的誘惑,停下腳步整頓隊伍的時候了。

  Kent Beck提出了"代碼壞味道"的說法,和我們所提出的"隊伍變形"是同樣的意思,隊伍變形的信號是什么呢?以下列述的代碼癥狀就是"隊伍變形"的強烈信號:

  ·代碼中存在重復(fù)的代碼

  中國有118 家整車生產(chǎn)企業(yè),數(shù)量幾乎等于美、日、歐所有汽車廠家數(shù)之和,但是全國的年產(chǎn)量卻不及一個外國大汽車公司的產(chǎn)量。重復(fù)建設(shè)只會導(dǎo)致效率的低效和資源的浪費。

  程序代碼更是不能搞重復(fù)建設(shè),如果同一個類中有相同的代碼塊,請把它提煉成類的一個獨立方法,如果不同類中具有相同的代碼,請把它提煉成一個新類,永遠(yuǎn)不要重復(fù)代碼。


  ·過大的類和過長的方法

  過大的類往往是類抽象不合理的結(jié)果,類抽象不合理將降低了代碼的復(fù)用率。方法是類王國中的諸侯國,諸侯國太大勢必動搖中央集權(quán)。過長的方法由于包含的邏輯過于復(fù)雜,錯誤機率將直線上升,而可讀性則直線下降,類的健壯性很容易被打破。當(dāng)看到一個過長的方法時,需要想辦法將其劃分為多個小方法,以便于分而治之。

  ·牽一毛而需要動全身的修改

  當(dāng)你發(fā)現(xiàn)修改一個小功能,或增加一個小功能時,就引發(fā)一次代碼地震,也許是你的設(shè)計抽象度不夠理想,功能代碼太過分散所引起的。

  ·類之間需要過多的通訊

  A類需要調(diào)用B類的過多方法訪問B的內(nèi)部數(shù)據(jù),在關(guān)系上這兩個類顯得有點狎昵,可能這兩個類本應(yīng)該在一起,而不應(yīng)該分家。

  ·過度耦合的信息鏈

  "計算機是這樣一門科學(xué),它相信可以通過添加一個中間層解決任何問題",所以往往中間層會被過多地追加到程序中。如果你在代碼中看到需要獲取一個信息,需要一個類的方法調(diào)用另一個類的方法,層層掛接,就象輸油管一樣節(jié)節(jié)相連。這往往是因為銜接層太多造成的,需要查看就否有可移除的中間層,或是否可以提供更直接的調(diào)用方法。

  ·各立山頭干革命

  如果你發(fā)現(xiàn)有兩個類或兩個方法雖然命名不同但卻擁有相似或相同的功能,你會發(fā)現(xiàn)往往是因為開發(fā)團隊成員協(xié)調(diào)不夠造成的。筆者曾經(jīng)寫了一個頗好用的字符串處理類,但因為沒有及時通告團隊其他人員,后來發(fā)現(xiàn)項目中居然有三個字符串處理類。革命資源是珍貴的,我們不應(yīng)各立山頭干革命。

  ·不完美的設(shè)計

  在筆者剛完成的一個比對報警項目中,曾安排阿朱開發(fā)報警模塊,即通過Socket向指定的短信平臺、語音平臺及客戶端報警器插件發(fā)送報警報文信息,阿朱出色地完成了這項任務(wù)。后來用戶又提出了實時比對的需求,即要求第三方系統(tǒng)以報文形式向比對報警系統(tǒng)發(fā)送請求,比對報警系統(tǒng)接收并響應(yīng)這個請求。這又需要用到Socket報文通訊,由于原來的設(shè)計沒有將報文通訊模塊獨立出來,所以無法復(fù)用阿朱開發(fā)的代碼。后來我及時調(diào)整了這個設(shè)計,新增了一個報文收發(fā)模塊,使系統(tǒng)所有的對外通訊都復(fù)用這個模塊,系統(tǒng)的整體設(shè)計也顯得更加合理。

  每個系統(tǒng)都或多或少存在不完美的設(shè)計,剛開始可能注意不到,到后來才會慢慢凸顯出來,此時唯有勇于更改才是最好的出路。

  ·缺少必要的注釋

  雖然許多軟件工程的書籍常提醒程序員需要防止過多注釋,但這個擔(dān)心好象并沒有什么必要。往往程序員更感興趣的是功能實現(xiàn)而非代碼注釋,因為前者更能帶來成就感,所以代碼注釋往往不是過多而是過少,過于簡單。人的記憶曲線下降的坡度是陡得嚇人的,當(dāng)過了一段時間后再回頭補注釋時,很容易發(fā)生"提筆忘字,愈言且止"的情形。

  曾在網(wǎng)上看到過微軟的代碼注釋,其詳盡程度讓人嘆為觀止,也從中體悟到了微軟成功的一個經(jīng)驗。

三、重構(gòu)(Refactoring)的難題

?????? 學(xué)習(xí)一種可以大幅提高生產(chǎn)力的新技術(shù)時,你總是難以察覺其不適用的場合。通常你在一個特定場景中學(xué)習(xí)它,這個場景往往是個項目。這種情況下你很難看出什么會造成這種新技術(shù)成效不彰或甚至形成危害。十年前,對象技術(shù)(object tech.)的情況也是如此。那時如果有人問我「何時不要使用對象」,我很難回答。并非我認(rèn)為對象十全十美、沒有局限性 — 我最反對這種盲目態(tài)度,而是盡管我知道它的好處,但確實不知道其局限性在哪兒。

?????? 現(xiàn)在,重構(gòu)的處境也是如此。我們知道重構(gòu)的好處,我們知道重構(gòu)可以給我們的工作帶來垂手可得的改變。但是我們還沒有獲得足夠的經(jīng)驗,我們還看不到它的局限性。
這一小節(jié)比我希望的要短。暫且如此吧。隨著更多人學(xué)會重構(gòu)技巧,我們也將對它有更多了解。對你而言這意味:雖然我堅決認(rèn)為你應(yīng)該嘗試一下重構(gòu),獲得它所提供的利益,但在此同時,你也應(yīng)該時時監(jiān)控其過程,注意尋找重構(gòu)可能引入的問題。請讓我們知道你所遭遇的問題。隨著對重構(gòu)的了解日益增多,我們將找出更多解決辦法,并清楚知道哪些問題是真正難以解決的。

?????? 數(shù)據(jù)庫(Databases)

?????? 「重構(gòu)」經(jīng)常出問題的一個領(lǐng)域就是數(shù)據(jù)庫。絕大多數(shù)商用程序都與它們背后的database schema(數(shù)據(jù)庫表格結(jié)構(gòu))緊密耦合(coupled)在一起,這也是database schema如此難以修改的原因之一。另一個原因是數(shù)據(jù)遷移(migration)。就算你非常小心地將系統(tǒng)分層(layered),將database schema和對象模型(object model)間的依賴降至最低,但database schema的改變還是讓你不得不遷移所有數(shù)據(jù),這可能是件漫長而煩瑣的工作。

?????? 在「非對象數(shù)據(jù)庫」(nonobject databases)中,解決這個問題的辦法之一就是:在對象模型(object model)和數(shù)據(jù)庫模型(database model)之間插入一個分隔層(separate layer),這就可以隔離兩個模型各自的變化。升級某一模型時無需同時升級另一模型,只需升級上述的分隔層即可。這樣的分隔層會增加系統(tǒng)復(fù)雜度,但可以給你很大的靈活度。如果你同時擁有多個數(shù)據(jù)庫,或如果數(shù)據(jù)庫模型較為復(fù)雜使你難以控制,那么即使不進行重構(gòu),這分隔層也是很重要的。

?????? 你無需一開始就插入分隔層,可以在發(fā)現(xiàn)對象模型變得不穩(wěn)定時再產(chǎn)生它。這樣你就可以為你的改變找到最好的杠桿效應(yīng)。

?????? 對開發(fā)者而言,對象數(shù)據(jù)庫既有幫助也有妨礙。某些面向?qū)ο髷?shù)據(jù)庫提供不同版本的對象之間的自動遷移功能,這減少了數(shù)據(jù)遷移時的工作量,但還是會損失一定時間。如果各數(shù)據(jù)庫之間的數(shù)據(jù)遷移并非自動進行,你就必須自行完成遷移工作,這個工作量可是很大的。這種情況下你必須更加留神classes內(nèi)的數(shù)據(jù)結(jié)構(gòu)變化。你仍然可以放心將classes的行為轉(zhuǎn)移過去,但轉(zhuǎn)移值域(field)時就必須格外小心。數(shù)據(jù)尚未被轉(zhuǎn)移前你就得先運用訪問函數(shù)(accessors)造成「數(shù)據(jù)已經(jīng)轉(zhuǎn)移」的假象。一旦你確定知道「數(shù)據(jù)應(yīng)該在何處」時,就可以一次性地將數(shù)據(jù)遷移過去。這時惟一需要修改的只有訪問函數(shù)(accessors),這也降低了錯誤風(fēng)險。

?????? 修改接口(Changing Interfaces)

?????? 關(guān)于對象,另一件重要事情是:它們允許你分開修改軟件模塊的實現(xiàn)(implementation)和接口(interface)。你可以安全地修改某對象內(nèi)部而不影響他人,但對于接口要特別謹(jǐn)慎 — 如果接口被修改了,任何事情都有可能發(fā)生。

?????? 一直對重構(gòu)帶來困擾的一件事就是:許多重構(gòu)手法的確會修改接口。像Rename Method(273)這么簡單的重構(gòu)手法所做的一切就是修改接口。這對極為珍貴的封裝概念會帶來什么影響呢?

?????? 如果某個函數(shù)的所有調(diào)用動作都在你的控制之下,那么即使修改函數(shù)名稱也不會有任何問題。哪怕面對一個public函數(shù),只要能取得并修改其所有調(diào)用者,你也可以安心地將這個函數(shù)易名。只有當(dāng)需要修改的接口系被那些「找不到,即使找到也不能修改」的代碼使用時,接口的修改才會成為問題。如果情況真是如此,我就會說:這個接口是個「已發(fā)布接口」(published interface)— 比公開接口(public interface)更進一步。接口一旦發(fā)行,你就再也無法僅僅修改調(diào)用者而能夠安全地修改接口了。你需要一個略為復(fù)雜的程序。

?????? 這個想法改變了我們的問題。如今的問題是:該如何面對那些必須修改「已發(fā)布接口」的重構(gòu)手法?

?????? 簡言之,如果重構(gòu)手法改變了已發(fā)布接口(published interface),你必須同時維護新舊兩個接口,直到你的所有用戶都有時間對這個變化做出反應(yīng)。幸運的是這不太困難。你通常都有辦法把事情組織好,讓舊接口繼續(xù)工作。請盡量這么做:讓舊接口調(diào)用新接口。當(dāng)你要修改某個函數(shù)名稱時,請留下舊函數(shù),讓它調(diào)用新函數(shù)。千萬不要拷貝函數(shù)實現(xiàn)碼,那會讓你陷入「重復(fù)代碼」(duplicated code)的泥淖中難以自拔。你還應(yīng)該使用Java提供的 deprecation(反對)設(shè)施,將舊接口標(biāo)記為 "deprecated"。這么一來你的調(diào)用者就會注意到它了。

?????? 這個過程的一個好例子就是Java容器類(collection classes)。Java 2的新容器取代了原先一些容器。當(dāng)Java 2容器發(fā)布時,JavaSoft花了很大力氣來為開發(fā)者提供一條順利遷徙之路。

?????? 「保留舊接口」的辦法通常可行,但很煩人。起碼在一段時間里你必須建造(build)并維護一些額外的函數(shù)。它們會使接口變得復(fù)雜,使接口難以使用。還好我們有另一個選擇:不要發(fā)布(publish)接口。當(dāng)然我不是說要完全禁止,因為很明顯你必得發(fā)布一些接口。如果你正在建造供外部使用的APIs,像Sun所做的那樣,肯定你必得發(fā)布接口。我之所以說盡量不要發(fā)布,是因為我常常看到一些開發(fā)團隊公開了太多接口。我曾經(jīng)看到一支三人團隊這么工作:每個人都向另外兩人公開發(fā)布接口。這使他們不得不經(jīng)常來回維護接口,而其實他們原本可以直接進入程序庫,徑行修改自己管理的那一部分,那會輕松許多。過度強調(diào)「代碼擁有權(quán)」的團隊常常會犯這種錯誤。發(fā)布接口很有用,但也有代價。所以除非真有必要,別發(fā)布接口。這可能意味需要改變你的代碼擁有權(quán)觀念,讓每個人都可以修改別人的代碼,以運應(yīng)接口的改動。以搭檔(成對)編程(Pair Programming)完成這一切通常是個好主意。

?????? 不要過早發(fā)布(published)接口。請修改你的代碼擁有權(quán)政策,使重構(gòu)更順暢。

?????? Java之中還有一個特別關(guān)于「修改接口」的問題:在throws子句中增加一個異常。這并不是對簽名式(signature)的修改,所以你無法以delegation(委托手法)隱藏它。但如果用戶代碼不作出相應(yīng)修改,編譯器不會讓它通過。這個問題很難解決。你可以為這個函數(shù)選擇一個新名字,讓舊函數(shù)調(diào)用它,并將這個新增的checked exception(可控式異常)轉(zhuǎn)換成一個unchecked exception(不可控異常)。你也可以拋出一個unchecked異常,不過這樣你就會失去檢驗?zāi)芰ΑH绻隳敲醋?#xff0c;你可以警告調(diào)用者:這個unchecked異常日后會變成一個checked異常。這樣他們就有時間在自己的代碼中加上對此異常的處理。出于這個原因,我總是喜歡為整個package定義一個superclass異常(就像java.sql的SQLException),并確保所有public函數(shù)只在自己的throws子句中聲明這個異常。這樣我就可以隨心所欲地定義subclass異常,不會影響調(diào)用者,因為調(diào)用者永遠(yuǎn)只知道那個更具一般性的superclass異常。

?????? 難以通過重構(gòu)手法完成的設(shè)計改動

?????? 通過重構(gòu),可以排除所有設(shè)計錯誤嗎?是否存在某些核心設(shè)計決策,無法以重構(gòu)手法修改?在這個領(lǐng)域里,我們的統(tǒng)計數(shù)據(jù)尚不完整。當(dāng)然某些情況下我們可以很有效地重構(gòu),這常常令我們倍感驚訝,但的確也有難以重構(gòu)的地方。比如說在一個項目中,我們很難(但還是有可能)將「無安全需求(no security requirements)情況下構(gòu)造起來的系統(tǒng)」重構(gòu)為「安全性良好的(good security)系統(tǒng)」。

?????? 這種情況下我的辦法就是「先想象重構(gòu)的情況」。考慮候選設(shè)計方案時,我會問自己:將某個設(shè)計重構(gòu)為另一個設(shè)計的難度有多大?如果看上去很簡單,我就不必太擔(dān)心選擇是否得當(dāng),于是我就會選最簡單的設(shè)計,哪怕它不能覆蓋所有潛在需求也沒關(guān)系。但如果預(yù)先看不到簡單的重構(gòu)辦法,我就會在設(shè)計上投入更多力氣。不過我發(fā)現(xiàn),這種情況很少出現(xiàn)。

?????? 何時不該重構(gòu)?

?????? 有時候你根本不應(yīng)該重構(gòu) — 例如當(dāng)你應(yīng)該重新編寫所有代碼的時候。有時候既有代碼實在太混亂,重構(gòu)它還不如從新寫一個來得簡單。作出這種決定很困難,我承認(rèn)我也沒有什么好準(zhǔn)則可以判斷何時應(yīng)該放棄重構(gòu)。

?????? 重寫(而非重構(gòu))的一個清楚訊號就是:現(xiàn)有代碼根本不能正常運作。你可能只是試著做點測試,然后就發(fā)現(xiàn)代碼中滿是錯誤,根本無法穩(wěn)定運作。記住,重構(gòu)之前,代碼必須起碼能夠在大部分情況下正常運作。

?????? 一個折衷辦法就是:將「大塊頭軟件」重構(gòu)為「封裝良好的小型組件」。然后你就可以逐一對組件作出「重構(gòu)或重建」的決定。這是一個頗具希望的辦法,但我還沒有足夠數(shù)據(jù),所以也無法寫出優(yōu)秀的指導(dǎo)原則。對于一個重要的古老系統(tǒng),這肯定會是一個很好的方向。

?????? 另外,如果項目已近最后期限,你也應(yīng)該避免重構(gòu)。在此時機,從重構(gòu)過程贏得的生產(chǎn)力只有在最后期限過后才能體現(xiàn)出來,而那個時候已經(jīng)時不我予。Ward Cunningham對此有一個很好的看法。他把未完成的重構(gòu)工作形容為「債務(wù)」。很多公司都需要借債來使自己更有效地運轉(zhuǎn)。但是借債就得付利息,過于復(fù)雜的代碼所造成的「維護和擴展的額外開銷」就是利息。你可以承受一定程度的利息,但如果利息太高你就會被壓垮。把債務(wù)管理好是很重要的,你應(yīng)該隨時通過重構(gòu)來償還一部分債務(wù)。

?????? 如果項目已經(jīng)非常接近最后期限,你不應(yīng)該再分心于重構(gòu),因為已經(jīng)沒有時間了。不過多個項目經(jīng)驗顯示:重構(gòu)的確能夠提高生產(chǎn)力。如果最后你沒有足夠時間,通常就表示你其實早該進行重構(gòu)。

四、重構(gòu)(Refactoring)與設(shè)計

?????? 「重構(gòu)」肩負(fù)一項特別任務(wù):它和設(shè)計彼此互補。初學(xué)編程的時候,我埋頭就寫程序,渾渾噩噩地進行開發(fā)。然而很快我便發(fā)現(xiàn),「事先設(shè)計」(upfront design)可以助我節(jié)省回頭工的高昂成本。于是我很快加強這種「預(yù)先設(shè)計」風(fēng)格。許多人都把設(shè)計看作軟件開發(fā)的關(guān)鍵環(huán)節(jié),而把編程(programming)看作只是機械式的低級勞動。他們認(rèn)為設(shè)計就像畫工程圖而編碼就像施工。但是你要知道,軟件和真實器械有著很大的差異。軟件的可塑性更強,而且完全是思想產(chǎn)品。正如Alistair Cockburn所說:『有了設(shè)計,我可以思考更快,但是其中充滿小漏洞。』

?????? 有一種觀點認(rèn)為:重構(gòu)可以成為「預(yù)先設(shè)計」的替代品。這意思是你根本不必做任何設(shè)計,只管按照最初想法開始編碼,讓代碼有效運作,然后再將它重構(gòu)成型。事實上這種辦法真的可行。我的確看過有人這么做,最后獲得設(shè)計良好的軟件。極限編程(Extreme Programming)[Beck, XP] 的支持者極力提倡這種辦法。

?????? 盡管如上所言,只運用重構(gòu)也能收到效果,但這并不是最有效的途徑。是的,即使極限編程(Extreme Programming)愛好者也會進行預(yù)先設(shè)計。他們會使用CRC卡或類似的東西來檢驗各種不同想法,然后才得到第一個可被接受的解決方案,然后才能開始編碼,然后才能重構(gòu)。關(guān)鍵在于:重構(gòu)改變了「預(yù)先設(shè)計」的角色。如果沒有重構(gòu),你就必須保證「預(yù)先設(shè)計」正確無誤,這個壓力太大了。這意味如果將來需要對原始設(shè)計做任何修改,代價都將非常高昂。因此你需要把更多時間和精力放在預(yù)先設(shè)計上,以避免日后修改。

?????? 如果你選擇重構(gòu),問題的重點就轉(zhuǎn)變了。你仍然做預(yù)先設(shè)計,但是不必一定找出正確的解決方案。此刻的你只需要得到一個足夠合理的解決方案就夠了。你很肯定地知道,在實現(xiàn)這個初始解決方案的時候,你對問題的理解也會逐漸加深,你可能會察覺最佳解決方案和你當(dāng)初設(shè)想的有些不同。只要有重構(gòu)這項武器在手,就不成問題,因為重構(gòu)讓日后的修改成本不再高昂。

?????? 這種轉(zhuǎn)變導(dǎo)致一個重要結(jié)果:軟件設(shè)計朝向簡化前進了一大步。過去未曾運用重構(gòu)時,我總是力求得到靈活的解決方案。任何一個需求都讓我提心吊膽地猜疑:在系統(tǒng)壽命期間,這個需求會導(dǎo)致怎樣的變化?由于變更設(shè)計的代價非常高昂,所以我希望建造一個足夠靈活、足夠強固的解決方案,希望它能承受我所能預(yù)見的所有需求變化。問題在于:要建造一個靈活的解決方案,所需的成本難以估算。靈活的解決方案比簡單的解決方案復(fù)雜許多,所以最終得到的軟件通常也會更難維護 — 雖然它在我預(yù)先設(shè)想的方向上的確是更加靈活。就算幸運走在預(yù)先設(shè)想的方向上,你也必須理解如何修改設(shè)計。如果變化只出現(xiàn)在一兩個地方,那不算大問題。然而變化其實可能出現(xiàn)在系統(tǒng)各處。如果在所有可能的變化出現(xiàn)地點都建立起靈活性,整個系統(tǒng)的復(fù)雜度和維護難度都會大大提高。當(dāng)然,如果最后發(fā)現(xiàn)所有這些靈活性都毫無必要,這才是最大的失敗。你知道,這其中肯定有些靈活性的確派不上用場,但你卻無法預(yù)測到底是哪些派不上用場。為了獲得自己想要的靈活性,你不得不加入比實際需要更多的靈活性。

?????? 有了重構(gòu),你就可以通過一條不同的途徑來應(yīng)付變化帶來的風(fēng)險。你仍舊需要思考潛在的變化,仍舊需要考慮靈活的解決方案。但是你不必再逐一實現(xiàn)這些解決方案,而是應(yīng)該問問自己:『把一個簡單的解決方案重構(gòu)成這個靈活的方案有多大難度?』如果答案是「相當(dāng)容易」(大多數(shù)時候都如此),那么你就只需實現(xiàn)目前的簡單方案就行了。
重構(gòu)可以帶來更簡單的設(shè)計,同時又不損失靈活性,這也降低了設(shè)計過程的難度,減輕了設(shè)計壓力。一旦對重構(gòu)帶來的簡單性有更多感受,你甚至可以不必再預(yù)先思考前述所謂的靈活方案 — 一旦需要它,你總有足夠的信心去重構(gòu)。是的,當(dāng)下只管建造可運行的最簡化系統(tǒng),至于靈活而復(fù)雜的設(shè)計,唔,多數(shù)時候你都不會需要它。

?????? 勞而無獲— Ron Jeffries

?????? Chrysler Comprehensive Compensation(克萊斯勒綜合薪資系統(tǒng))的支付過程太慢了。雖然我們的開發(fā)還沒結(jié)束,這個問題卻已經(jīng)開始困擾我們,因為它已經(jīng)拖累了測試速度。

?????? Kent Beck、Martin Fowler和我決定解決這個問題。等待大伙兒會合的時間里,憑著我對這個系統(tǒng)的全盤了解,我開始推測:到底是什么讓系統(tǒng)變慢了?我想到數(shù)種可能,然后和伙伴們談了幾種可能的修改方案。最后,關(guān)于「如何讓這個系統(tǒng)運行更快」,我們提出了一些真正的好點子。

?????? 然后,我們拿Kent的量測工具度量了系統(tǒng)性能。我一開始所想的可能性竟然全都不是問題肇因。我們發(fā)現(xiàn):系統(tǒng)把一半時間用來創(chuàng)建「日期」實體(instance)。更有趣的是,所有這些實體都有相同的值。

?????? 于是我們觀察日期的創(chuàng)建邏輯,發(fā)現(xiàn)有機會將它優(yōu)化。日期原本是由字符串轉(zhuǎn)換而生,即使無外部輸入也是如此。之所以使用字符串轉(zhuǎn)換方式,完全是為了方便鍵盤輸入。好,也許我們可以將它優(yōu)化。

?????? 于是我們觀察日期怎樣被這個程序運用。我們發(fā)現(xiàn),很多日期對象都被用來產(chǎn)生「日期區(qū)間」實體(instance)。「日期區(qū)間」是個對象,由一個起始日期和一個結(jié)束日期組成。仔細(xì)追蹤下去,我們發(fā)現(xiàn)絕大多數(shù)日期區(qū)間是空的!

?????? 處理日期區(qū)間時我們遵循這樣一個規(guī)則:如果結(jié)束日期在起始日期之前,這個日期區(qū)間就該是空的。這是一條很好的規(guī)則,完全符合這個class的需要。采用此一規(guī)則后不久,我們意識到,創(chuàng)建一個「起始日期在結(jié)束日期之后」的日期區(qū)間,仍然不算是清晰的代碼,于是我們把這個行為提煉到一個factory method(譯注:一個著名的設(shè)計模式,見《Design Patterns》),由它專門創(chuàng)建「空的日期區(qū)間」。

?????? 我們做了上述修改,使代碼更加清晰,卻意外得到了一個驚喜。我們創(chuàng)建一個固定不變的「空日期區(qū)間」對象,并讓上述調(diào)整后的factory method每次都返回該對象,而不再每次都創(chuàng)建新對象。這一修改把系統(tǒng)速度提升了幾乎一倍,足以讓測試速度達到可接受程度。這只花了我們大約五分鐘。

?????? 我和團隊成員(Kent和Martin謝絕參加)認(rèn)真推測過:我們了若指掌的這個程序中可能有什么錯誤?我們甚至憑空做了些改進設(shè)計,卻沒有先對系統(tǒng)的真實情況進行量測。

?????? 我們完全錯了。除了一場很有趣的交談,我們什么好事都沒做。

?????? 教訓(xùn):哪怕你完全了解系統(tǒng),也請實際量測它的性能,不要臆測。臆測會讓你學(xué)到一些東西,但十有八九你是錯的。

五、重構(gòu)與性能(Performance)

?????? 譯注:在我的接觸經(jīng)驗中,performance一詞被不同的人予以不同的解釋和認(rèn)知:效率、性能、效能。不同地區(qū)(例如臺灣和大陸)的習(xí)慣用法亦不相同。本書一遇performance我便譯為性能。efficient譯為高效,effective譯為有效。

?????? 關(guān)于重構(gòu),有一個常被提出的問題:它對程序的性能將造成怎樣的影響?為了讓軟件易于理解,你常會作出一些使程序運行變慢的修改。這是個重要的問題。我并不贊成為了提高設(shè)計的純潔性或把希望寄托于更快的硬件身上,而忽略了程序性能。已經(jīng)有很多軟件因為速度太慢而被用戶拒絕,日益提高的機器速度亦只不過略微放寬了速度方面的限制而已。但是,換個角度說,雖然重構(gòu)必然會使軟件運行更慢,但它也使軟件的性能優(yōu)化更易進行。除了對性能有嚴(yán)格要求的實時(real time)系統(tǒng),其它任何情況下「編寫快速軟件」的秘密就是:首先寫出可調(diào)(tunable)軟件,然后調(diào)整它以求獲得足夠速度。

?????? 我看過三種「編寫快速軟件」的方法。其中最嚴(yán)格的是「時間預(yù)算法」(time budgeting),這通常只用于性能要求極高的實時系統(tǒng)。如果使用這種方法,分解你的設(shè)計時就要做好預(yù)算,給每個組件預(yù)先分配一定資源 — 包括時間和執(zhí)行軌跡(footprint)。每個組件絕對不能超出自己的預(yù)算,就算擁有「可在不同組件之間調(diào)度預(yù)配時間」的機制也不行。這種方法高度重視性能,對于心律調(diào)節(jié)器一類的系統(tǒng)是必須的,因為在這樣的系統(tǒng)中遲來的數(shù)據(jù)就是錯誤的數(shù)據(jù)。但對其他類系統(tǒng)(例如我經(jīng)常開發(fā)的企業(yè)信息系統(tǒng))而言,如此追求高性能就有點過份了。

?????? 第二種方法是「持續(xù)關(guān)切法」(constant attention)。這種方法要求任何程序員在任何時間做任何事時,都要設(shè)法保持系統(tǒng)的高性能。這種方式很常見,感覺上很有吸引力,但通常不會起太大作用。任何修改如果是為了提高性能,通常會使程序難以維護,因而減緩開發(fā)速度。如果最終得到的軟件的確更快了,那么這點損失尚有所值,可惜通常事與愿違,因為性能改善一旦被分散到程序各角落,每次改善都只不過是從「對程序行為的一個狹隘視角」出發(fā)而已。

?????? 關(guān)于性能,一件很有趣的事情是:如果你對大多數(shù)程序進行分析,你會發(fā)現(xiàn)它把大半時間都耗費在一小半代碼身上。如果你一視同仁地優(yōu)化所有代碼,90% 的優(yōu)化工作都是白費勁兒,因為被你優(yōu)化的代碼有許多難得被執(zhí)行起來。你花時間做優(yōu)化是為了讓程序運行更快,但如果因為缺乏對程序的清楚認(rèn)識而花費時間,那些時間都是被浪費掉了。

??????? 第三種性能提升法系利用上述的 "90%" 統(tǒng)計數(shù)據(jù)。采用這種方法時,你以一種「良好的分解方式」(well-factored manner)來建造自己的程序,不對性能投以任何關(guān)切,直至進入性能優(yōu)化階段 — 那通常是在開發(fā)后期。一旦進入該階段,你再按照某個特定程序來調(diào)整程序性能。

????? 在性能優(yōu)化階段中,你首先應(yīng)該以一個量測工具監(jiān)控程序的運行,讓它告訴你程序中哪些地方大量消耗時間和空間。這樣你就可以找出性能熱點(hot spot)所在的一小段代碼。然后你應(yīng)該集中關(guān)切這些性能熱點,并使用前述「持續(xù)關(guān)切法」中的優(yōu)化手段來優(yōu)化它們。由于你把注意力都集中在熱點上,較少的工作量便可顯現(xiàn)較好的成果。即便如此你還是必須保持謹(jǐn)慎。和重構(gòu)一樣,你應(yīng)該小幅度進行修改。每走一步都需要編譯、測試、再次量測。如果沒能提高性能,就應(yīng)該撤銷此次修改。你應(yīng)該繼續(xù)這個「發(fā)現(xiàn)熱點、去除熱點」的過程,直到獲得客戶滿意的性能為止。關(guān)于這項技術(shù),McConnell [McConnell] 為我們提供了更多信息。

?????? 一個被良好分解(well-factored)的程序可從兩方面幫助此種優(yōu)化形式。首先,它讓你有比較充裕的時間進行性能調(diào)整(performance tuning),因為有分解良好的代碼在手,你就能夠更快速地添加功能,也就有更多時間用在性能問題上(準(zhǔn)確的量測則保證你把這些時間投資在恰當(dāng)?shù)攸c)。其次,面對分解良好的程序,你在進行性能分析時便有較細(xì)的粒度(granularity),于是量測工具把你帶入范圍較小的程序段落中,而性能的調(diào)整也比較容易些。由于代碼更加清晰,因此你能夠更好地理解自己的選擇,更清楚哪種調(diào)整起關(guān)鍵作用。

?????? 我發(fā)現(xiàn)重構(gòu)可以幫助我寫出更快的軟件。短程看來,重構(gòu)的確會使軟件變慢,但它使優(yōu)化階段中的軟件性能調(diào)整更容易。最終我還是有賺頭。

六、重構(gòu)起源何處?

?????? 我曾經(jīng)努力想找出重構(gòu)(refactoring)一詞的真正起源,但最終失敗了。優(yōu)秀程序員肯定至少會花一些時間來清理自己的代碼。這么做是因為,他們知道簡潔的代碼比雜亂無章的代碼更容易修改,而且他們知道自己幾乎無法一開始就寫出簡潔的代碼。

?????? 重構(gòu)不止如此。本書中我把重構(gòu)看作整個軟件開發(fā)過程的一個關(guān)鍵環(huán)節(jié)。最早認(rèn)識重構(gòu)重要性的兩個人是Ward Cunningham和Kent Beck,他們早在1980s之前就開始使用Smalltalk,那是個特別適合重構(gòu)的環(huán)境。Smalltalk是一個十分動態(tài)的環(huán)境,你可以很快寫出極具功能的軟件。Smalltalk的「編譯/連結(jié)/執(zhí)行」周期非常短,因此很容易快速修改代碼。它是面向?qū)ο?#xff0c;所以也能夠提供強大工具,最大限度地將修改的影響隱藏于定義良好的接口背后。Ward和Kent努力發(fā)展出一套適合這類環(huán)境的軟件開發(fā)過程(如今Kent把這種風(fēng)格叫作極限編程 [Beck, XP])。他們意識到:重構(gòu)對于提高他們的生產(chǎn)力非常重要。從那時起他們就一直在工作中運用重構(gòu)技術(shù),在嚴(yán)肅而認(rèn)真的軟件項目中使用它,并不斷精煉這個程序。

?????? Ward和Kent的思想對Smalltalk社群產(chǎn)生了極大影響,重構(gòu)概念也成為Smalltalk文化中的一個重要元素。Smalltalk社群的另一位領(lǐng)袖是Ralph Johnson,伊利諾斯大學(xué)烏爾班納分校教授,著名的「四巨頭」 [Gang of Four] 之一。Ralph最大的興趣之一就是開發(fā)軟件框架(framework)。他揭示了重構(gòu)對于靈活高效框架的開發(fā)幫助。

????? Bill Opdyke是Ralph的博士研究生,對框架也很感興趣。他看到重構(gòu)的潛在價值,并看到重構(gòu)應(yīng)用于Smalltalk之外的其它語言的可能性。他的技術(shù)背景是電話交換系統(tǒng)的開發(fā)。在這種系統(tǒng)中,大量的復(fù)雜情況與時俱增,而且非常難以修改。Bill的博士研究就是從工具構(gòu)筑者的角度來看待重構(gòu)。通過研究,Bill發(fā)現(xiàn):在C++ framework開發(fā)項目中,重構(gòu)很有用。他也研究了極有必要的「語義保持性(semantics-preserving)重構(gòu)」及其證明方式,以及如何以工具實現(xiàn)重構(gòu)。時至今日,Bill的博士論文 [Opdyke] 仍然是重構(gòu)領(lǐng)域中最有價值、最豐碩的研究成果。此外他為本書撰寫了第13章。

?????? 我還記得1992年OOPSLA大會上見到Bill的情景。我們坐在一間咖啡廳里,討論當(dāng)時我正為保健業(yè)務(wù)構(gòu)筑的一個概念框架(conceptual framework)中的某些工作。Bill跟我談起他的研究成果,我還記得自己當(dāng)時的想法:『有趣,但并非真的那么重要』。唉,我完全錯了。

?????? John Brant和Don Roberts將重構(gòu)中的「工具」構(gòu)想發(fā)揚光大,開發(fā)了一個名為「重構(gòu)瀏覽器」(Refactoring Browser)的Smalltalk重構(gòu)工具。他們撰寫了本書第14章,其中對重構(gòu)工具做了更多介紹。

?????? 那么,我呢?我一直有清理代碼的傾向,但從來沒有想到這會有那么重要。后來我和Kent一起做了個項目,看到他使用重構(gòu)手法,也看到重構(gòu)對生產(chǎn)性能和產(chǎn)品質(zhì)量帶來的影響。這份體驗讓我相信:重構(gòu)是一門非常重要的技術(shù)。但是,在重構(gòu)的學(xué)習(xí)和推廣過程中我遇到了挫折,因為我拿不出任何一本書給程序員看,也沒有任何一位專家打算寫出這樣一本書。所以,在這些專家的幫助下,我寫下了這本書。

?????? 優(yōu)化一個薪資系統(tǒng)— Rich Garzaniti
?????? 將Chrysler Comprehensive Compensation(克萊斯勒綜合薪資系統(tǒng))交給GemStone公司之前,我們用了相當(dāng)長的時間開發(fā)它。開發(fā)過程中我們無可避免地發(fā)現(xiàn)程序不夠快,于是找了Jim Haungs — GemSmith中的一位好手 — 請他幫我們優(yōu)化這個系統(tǒng)。

?????? Jim先用一點時間讓他的團隊了解系統(tǒng)運作方式,然后以GemStone的ProfMonitor特性編寫出一個性能量測工具,將它插入我們的功能測試中。這個工具可以顯示系統(tǒng)產(chǎn)生的對象數(shù)量,以及這些對象的誕生點。

?????? 令我們吃驚的是:創(chuàng)建量最大的對象竟是字符串。其中最大的工作量則是反復(fù)產(chǎn)生12,000-bytes的字符串。這很特別,因為這字符串實在太大了,連GemStone慣用的垃圾回收設(shè)施都無法處理它。由于它是如此巨大,每當(dāng)被創(chuàng)建出來,GemStone都會將它分頁(paging)至磁盤上。也就是說字符串的創(chuàng)建竟然用上了I/O子系統(tǒng)(譯注:分頁機制會動用I/O),而每次輸出記錄時都要產(chǎn)生這樣的字符串三次﹗

?????? 我們的第一個解決辦法是把一個12,000-bytes字符串緩存(cached)起來,這可解決一大半問題。后來我們又加以修改,將它直接寫入一個file stream,從而避免產(chǎn)生字符串。

?????? 解決了「巨大字符串」問題后,Jim的量測工具又發(fā)現(xiàn)了一些類似問題,只不過字符串稍微小一些:800-bytes、500-bytes……等等,我們也都對它們改用file stream,于是問題都解決了。

?????? 使用這些技術(shù),我們穩(wěn)步提高了系統(tǒng)性能。開發(fā)過程中原本似乎需要1,000小時以上才能完成的薪資計算,實際運作時只花40小時。一個月后我們把時間縮短到18小時。正式投入運轉(zhuǎn)時只花12小時。經(jīng)過一年的運行和改善后,全部計算只需9小時。

?????? 我們的最大改進就是:將程序放在多處理器(multi-processor)計算器上,以多線程(multiple threads)方式運行。最初這個系統(tǒng)并非按照多線程思維來設(shè)計,但由于代碼有良好分解(well factored),所以我們只花三天時間就讓它得以同時運行多個線程了。現(xiàn)在,薪資的計算只需2小時。

?????? 在Jim提供工具使我們得以在實際操作中量度系統(tǒng)性能之前,我們也猜測過問題所在。但如果只靠猜測,我們需要很長的時間才能試出真正的解法。真實的量測指出了一個完全不同的方向,并大大加快了我們的進度。

轉(zhuǎn)載于:https://my.oschina.net/shizhoubo/blog/4279

總結(jié)

以上是生活随笔為你收集整理的java代码重构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

久久精品一 | 探花视频在线版播放免费观看 | 91九色视频在线播放 | 国产香蕉97碰碰久久人人 | 亚洲精品麻豆 | 2024av在线播放 | 欧美午夜精品久久久久久孕妇 | 欧美日韩一级在线 | 99热精品在线观看 | 国产亚洲精品久久久久动 | 91视频麻豆 | 欧美精品久久人人躁人人爽 | 婷婷激情久久 | 久久婷婷开心 | 永久免费的av电影 | 色婷婷精品大在线视频 | 狠狠色狠狠色 | 日b黄色片| 国产乱对白刺激视频在线观看女王 | 91在线影院| 国产综合小视频 | 久久高清免费 | 在线电影 一区 | 精品在线不卡 | 91精品一 | 区一区二区三在线观看 | 国产成人精品一区二区三区福利 | 成年人看片| 911精品视频 | 久久久黄色av | 天天想夜夜操 | 2020天天干天天操 | 亚洲视屏在线播放 | 国产明星视频三级a三级点| 国产美女在线精品免费观看 | 九草在线视频 | 国产精品大片在线观看 | 天天射天天干天天爽 | 欧美精选一区二区三区 | 日韩在线视频一区二区三区 | 91九色视频在线观看 | 九九热在线精品 | 六月丁香在线视频 | 国产小视频免费在线观看 | av看片在线观看 | 四虎免费av | 国产最新福利 | 深夜激情影院 | 91精品啪在线观看国产81旧版 | 成人在线一区二区三区 | www.91国产 | 成人一级片视频 | 在线观看视频色 | 天天干天天干天天射 | 日韩a在线播放 | 91桃色在线观看视频 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 在线免费观看视频一区二区三区 | 欧美大片第1页 | 91在线入口 | 美女视频黄频大全免费 | 91视频在线看 | 又色又爽又黄高潮的免费视频 | 久久久久久久久毛片精品 | 国产精品免费看久久久8精臀av | 99re视频在线观看 | 一级黄色片在线免费看 | 亚洲精品综合欧美二区变态 | 成人欧美一区二区三区在线观看 | 久久男人中文字幕资源站 | wwwwww色 | 国产精品高潮呻吟久久久久 | 三级免费黄色 | 欧美另类色图 | 97人人超| 天天碰天天操视频 | 欧美日韩国产在线观看 | 色视频网站在线观看一=区 a视频免费在线观看 | 97超碰人人爱 | 黄网站app在线观看免费视频 | 中文在线中文资源 | 日韩videos高潮hd | 亚洲激情国产精品 | 色综合久久五月 | 亚洲视频在线免费观看 | 91爱爱电影| 黄色日批网站 | 日韩免费在线观看网站 | 日日操网站 | 久久精品久久99精品久久 | 久久艹精品 | 91视频a| 精品国产1区二区 | 天天干,天天操 | www.99在线观看| 黄色片免费看 | 一级一片免费视频 | 蜜臀久久99精品久久久无需会员 | 日韩专区中文字幕 | 国产精品美女久久久久久久网站 | 成人av一区二区兰花在线播放 | 久久久香蕉视频 | 日韩高清激情 | 探花视频免费观看高清视频 | 久久精品欧美一区 | 免费视频久久 | 日韩免费中文 | 少妇视频一区 | 在线а√天堂中文官网 | 97在线观看免费观看高清 | 国产资源网 | 国产91在线观看 | 国产丝袜制服在线 | 国产视频在线免费观看 | 91系列在线观看 | 欧美性生活小视频 | 51久久夜色精品国产麻豆 | 九九亚洲精品 | 中文字幕av最新更新 | 最新91在线视频 | 天天躁天天狠天天透 | 91精品网站| 你操综合 | 91亚洲精品久久久蜜桃借种 | 亚洲成人午夜在线 | 国产精品麻豆一区二区三区 | 日韩在线高清视频 | 日韩免费大片 | 亚洲精品在线电影 | 超碰97免费观看 | 欧美黄色免费 | 狠狠色丁香 | 激情欧美一区二区三区免费看 | 激情五月网站 | 在线视频欧美日韩 | 天天爱天天射天天干天天 | 免费能看的av | 午夜 久久 tv | www亚洲国产| 午夜精品久久久久久久久久 | 综合色狠狠 | 97在线视频免费 | 在线久热 | 99热在线观看免费 | 欧美黑吊大战白妞欧美 | 免费看成人 | 国产精品18久久久久久vr | 国产一区欧美二区 | 久久免费观看少妇a级毛片 久久久久成人免费 | 中文字幕电影一区 | 成人动态视频 | 在线观看黄色的网站 | 久久综合狠狠综合久久狠狠色综合 | 成人av在线影视 | 一区二区三区免费在线观看视频 | 美女网站视频色 | 日韩国产在线观看 | 亚洲精品在线观看的 | 午夜国产福利在线 | 亚洲精品综合一二三区在线观看 | 中文字幕中文 | a天堂最新版中文在线地址 久久99久久精品国产 | 国产成人精品三级 | 国产亚洲欧美在线视频 | 精品国产自在精品国产精野外直播 | av色影院| www.夜夜| 91成人在线网站 | 久久免费在线观看视频 | 久章草在线观看 | 在线视频黄 | 精品嫩模福利一区二区蜜臀 | 日韩久久精品 | 91麻豆精品国产午夜天堂 | 欧美做受高潮1 | 国产日韩欧美精品在线观看 | 久久国内精品视频 | 天天干.com| 午夜精品久久久久久久99婷婷 | h视频日本 | 国产视频一区在线免费观看 | 国产欧美最新羞羞视频在线观看 | 久久精品视频免费播放 | 成人午夜影院 | 亚洲蜜桃在线 | 日日干av| 婷婷播播网 | av 一区二区三区四区 | 午夜av剧场 | ww视频在线观看 | 成人免费观看电影 | 黄色大片中国 | 91欧美日韩国产 | 黄色一区三区 | 精品av在线播放 | 91chinesexxx| 欧美日韩免费一区二区 | 欧美精品一二 | 欧美激情视频一区 | 人人干人人草 | 国产精品va在线观看入 | 日韩精品一区二区三区高清免费 | 日韩精品免费一区二区 | av一区二区三区在线播放 | 日韩中文字幕亚洲一区二区va在线 | 丁香电影小说免费视频观看 | 国产日产av | 精品久久久久久亚洲综合网站 | 岛国一区在线 | 精品国产一区二区三区四区在线观看 | 美女国内精品自产拍在线播放 | 久久久九色精品国产一区二区三区 | 五月的婷婷 | 色婷丁香| 亚洲专区欧美 | 欧美激情视频免费看 | 91成人网在线播放 | 天天操天天干天天插 | 成年人在线观看 | 国产不卡精品视频 | 东方av在线免费观看 | 久久99国产综合精品免费 | 午夜av网站| 91在线看视频免费 | 国产白浆在线观看 | 国产三级在线播放 | 久久a级片 | www.五月天激情 | 国产又粗又猛又色 | 久久精品国亚洲 | 国产亚洲精品福利 | 99精品在线播放 | 天天操天天操天天操天天操天天操天天操 | 91大神一区二区三区 | 婷婷久久国产 | 久久久久国产精品一区 | 久久久99精品免费观看app | 日韩理论电影在线观看 | 成人夜晚看av | 久久精品屋 | 国产精品美 | 国产中文字幕在线免费观看 | www.香蕉| 六月色丁香 | av电影免费在线看 | 亚洲日本精品视频 | 91麻豆精品国产91久久久久久 | 亚洲精品视频免费 | 丁香影院在线 | 在线小视频你懂的 | 亚洲精品视频网 | 色综合久久悠悠 | av夜夜操| 九九爱免费视频在线观看 | 97夜夜澡人人双人人人喊 | 国产精品国产三级国产aⅴ9色 | 欧美性做爰猛烈叫床潮 | 91禁看片 | 亚洲欧美激情精品一区二区 | www.伊人网| 99精品国产成人一区二区 | 亚洲高清91 | 黄在线免费看 | 欧美极度另类性三渗透 | 在线观看黄色国产 | a级免费观看 | 91tv国产成人福利 | 中文字幕在线视频网站 | 久久久免费在线观看 | av资源网在线播放 | 久久久久久欧美二区电影网 | 亚洲 欧洲av | 久久色在线观看 | 久久久久精 | 岛国大片免费视频 | 成人手机在线视频 | 日韩av一区在线观看 | 欧美日韩精品在线一区二区 | 日韩国产高清在线 | 国产精品 999 | 成年人视频在线免费 | 超碰97人 | 日韩综合第一页 | 三级av在线 | 成人一级在线 | 视频在线观看99 | 国产日韩在线看 | 国语对白少妇爽91 | 综合网av | 婷婷色综合色 | 99视频免费观看 | 玖玖在线资源 | 国产一级视频在线观看 | 色天天中文 | www.婷婷com| 久草www | 韩日精品在线 | 天天干视频在线 | 国内精品久久久久久久影视麻豆 | 中文字幕免费观看全部电影 | 午夜精品久久久久久久99婷婷 | 亚洲年轻女教师毛茸茸 | 日韩剧情| 深爱激情五月网 | 天堂v中文 | 国产精品美女视频网站 | 欧美资源| 国产午夜精品一区二区三区 | 9在线观看免费高清完整版在线观看明 | 欧美巨乳波霸 | 午夜aaaa| 久久这里只有精品23 | 波多野结衣理论片 | 黄色片免费电影 | 超碰电影在线观看 | 973理论片235影院9 | 免费看成年人 | 很黄很色很污的网站 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 久久久 激情| 日韩网站免费观看 | 在线观看日韩免费视频 | 国产一卡在线 | 久久99久久99精品免费看小说 | 天天色天天操天天爽 | 国产精品自产拍在线观看桃花 | 久久成人在线视频 | 国产成人精品综合久久久 | 天天鲁一鲁摸一摸爽一爽 | 中文字幕 国产视频 | 天堂久久电影网 | 久久视频一区 | 欧美日韩在线视频一区二区 | 91精品秘密在线观看 | 五月天激情综合 | 91资源在线播放 | 日韩欧美一区二区在线播放 | 美女视频永久黄网站免费观看国产 | 韩国三级av在线 | 日本最新一区二区三区 | 亚洲欧洲av在线 | 又黄又爽又刺激 | 免费在线观看av电影 | 午夜私人影院久久久久 | 91麻豆产精品久久久久久 | 亚洲国产三级在线 | 精品欧美一区二区三区久久久 | 日韩av不卡在线播放 | 亚洲一区二区三区91 | 日韩精品中文字幕在线观看 | 香蕉一区 | 久久人人精 | 激情综合五月婷婷 | 91av短视频 | 一区在线免费观看 | 婷婷亚洲五月色综合 | 欧美aaaxxxx做受视频 | 国产精品一区二区美女视频免费看 | 日韩精品久久久免费观看夜色 | 国产在线免费av | 色视频国产直接看 | 久久在线视频在线 | 成人精品影视 | 黄av免费在线观看 | 午夜黄色大片 | 91桃色在线播放 | 玖玖在线资源 | 亚洲天天做 | 91香蕉视频在线下载 | 亚洲欧美综合 | 99色人| 米奇狠狠狠888 | 久久神马影院 | 国产小视频你懂的 | av在线最新 | 国产短视频在线播放 | 色综合天天综合 | 国产日产欧美在线观看 | 亚洲五月婷 | 97精品欧美91久久久久久 | 欧美亚洲国产精品久久高清浪潮 | 粉嫩av一区二区三区四区在线观看 | 亚洲高清在线观看视频 | 欧美一区二区三区免费观看 | 香蕉网址 | 九色精品在线 | 亚洲综合国产精品 | 精品视频专区 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 欧美一二区视频 | 日韩特级黄色片 | 日韩av专区 | 黄色福利视频网站 | 国产精品久久久久婷婷二区次 | 在线超碰av| 亚洲精品自在在线观看 | 91成人精品一区在线播放69 | 国语自产偷拍精品视频偷 | 久久婷婷网 | 精品在线视频一区二区三区 | 激情五月五月婷婷 | 欧美精品中文字幕亚洲专区 | 欧美巨大 | 国产精品成人在线 | 美女国产 | 三级视频日韩 | 国产最顶级的黄色片在线免费观看 | 97av视频| 免费看一及片 | 999免费视频| 国产精品一区二区你懂的 | 日韩一区二区在线免费观看 | 在线成人一区二区 | 欧美极品少妇xxxx | jizz18欧美18 | 国产小视频国产精品 | 色999在线| 国内外成人免费在线视频 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 精品国产aⅴ一区二区三区 在线直播av | 三级小视频在线观看 | 天天操综合 | 久久久麻豆精品一区二区 | 免费久久久 | 精品一区二区免费视频 | 日本中文字幕影院 | 国产精品一区二区三区久久 | 色天天综合久久久久综合片 | 黄色电影小说 | 免费在线看成人av | 国产男女免费完整视频 | 日韩欧美精品在线 | 天堂激情网 | 国产香蕉久久精品综合网 | 久久精品99国产精品亚洲最刺激 | 国产精品欧美久久久久久 | 亚洲人xxx | 国产视频精品免费播放 | 美女黄濒 | 在线欧美最极品的av | 成人久久18免费网站 | 99热在线国产精品 | 欧美日韩国产精品一区二区亚洲 | 五月婷婷在线视频 | 色五月成人 | 国产欧美精品在线观看 | 亚洲精品久久在线 | 日本精品在线视频 | 久久精品国产成人 | 日韩av成人在线观看 | 在线观看一区视频 | 日韩中字在线 | 二区精品视频 | 免费看一及片 | 超碰97人人干 | 麻豆91精品视频 | 91精品电影 | 在线不卡中文字幕播放 | 久久色亚洲 | 成人av久久| 亚洲精品中文字幕视频 | 亚洲jizzjizz日本少妇 | 18女毛片| 日本九九视频 | 91精品一区二区三区久久久久久 | 天天色天天射天天综合网 | 精品视频97| 天天干夜夜擦 | 日韩一级电影在线观看 | 久久国际影院 | 久久久精品成人 | 日韩高清免费在线 | 久久久久久久久久久免费视频 | 在线观看视频一区二区 | 天堂入口网站 | 亚洲三级在线免费观看 | 久久精品亚洲综合专区 | 久草视频在线播放 | 婷婷av色综合 | 日本韩国欧美在线观看 | 亚洲日本黄色 | 国产高清视频免费最新在线 | 国产+日韩欧美 | 丁香婷婷色月天 | av一区二区在线观看中文字幕 | 在线观看91av | 欧美日韩性生活 | 亚洲国产精久久久久久久 | 国产免费一区二区三区网站免费 | 91亚洲精品在线观看 | 综合久久网站 | 久久a热6| 少妇搡bbb| 日韩成人在线一区二区 | 日韩伦理片hd | 免费国产ww| 免费观看福利视频 | 国产无遮挡又黄又爽在线观看 | 激情婷婷综合网 | 免费观看xxxx9999片 | 日韩免费视频 | 亚洲免费精彩视频 | 成人黄色电影在线播放 | 国产一区二区在线视频观看 | 国产亚洲精品久久久久久电影 | 久草在线欧美 | www在线免费观看 | 日韩av影视在线观看 | 91在线操 | 一区二区三区电影在线播 | 久久一本综合 | 日本护士三级少妇三级999 | 黄色大全视频 | 欧美精品一区二区蜜臀亚洲 | 美腿丝袜一区二区三区 | 亚洲国产影院av久久久久 | 中文字幕不卡在线88 | 久久精美视频 | 国产又粗又猛又黄视频 | 在线色资源 | 国产在线传媒 | 99av国产精品欲麻豆 | 一区二区三区免费在线观看 | 91精品久久久久久粉嫩 | 免费黄色激情视频 | 综合色中色 | 免费福利片2019潦草影视午夜 | 视频国产一区二区三区 | 99视频99 | 亚洲成aⅴ人在线观看 | 日韩中文字幕在线不卡 | 久久99精品久久久久久清纯直播 | 91精品秘密在线观看 | 超碰在线日韩 | 不卡av在线| 中文字幕在线播放av | 国产永久网站 | 国产美女精品视频 | 日本在线观看中文字幕无线观看 | 99久久久久久国产精品 | 久久久久国产一区二区三区四区 | 欧美日高清视频 | 欧美另类v| 国产精品9999久久久久仙踪林 | 日韩啪啪小视频 | 国产精品婷婷午夜在线观看 | 国产亚洲在线观看 | 亚洲小视频在线观看 | 国产123区在线观看 国产精品麻豆91 | 99麻豆久久久国产精品免费 | 黄p网站在线观看 | 国产亚洲视频中文字幕视频 | 中文国产字幕 | 久久精品91久久久久久再现 | 欧美精品久久久久久久 | 精品国产一区二区三区av性色 | japanesefreesexvideo高潮 | 久久这里 | 色婷婷综合激情 | 超碰97在线资源站 | 日本激情中文字幕 | 97视频在线观看视频免费视频 | 91成人免费在线 | 在线久草视频 | 欧美在线久久 | 中文字幕在线看视频国产中文版 | 国产日韩视频在线观看 | 超碰在线最新 | 在线观看亚洲 | 久久精品牌麻豆国产大山 | 最新成人av | 亚洲国产久 | 久草在线视频在线观看 | 黄色精品国产 | 高清不卡毛片 | 久久久精品日本 | 最新中文字幕在线播放 | 国产91在线免费视频 | 国精产品满18岁在线 | 久热av在线 | 久久视频精品在线观看 | 婷婷在线精品视频 | 欧美一区二视频在线免费观看 | 精品久久久久久国产91 | 国产精品久久久久av福利动漫 | 91九色丨porny丨丰满6 | 亚洲精品国产精品乱码在线观看 | 国产一级特黄毛片在线毛片 | 婷婷网站天天婷婷网站 | 国产va精品免费观看 | 亚洲开心激情 | 91私密视频| 免费网站色| 91在线91拍拍在线91 | 亚洲精品免费看 | 亚洲视屏 | 天天综合网天天综合色 | 麻豆视频成人 | 亚洲欧洲日韩在线观看 | 精品女同一区二区三区在线观看 | 91精品综合在线观看 | 久久情爱| 久久久久看片 | 射久久| 中日韩免费视频 | 91av手机在线 | 天天摸日日操 | 久久国语 | 日本中文字幕网站 | 国产一级性生活视频 | 91一区啪爱嗯打偷拍欧美 | 婷婷99| 五月婷婷丁香激情 | 丁香激情综合国产 | 久久人人爽人人爽人人片av免费 | 成人av午夜 | 久久精品视频一 | 四虎影视成人永久免费观看视频 | 亚洲男男gaygay无套同网址 | 国内精品久久天天躁人人爽 | 久久草在线精品 | 狠狠干美女 | 久久成人午夜视频 | 精品国产91亚洲一区二区三区www | 免费看黄色毛片 | 91一区一区三区 | 美女福利视频 | 四虎最新入口 | 在线观看av小说 | 在线视频一二区 | 日韩精品中文字幕在线不卡尤物 | 日韩精品欧美一区 | 国产黄色片一级三级 | 91精品视频在线免费观看 | 国产一区二区三区高清播放 | 91精品久久香蕉国产线看观看 | 欧美大码xxxx | 久久久久久久久久久久影院 | 人人爱夜夜操 | 亚洲欧美国产视频 | 亚洲激情一区二区三区 | 青青河边草观看完整版高清 | 成人黄色影片在线 | 成 人 免费 黄 色 视频 | 国产精品毛片一区 | 又黄又爽又无遮挡的视频 | 久久久精品欧美一区二区免费 | 中文字幕网站 | 中文字幕 国产 一区 | 国产精品美女在线观看 | 国产91小视频 | 久精品视频在线观看 | 日韩av午夜在线观看 | 91福利在线导航 | 日韩在线观看精品 | 久久一区二 | 国产黄色大全 | 国产高清免费在线观看 | 精品国产a | 欧美午夜性 | 色婷婷综合久久久中文字幕 | 国产精品久久久久久久久费观看 | 国产精品福利无圣光在线一区 | a级片久久久 | 国产黄色特级片 | 2019免费中文字幕 | 日本黄色免费电影网站 | 精品一区二区三区香蕉蜜桃 | 日本三级吹潮在线 | 国产黄在线| 欧美一级片免费 | 欧美日韩久久不卡 | 欧美一级特黄aaaaaa大片在线观看 | 国产色在线 | 超碰人人乐| 韩国精品视频在线观看 | 亚洲aⅴ一区二区三区 | 欧美片网站yy | 国产精品日韩久久久久 | 天天射天天操天天干 | 美女视频黄频大全免费 | 97视频在线免费观看 | 国产精品一区二区三区在线播放 | 免费日韩av片 | 亚洲一区欧美精品 | 免费日韩电影 | 91资源在线视频 | 久久免费视频观看 | 成人免费观看大片 | 国产一卡二卡四卡国 | 人人舔人人舔 | 97av视频 | 国产一区播放 | 91污视频在线观看 | 亚洲精品美女免费 | 99精品国产高清在线观看 | 国产精品国产三级在线专区 | 色七七亚洲影院 | 日韩欧美一区二区在线播放 | 日韩欧美专区 | 天天做天天爱夜夜爽 | 亚洲午夜精品福利 | 久久天天操| 91视频网址入口 | 天天干天天操天天搞 | 人人干狠狠干 | 天天色综合三 | 久久久久久久久久久久亚洲 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 久久国产精品99国产 | 91成人网页版 | 久久精彩| 久久草草热国产精品直播 | 国产精品久久久久久电影 | 欧美一区在线观看视频 | 久久艹精品| 最新亚洲视频 | 国产成人一区二区在线观看 | 国产精品久久久久久久久免费看 | 久久精品久久久久久久 | 国产精品一区久久久久 | 美女黄频网站 | 黄色小网站免费看 | av字幕在线 | 国产一二三在线视频 | 九九色视频| 久久久久www | 免费在线观看av电影 | 免费黄色av. | 国内亚洲精品 | 我要看黄色一级片 | 美女网站视频免费黄 | 国产免费又黄又爽 | 免费在线观看视频a | 九九九九九九精品任你躁 | 午夜av免费在线观看 | 最新av网址在线 | 九九免费在线视频 | 国产精品99久久久精品免费观看 | 久草五月 | 又黄又刺激视频 | 国内视频在线 | 99在线精品视频观看 | 国产成人精品久 | 国产69精品久久久久久久久久 | 97色涩| 欧美在线18 | 97人人人| 男女拍拍免费视频 | 精久久久久 | 91麻豆精品国产自产 | 国产96在线 | 在线免费av播放 | 波多野结衣一区三区 | 欧美人体xx | 国产精品女教师 | 人人爱夜夜操 | 欧美午夜久久久 | 久久夜色网 | 中文字幕一区二区三区四区在线视频 | 久久成人人人人精品欧 | 精品国产伦一区二区三区 | 日本一区二区三区免费观看 | 免费在线观看av网址 | 91在线视频免费91 | 国产永久免费高清在线观看视频 | 日韩在线免费播放 | 色婷婷亚洲| 91一区二区三区在线观看 | 亚洲综合丁香 | 最近中文字幕高清字幕在线视频 | av网站在线免费观看 | 欧美日韩不卡一区 | 中文不卡视频在线 | 欧美精品一区二区蜜臀亚洲 | 天天操天天干天天干 | 天天射夜夜爽 | 久久免费成人网 | 亚洲精品456在线播放 | 亚洲国产精品第一区二区 | 成人黄色短片 | 91豆花在线| 在线综合 亚洲 欧美在线视频 | 91精品视频导航 | 欧美激情精品久久久久久免费 | 91私密视频| 免费网址在线播放 | 九九九九热精品免费视频点播观看 | 日韩av中文字幕在线免费观看 | 欧美极品xxx| 久久综合爱 | 日本久久久久久久久久 | 欧美极品久久 | 91精彩视频在线观看 | 91大神精品视频 | 日韩在线观看视频免费 | av在线免费观看不卡 | 91最新网址 | 伊人狠狠色丁香婷婷综合 | 在线中文字幕网站 | www.久久久com | 麻豆一区在线观看 | 国产成人1区 | 久久这里只有精品久久 | 日韩免费福利 | 成人午夜精品 | av黄色在线观看 | 久久黄色精品视频 | 天堂黄色片 | 国产精品淫片 | 毛片网站在线看 | 国产破处在线视频 | 精品一区二区三区四区在线 | 久草视频在线观 | 色网站在线观看 | 亚洲黄色影院 | 日韩欧美视频在线播放 | 波多野结衣视频网址 | 精品免费久久久久 | 成人午夜毛片 | 国产91精品看黄网站 | 免费在线国产视频 | 日韩试看| 中文字幕在线观看网站 | 国产 日韩 欧美 中文 在线播放 | 综合久久综合久久 | 97色国产| 免费在线观看不卡av | 国产精品观看在线亚洲人成网 | 免费久久99精品国产婷婷六月 | 天天亚洲| 狠狠狠色丁香综合久久天下网 | 7777xxxx| 久久久久久久久久久久国产精品 | 成人av影视观看 | 色婷婷久久 | 激情五月视频 | 五月婷婷六月丁香 | 国产精品嫩草影视久久久 | 久久免费黄色网址 | 999视频在线播放 | 涩涩爱夜夜爱 | 亚洲欧洲国产日韩精品 | 色婷婷啪啪免费在线电影观看 | 国产 欧美 在线 | 国产国产人免费人成免费视频 | 超碰人人草 | 久久亚洲专区 | 成人性生交大片免费看中文网站 | 国产精品一区二区吃奶在线观看 | 国产精品一区在线播放 | 国产精品成人在线 | 日韩精品视频在线免费观看 | 在线观看免费福利 | 国产一级一片免费播放放 | 久久久久久久久久亚洲精品 | 亚洲在线| www一起操 | 一级黄色毛片 | 国产精品久久久久久久久久久久午 | 在线亚洲欧美日韩 | 国产aaa大片 | 精品久久久久久亚洲综合网站 | 国产福利一区二区三区视频 | a久久免费视频 | 日本久久成人中文字幕电影 | 久久精品首页 | 成人在线中文字幕 | 又黄又刺激视频 | 麻豆传媒视频在线免费观看 | 久久中文精品视频 | 91av观看| 日韩国产精品久久久久久亚洲 | 麻豆视频www | 天天av在线播放 | 黄色av高清 | 精品国产黄色片 | 国产精品a久久 | 国产亚洲精品bv在线观看 | 欧洲精品一区二区 | 欧美特一级 | 国产日韩欧美在线免费观看 | 色婷婷视频 | 国产亚洲精品综合一区91 | 久久精品欧美一 | 手机av在线不卡 | 精品99免费 | 在线视频观看国产 | 久草在线免费新视频 | 国产精品成人一区二区 | 超碰人人舔 | 麻豆视频免费在线观看 | 99久热在线精品视频观看 | 99久久精品国产系列 | 成人免费观看大片 | 免费亚洲精品 | 午夜精品视频一区 | 亚洲精品视频在线观看网站 | 黄色片网站大全 | av在线免费观看黄 | 亚洲精品视频免费看 | 国产精品嫩草55av | 精品久久久久免费极品大片 | 国产一区福利在线 | 国产精品亚洲片在线播放 | 最近中文字幕国语免费av | 91精品国产成人观看 | 免费看片黄色 | 午夜精品99久久免费 | 日韩网站在线播放 | 日韩va在线观看 | 天天射天天做 | 国产999在线观看 | 日韩av成人 | 精品女同一区二区三区在线观看 | 欧美另类xxx | 久久桃花网 | 不卡的av在线播放 | 超碰公开在线 | 久久激情影院 | 99精品欧美一区二区三区黑人哦 | 欧美成人播放 | 精品久久久久久久久亚洲 | 波多野结衣久久资源 | 国产一区二区久久 | 日韩啪视频 | 国产色区| 欧美一级性生活 | 天天爽人人爽 | 久久深夜福利免费观看 | av一级一片 | 激情综合网五月激情 | 国产精品完整版 | 国产伦精品一区二区三区在线 | www.狠狠操.com | 欧美在线视频一区二区 | 精品a视频 | 天天干天天射天天操 | 国产精品扒开做爽爽的视频 | 日韩视频在线观看免费 | 亚洲国产中文字幕在线视频综合 | 国产精品v欧美精品 | 五月激情片 | 综合久色 | 黄色片亚洲 | 久久综合影视 | 久久久久久久久久亚洲精品 | 久久综合导航 | 麻豆精品国产传媒 | 最新av网站在线观看 | 婷婷色综合 | 色悠悠久久综合 | 久久公开免费视频 | 香蕉视频在线视频 | www.夜色.com | www.超碰97.com | 中文字幕在线免费观看 | 玖草影院 | 中文字幕免费一区二区 | 欧美午夜性生活 | 免费看日韩 | 在线草| 国产色影院 | 美女在线免费视频 | 主播av在线 | 亚洲三级黄 | 天堂在线一区 | 99精品视频一区 | 国产一区二区三区视频在线 | 午夜神马福利 | 中文字幕美女免费在线 | 中文字幕一区二区三区四区久久 | 九九热在线精品视频 | 亚洲热久久 | 亚洲国产97在线精品一区 | 国产一级免费在线观看 | 91精彩视频在线观看 | 久久久久久麻豆 | 亚洲五月花 | 国内精品久久久久久久影视麻豆 | 91九色最新 | 97电影在线观看 | 欧美精品亚洲精品 | 97精品免费视频 | 黄色免费高清视频 | 91最新在线 | 在线观看国产福利片 | 成年人app网址 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 精品国产1区2区 | 在线日韩精品视频 | 日韩欧美在线高清 | 久久这里只有精品首页 | 国内小视频 | 一区久久久 | 操操爽 | 国产热re99久久6国产精品 | 中文字幕成人av |