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

設(shè)計(jì)一個簡單的iOS架構(gòu)

移動開發(fā)
正如“100個讀者就有100個哈姆雷特”一樣,對于架構(gòu)的理解不同的軟件工程師有不同的看法。架構(gòu)設(shè)計(jì)往往是一個權(quán)衡的過程,每一個架構(gòu)設(shè)計(jì)者都要考慮到各個因素,比如團(tuán)隊(duì)成員的技術(shù)水平、具體的業(yè)務(wù)場景、項(xiàng)目的成長階段和開發(fā)周期。

前言

正如“100個讀者就有100個哈姆雷特”一樣,對于架構(gòu)的理解不同的軟件工程師有不同的看法。架構(gòu)設(shè)計(jì)往往是一個權(quán)衡的過程,每一個架構(gòu)設(shè)計(jì)者都要考慮到各個因素,比如團(tuán)隊(duì)成員的技術(shù)水平、具體的業(yè)務(wù)場景、項(xiàng)目的成長階段和開發(fā)周期。

本文談?wù)劰P者的一些架構(gòu)理念,以及本人是如何設(shè)計(jì)一個簡單的 iOS 架構(gòu)。

iOS 架構(gòu) DEMO

一、關(guān)于組件化

組件化似乎是項(xiàng)目發(fā)展壯大過后必然要做的事情,它能讓各個業(yè)務(wù)線的工程師不需要過多的關(guān)注其他業(yè)務(wù)線的代碼,有效的提高團(tuán)隊(duì)整體效率。然而實(shí)施組件化的時機(jī)是在需求相對穩(wěn)定、產(chǎn)品閉環(huán)形成過后。所以本文不會應(yīng)用組件化,但是這里簡單談?wù)剺I(yè)界的組件化方案。

組件化的核心問題就是組件間如何通訊。“軟件工程的一切問題都能通過一個間接的中間層解決。”中介模式很自然的運(yùn)用起來:

設(shè)計(jì)一個簡單的iOS架構(gòu)

這樣雖然能統(tǒng)一組件間的通訊請求,但是卻沒有避免 Mediator 和目標(biāo)組件的耦合,ModuleA 工程中仍然需要導(dǎo)入 ModuleB 。

所以重點(diǎn)問題落在了解耦上: 

設(shè)計(jì)一個簡單的iOS架構(gòu)

要達(dá)到 Mediator 和目標(biāo)組件的解耦,就需要實(shí)現(xiàn)它們之間的間接調(diào)用(圖中虛線),既然是間接調(diào)用,必然需要一種映射機(jī)制。在 iOS 開發(fā)中,業(yè)界大概有三種方式來處理。

(1) 使用 URL -> Block 解耦

簡單來說就是將組件的調(diào)用代碼放入 block 中,然后 URL 作為 key,block 作為 value,存入一個全局的 hash 容器,組件通過一個 URL (比如 "native/id=10/type=1" )向 Mediator 發(fā)起請求,Mediator 找到對應(yīng)的代碼塊執(zhí)行。由此,解開了 Mediator 和目標(biāo)組件的耦合(見博客:蘑菇街 App 的組件化之路)。

這種方案的缺陷很多:組件越多常駐內(nèi)存越多;解析 URL 邏輯復(fù)雜;URL 無法表述具體語言相關(guān)的對象類型。所以這種方式并不適合組件化解耦。

(2) 使用 Protocol 解耦

阿里的 BeeHive 是該方案的很好實(shí)踐,筆者閱讀了一下源碼,它的大致工作原理如下:注冊 Protocol 對應(yīng)的組件,這個和上面說的 URL->Block 方式如出一轍,只不過這里是 Protocol-> Module ;組件申請?jiān)L問時導(dǎo)入對應(yīng)的 Protocol 通過 Mediator 獲取到對應(yīng)的組件對象。由于協(xié)議的表述能支持所有的對象類型,所以這種方式能基本解決組件間通信的需求。

BeeHive 注冊組件有幾種方式,一種是監(jiān)聽了動態(tài)鏈接時 image 二進(jìn)制文件加載完成的回調(diào),通過修改代碼段的方式判斷對應(yīng)的模塊進(jìn)行注冊;第二種是在 +load 方法里面注冊;第三種是異步注冊,但是這種方式存在一個問題,可能組件使用方準(zhǔn)備使用組件的時候,這個組件還未注冊成功。

BeeHive 還為組件設(shè)置了優(yōu)先級的概念,它通過數(shù)組來保持優(yōu)先級排序,在源碼中能看到一些數(shù)組排序的邏輯,這就帶來了相當(dāng)多的高時間復(fù)雜度的運(yùn)算。

所以,組件數(shù)量過多的話,會延長動態(tài)鏈接庫的過程。

BeeHive 為了讓每一個組件享有獨(dú)自的 app 生命周期、3D touch 等功能,會將這些系統(tǒng)級的事件發(fā)送給每一個組件,且不談大量的方法調(diào)用損耗,它必須讓入口文件 AppDelegate 繼承自 BeeHive 的 BHAppDelegate,筆者感覺侵入性過強(qiáng),并且當(dāng)開發(fā)者需要復(fù)寫 AppDelegate 方法的時候,還要注意讓super調(diào)用一下,可以說很不優(yōu)雅了。

在基于協(xié)議的組件化方案中,組件使用方能直接拿到目標(biāo)組件的實(shí)例,那么使用者可能對該實(shí)例進(jìn)行修改,這可能會帶來安全問題。

(3) 使用 Target-Action 解耦

Casa Taloyum 前輩的 iOS應(yīng)用架構(gòu)談 組件化方案 為此做出了***實(shí)踐。

Mediator 使用 Target-Action 來間接的調(diào)用目標(biāo)組件,無需專門注冊。組件維護(hù)者需要做一個 Mediator 的分類,通過硬編碼調(diào)用目標(biāo)組件,然后組件使用者只需要依賴這個分類就行了。

封裝的 Mediator 源碼只有簡單的 200+ 行代碼,并且很易懂。這也讓開發(fā)者能對組件化的實(shí)施更加有信心,不會因?yàn)榛A(chǔ)設(shè)施的錯誤而束手無策。

小總結(jié)

關(guān)于以上組件化的簡單表述僅代表筆者的個人見解,由于筆者并沒有真正的實(shí)施組件化,所以理解可能有誤。

雖然筆者設(shè)計(jì)的 iOS 架構(gòu)不會應(yīng)用組件化,但是這給我們的架構(gòu)設(shè)計(jì)帶來了前瞻性的引導(dǎo),這非常重要。

二、模塊化思維劃分文件

在團(tuán)隊(duì)開發(fā)中,項(xiàng)目發(fā)展到后期總是會出現(xiàn)某些文件或代碼難以管理,出現(xiàn)這種情況的主要原因通常是項(xiàng)目開發(fā)過程中對文件的管理過于隨意。

開發(fā)者應(yīng)該盡量將所有代碼文件歸于模塊,而不要出現(xiàn)模擬兩可的文件。而筆者這里說的模塊,是有具體意義的模塊,比如圖片處理模塊、字體處理模塊,而不是諸如 Public、Common 等無具體意義的代碼文件。

試想,在多人開發(fā)中,當(dāng)所有人都覺得有些代碼不知道怎么歸類的時候,就會往 Public 里面扔。當(dāng)你某天想要整理一下這個 Public,會發(fā)現(xiàn)已經(jīng)無從下手;或者當(dāng)你需要遷移項(xiàng)目中的某個業(yè)務(wù)模塊時,會附帶遷移一些模塊,當(dāng)這個模塊是有意義的(比如圖片處理模塊),你的遷移成本會非常低,但是當(dāng)這個藕斷絲連的模塊是 Public 時,時間成本可能高于你的想象,估計(jì)你會將它完整的拷貝過去,而又對新項(xiàng)目造成了污染。

全局的公共文件是產(chǎn)生垃圾代碼的源頭。筆者認(rèn)為幾乎所有的代碼都是可以歸類為模塊的。

大致梳理了一個文件分類,當(dāng)然這個分類是靈活的,只是要分模塊劃分:

  • - GeneralModules 放項(xiàng)目獨(dú)有的通用配置模塊(比如通用顏色模塊、通用字體模塊)
  • - ToolModules 放工具類模塊(比如系統(tǒng)信息模塊)
  • - PackageModules 放基于業(yè)務(wù)的一些封裝(比如提示框模塊、加載菊花模塊)
  • - BusinessModules 放業(yè)務(wù)模塊(比如購物車、個人中心)

具體里面放了些什么,可以查看筆者的 DEMO。

三、減少全局宏的使用

很多時候,過多的宏讓項(xiàng)目很不整潔,每一個開發(fā)者都往全局文件添加宏,而往往只是一段簡單的代碼,筆者認(rèn)為開發(fā)中應(yīng)該盡量少使用宏,原因如下:

  • 宏在預(yù)編譯階段替換為實(shí)際代碼,存在效率問題
  • 使用宏的地方可能只需要一塊內(nèi)存,但是宏替換過后開辟了多個(這種情況應(yīng)該用常量替換宏)
  • 可能存在潛在的宏命名沖突
  • 宏包裝過多的代碼難以理解和調(diào)試
  • 代碼遷移時需要處理全局的宏

實(shí)際上,非得使用宏的地方并非那么多,比如需要定義一個全局的導(dǎo)航欄字體方便使用,可以將通用字體的配置參數(shù)作為一個模塊: 

  1. @interface YBGeneralFont : NSObject 
  2. /** 導(dǎo)航欄標(biāo)題字體 */ 
  3. + (UIFont *)navigationBarTitleFont; 
  4. @end 

或者用常量來代替宏: 

  1. .h 
  2. FOUNDATION_EXTERN NSString * const kNotify_xxx; //xxx通知 key 
  3. .m 
  4. NSString * const kNotify_xxx = @"kNotify_xxx"

這么做也便于轉(zhuǎn)換思維,畢竟 swift 中是沒有宏的。

四、去基類化設(shè)計(jì)

代碼設(shè)計(jì)中,應(yīng)該盡量避免基類的使用,也就是說,你不應(yīng)該總是要求開發(fā)者去繼承你的基類來做功能。使用基類將造成不可避免的耦合,為業(yè)務(wù)的長期發(fā)展帶來阻礙(當(dāng)然某些情況是可以使用基類的)。

其實(shí)使用基類就算了,若是將大量的業(yè)務(wù)邏輯放入基類中將是災(zāi)難的開端。試想,當(dāng)項(xiàng)目新成員一來就看見成千上萬行的基類代碼TA作何感想?

另外一種場景,當(dāng)需要將項(xiàng)目中的某個模塊遷移到其他項(xiàng)目,或者需要將其他項(xiàng)目合并入當(dāng)前項(xiàng)目,基類的合并將是一個非常頭疼的問題,它藕斷絲連的模塊和代碼會讓你抓狂。

那么,類的工具方法應(yīng)該放哪兒?對所有類的統(tǒng)一配置應(yīng)該放哪兒?對封裝模塊的個性化定制應(yīng)該怎么做?

裝飾模式

類的工具方法,按道理說可以提取為模塊,但是有些場景可能顯得不夠簡潔。

其實(shí)只要留意 iOS 官方的 API,你就不難發(fā)現(xiàn)裝飾模式的大量應(yīng)用,使用數(shù)個分類將大量的方法按照功能分類,會清晰且優(yōu)雅: 

  1. @interface UIViewController (YBGeneral) 
  2. /** 基礎(chǔ)配置 */ 
  3. - (void)YBGeneral_baseConfig; 
  4. @end 
  5. @interface UIViewController (YBGeneralBackItem) 
  6. /** 配置通用系統(tǒng)導(dǎo)航欄返回按鈕 */ 
  7. - (void)YBGeneral_configBackItem; 
  8. /** 重寫該方法以自定義系統(tǒng)導(dǎo)航欄返回按鈕點(diǎn)擊事件 */ 
  9. - (void)YBGeneral_clickBackItem:(UIBarButtonItem *)item; 
  10. @end 

不過要注意的時,定義分類的時候一定要加一個前綴標(biāo)識以避免方法覆蓋。

AOP

面向切面編程在 iOS 領(lǐng)域經(jīng)典的應(yīng)用就是利用 Runtime 去 Hook 方法: 

  1. @implementation UIViewController (YBGeneralHook) 
  2. + (void)load { 
  3.     [self YBGeneralHook_exchangeImplementationsWithOriginSel:@selector(viewDidLoad) customSel:@selector(YBGeneralHook_viewDidLoad)]; 
  4. + (void)YBGeneralHook_exchangeImplementationsWithOriginSel:(SEL)originSel customSel:(SEL)customSel { 
  5.     Method origin = class_getInstanceMethod(self, originSel); 
  6.     Method custom = class_getInstanceMethod(self, customSel); 
  7.     if (origin && custom) { 
  8.         method_exchangeImplementations(origin, custom); 
  9.     } 
  10. - (void)YBGeneralHook_viewDidLoad { 
  11.     NSLog(@"進(jìn)入:%@", self); 
  12.     [self YBGeneral_baseConfig]; 
  13.     if (self.navigationController && [self.navigationController.viewControllers indexOfObject:self] != 0) { 
  14.         [self YBGeneral_configBackItem]; 
  15.     } 
  16.     [self YBGeneralHook_viewDidLoad]; 
  17. @end 

代碼中統(tǒng)一配置了 UIViewController 的系統(tǒng)導(dǎo)航欄返回按鈕,注意這里調(diào)用的業(yè)務(wù)配置方法都是定義在 UIViewController 的分類里面的。若有某些導(dǎo)航欄需要格外配置返回按鈕的需求,可以拓展一個屬性來控制。

面向協(xié)議設(shè)計(jì)模式

對于一些封裝的組件,多考慮使用協(xié)議來個性化定制,繼承作為最差方案,而非是***方案。

定義一個遵守組件定制協(xié)議的屬性是常用的解決方法:

  1. @property (nonatomic, strong) id<someProtocol>  strategy; 

不同的屬性作為不同的策略,組件內(nèi)部通過調(diào)用對應(yīng)的協(xié)議方法實(shí)現(xiàn)個性化定制。而當(dāng)使用者想要改變策略時,只需要更改這個屬性就行了。面向協(xié)議設(shè)計(jì)模式結(jié)合策略模式是一個很好的實(shí)踐。

五、MVC?MVP?MVVM?VIPER?

業(yè)務(wù)具體的架構(gòu)模式是個讓很多開發(fā)者頭疼的問題,因?yàn)橛袝r候能讓復(fù)雜業(yè)務(wù)更清晰,有時候卻因?yàn)槟z水代碼過多而臃腫。

實(shí)際上為什么要嚴(yán)格的遵守架構(gòu)模式呢?為什么每一個業(yè)務(wù)模塊的架構(gòu)模式都要一模一樣呢?

筆者認(rèn)為正確的架構(gòu)思路一定是根據(jù)業(yè)務(wù)來的,不同的模塊,不同的業(yè)務(wù)線完全可以有不同的架構(gòu),只需要架構(gòu)足夠清晰不至于晦澀。

大致設(shè)計(jì)了一下架構(gòu)的主旋律:

設(shè)計(jì)一個簡單的iOS架構(gòu)

  • DataCenter 負(fù)責(zé)數(shù)據(jù)的獲取、處理、緩存等。
  • Model 設(shè)計(jì)為“瘦” Model,便于復(fù)用和遷移;也考慮到數(shù)據(jù)源可能數(shù)量龐大,若 Model 設(shè)計(jì)得過于“胖”,會造成更多的內(nèi)存占用。
  • View 負(fù)責(zé)數(shù)據(jù)的展示,可以根據(jù)業(yè)務(wù)情況權(quán)衡是否需要 ViewModel 處理界面邏輯。
  • ViewController 作為 DataCenter 和 View 的橋梁。

筆者設(shè)計(jì)的項(xiàng)目目前不會很復(fù)雜,多數(shù)情況上面的架構(gòu)就已經(jīng)夠用,若某個頁面功能過多,完全可以提取一些額外的模塊,比如 DataCenter 處理過于復(fù)雜,那就把數(shù)據(jù)的處理和緩存提取出來:xxxDataProcesser、xxxDataCache。這些都是靈活的,只需要按照模塊化的思維提取,ViewController 的代碼相信也不會太多。

關(guān)于響應(yīng)式框架

Reactivecocoa 雖然強(qiáng)大,筆者以前也用過,不過它是一個重量級框架,學(xué)習(xí)成本有點(diǎn)高,可能會因?yàn)閳F(tuán)隊(duì)成員對其了解不足導(dǎo)致難以定位的錯誤。

而美團(tuán)的 EasyReact 似乎是一個福音,筆者大概瀏覽了一下源碼,質(zhì)量確實(shí)很高,對性能方面的處理很精致,基于圖論算法的處理也感覺很棒,項(xiàng)目侵入性也很小。不過缺點(diǎn)就是太新了,需要開發(fā)社區(qū)一定時間的驗(yàn)證,暫時筆者持觀望態(tài)度。

結(jié)語

本文只是作者思考過后對一個項(xiàng)目架構(gòu)的簡單設(shè)計(jì),還有很多部分需要完善和補(bǔ)充,具體細(xì)節(jié)也可能會按照具體情況修改。Demo 只是一個雛形,希望和各位讀者朋友能有所交流。

 

責(zé)任編輯:未麗燕 來源: 簡書
相關(guān)推薦

2024-04-24 10:38:22

2025-05-27 10:15:00

Go開發(fā)軟件架構(gòu)

2019-06-27 09:50:49

高性能秒殺系統(tǒng)

2012-02-01 14:12:55

iOS本地緩存機(jī)制

2020-11-11 09:49:12

計(jì)算架構(gòu)

2021-05-20 13:22:31

架構(gòu)運(yùn)維技術(shù)

2011-03-24 09:34:41

SPRING

2022-11-08 08:35:53

架構(gòu)微服務(wù)移動

2009-08-19 04:14:00

線性鏈表

2023-02-07 10:40:30

gRPC系統(tǒng)Mac

2009-07-14 16:02:42

JDBC例子

2020-11-09 06:38:00

ninja構(gòu)建方式構(gòu)建系統(tǒng)

2023-01-03 12:30:25

架構(gòu)CPUGPU

2021-04-28 08:52:22

高并發(fā)架構(gòu)設(shè)高并發(fā)系統(tǒng)

2025-10-28 02:00:00

秒殺系統(tǒng)客戶端并發(fā)

2025-01-22 08:00:00

架構(gòu)秒殺系統(tǒng)Java

2013-03-26 14:17:21

架構(gòu)架構(gòu)設(shè)計(jì)事件驅(qū)動

2011-09-08 13:41:53

Widget

2016-09-21 12:54:10

CAAS系統(tǒng)鏡像

2017-08-17 16:37:59

MySQL數(shù)據(jù)遷移
點(diǎn)贊
收藏

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

俺去亚洲欧洲欧美日韩| 在线观看免费视频综合| 精品欧美一区二区久久久伦| 国产精品久久久久久久久久久久久久久久久| 超碰成人97| 天天做天天摸天天爽国产一区| 欧美精品国产精品久久久 | 丰满少妇高潮一区二区| 国产精品久久久久77777丨| 樱桃视频在线观看一区| 精品在线视频一区二区三区| 中文字幕精品一区二区精| 欧美日本国产| 在线观看精品国产视频| 在线观看成人动漫| 亚洲网站免费| 色88888久久久久久影院按摩| 日本女人高潮视频| 韩国福利在线| 成人午夜视频在线| 国产精品中文字幕久久久| 久久久久久久99| 久久精品国内一区二区三区水蜜桃| 精品国产免费人成电影在线观看四季 | 91国模少妇一区二区三区| 亚洲国产精品免费视频| 欧美图片一区二区三区| 六月丁香婷婷激情| 欧美24videosex性欧美| 国产精品久久久久久一区二区三区| 国产chinese精品一区二区| 中文字幕一区二区三区四区免费看 | 亚洲全黄一级网站| 99久久免费看精品国产一区| 精品三级久久久| 欧美日韩高清在线播放| 老熟妇仑乱视频一区二区| 麻豆网站免费在线观看| 亚洲一二三专区| japanese在线播放| 老司机午夜在线| 亚洲国产成人在线| 日韩精品久久久免费观看| 性xxxxbbbb| 99re这里只有精品视频首页| av一区和二区| www.五月婷婷| 国产成人精品免费在线| 91视频国产高清| 国产精品视频在线观看免费| 六月丁香综合在线视频| 国产精品久久久久久久9999| 懂色av蜜臀av粉嫩av分享吧最新章节| 男女精品视频| 日韩av免费看网站| 中文字幕xxxx| 美女国产一区二区| 成人免费观看a| 国产av一区二区三区| 精品亚洲欧美一区| 亚洲999一在线观看www| www.四虎在线观看| 成人黄色777网| 国产综合第一页| 欧美91精品久久久久国产性生爱| 久久亚洲精精品中文字幕早川悠里| 久久久久天天天天| 免费在线视频一级不卡| 欧美韩日一区二区三区四区| 一本久道久久综合狠狠爱亚洲精品| 日本中文在线| 亚洲黄色在线视频| av免费看网址| 日韩久久一区二区三区| 欧美日韩的一区二区| 亚欧美一区二区三区| 成人免费直播在线| 亚洲女人被黑人巨大进入al| 国产又黄又粗的视频| 91亚洲自偷观看高清| 欧美另类极品videosbest最新版本| 免费在线观看日韩| 亚洲综合不卡| 成人高h视频在线| 高h放荡受浪受bl| 国产喂奶挤奶一区二区三区| 在线综合视频网站| 丁香花在线电影小说观看| 欧美性生交大片免费| 五月婷婷狠狠操| 日韩三级av高清片| 国产视频在线一区二区| 性爱在线免费视频| 亚洲午夜伦理| 国产精品欧美一区二区| www日本高清视频| 久久这里只有精品视频网| 正在播放亚洲| 伊人久久精品一区二区三区| 制服丝袜亚洲色图| 日本免费福利视频| 91精品蜜臀一区二区三区在线| 97色伦亚洲国产| 888奇米影视| 91视频观看免费| a级网站在线观看| 日韩毛片免费观看| 精品国产亚洲在线| 久久人妻无码aⅴ毛片a片app | heyzo久久| 久久频这里精品99香蕉| 一级黄色片视频| 2021国产精品久久精品| 欧美性猛交内射兽交老熟妇| 国产精品毛片久久久久久久久久99999999| 日韩三级高清在线| 欧美日韩国产一二三区| 亚洲一区二区伦理| 成人av男人的天堂| 久久五月精品| 欧美视频你懂的| 女同毛片一区二区三区| 欧美久久影院| 91亚洲国产精品| 午夜视频在线观看网站| 一本色道久久综合狠狠躁的推荐| 国产一级二级av| 希岛爱理一区二区三区| 国产精品777| 日韩精品视频无播放器在线看| 夜夜嗨av一区二区三区四季av| 成人性生交免费看| 国产精品手机在线播放| 欧美一级淫片videoshd| 秋霞欧美在线观看| 亚洲一区二区三区在线| 日本人dh亚洲人ⅹxx| 婷婷综合网站| 成人高清视频观看www| 在线免费观看黄色网址| 欧美性色aⅴ视频一区日韩精品| 亚洲黄色在线网站| 亚洲欧美日韩精品一区二区| 精品日本一区二区三区在线观看| 丰满诱人av在线播放| 欧美va在线播放| 中文字幕精品亚洲| 久久精品国产一区二区三| 日韩黄色影视| 国产三级一区| 夜夜嗨av色综合久久久综合网 | 欧美无乱码久久久免费午夜一区| 国产精品三级在线观看无码| 亚洲久久成人| 国产一区精品在线| 国产精品25p| 亚洲精品一区av在线播放| 精品人妻无码一区二区性色| 91老司机福利 在线| 欧美日韩在线不卡视频| 综合亚洲自拍| 国产精品久久久久久久久久| 8888四色奇米在线观看| 5566中文字幕一区二区电影| 色撸撸在线视频| 蜜桃视频一区二区三区在线观看| 一区二区三区四区视频在线| 国产精品日本一区二区不卡视频| 久久777国产线看观看精品| 亚洲乱码国产乱码精品精软件| 亚洲一区二区三区视频在线播放 | 欧美日中文字幕| 国产欧美va欧美va香蕉在线| 欧美激情免费| 精品日韩欧美在线| 69国产精品视频免费观看| 中文字幕第一区第二区| 性生活在线视频| aa级大片欧美三级| 五月天久久狠狠| 精品国产亚洲一区二区在线观看 | 精品久久免费视频| 久久婷婷一区二区三区| 高潮一区二区三区| 欧美视频成人| 手机看片福利永久国产日韩| 亚洲电影一区| 国产精品久久久久久av| 在线电影福利片| 亚洲欧洲av一区二区| a级片在线视频| 日韩欧美国产激情| 在线观看成人毛片| 久久新电视剧免费观看| 九九九九九九九九| 免费日韩一区二区| 国产日韩第一页| 免费看成人哺乳视频网站| 成人免费观看a| 刘亦菲一区二区三区免费看| 欧美成人免费大片| 国产一级免费在线观看| 欧美一区二区视频免费观看| 亚洲 欧美 成人| 一区二区三区四区在线免费观看| 无码人妻精品一区二区中文| 国产高清精品在线| 亚洲免费一级视频| 亚洲一区欧美二区| 日本中文字幕在线视频观看| 日韩精品dvd| 久久久久久亚洲精品不卡4k岛国| 欧美片网站免费| 国产日韩av高清| 男人最爱成人网| 97精品国产aⅴ7777| 成人影院在线观看| 伊人伊成久久人综合网站| 天堂网在线资源| 日韩女优视频免费观看| 国产一区二区小视频| 色悠悠亚洲一区二区| 五月天婷婷丁香| 一区二区三区日韩欧美精品| 日本爱爱小视频| 亚洲国产精华液网站w| 美女爆乳18禁www久久久久久| www.亚洲精品| 熟妇高潮一区二区| 国产v日产∨综合v精品视频| 亚洲天堂网站在线| 极品尤物av久久免费看| 91看片在线免费观看| 首页亚洲欧美制服丝腿| 欧美性久久久久| 亚洲一区二区三区高清不卡| 亚洲熟妇无码一区二区三区| 好看的亚洲午夜视频在线| 日本一道在线观看| 亚洲综合婷婷| 国产女主播av| 欧美日韩一视频区二区| 国产视频在线观看网站| 欧美日韩国产成人精品| 青草网在线观看| 一区二区亚洲精品| 久久久久久人妻一区二区三区| 亚洲视频观看| 草草视频在线免费观看| 综合久久一区| 日韩极品视频在线观看| 黄色成人精品网站| 欧美中文字幕在线观看视频| 亚洲无吗在线| 日本www在线视频| 亚洲欧美日本国产专区一区| 北条麻妃在线一区| 日本不卡一区二区三区| 亚洲精品久久久中文字幕| 蜜桃视频第一区免费观看| 视频区 图片区 小说区| 粉嫩蜜臀av国产精品网站| 国产麻豆xxxvideo实拍| 久久久www成人免费无遮挡大片| 国产一二三四五区| 国产精品久久久久精k8| 永久免费看黄网站| 亚洲国产va精品久久久不卡综合| 日韩手机在线观看| 日韩欧美精品中文字幕| 羞羞色院91蜜桃| 日韩午夜av一区| 亚洲 欧美 激情 另类| 亚洲天堂男人的天堂| 欧美videos极品另类| 欧美激情亚洲国产| 成人影院入口| 国产欧美一区二区三区在线看| 国产精一区二区| 久久国产精品 国产精品| 精品国产午夜| 国产在线观看欧美| 校园激情久久| www.久久com| 久久丝袜美腿综合| 色老板免费视频| 精品国产乱码久久久久久天美 | 免费观看在线综合| 中文在线字幕观看| 国产蜜臀av在线一区二区三区 | 欧美性xxxxxxx| 在线观看xxxx| 亚洲激情视频在线| 毛片在线播放a| 91av视频在线播放| 97久久中文字幕 | 欧美在线亚洲| 欧美综合在线观看视频| 国产精品综合网| av手机在线播放| 亚洲成人免费视频| 国产又粗又长又黄| 国产视频久久久| 欧美人与牲禽动交com| 国产精品美女免费看| 精品丝袜久久| 成人免费看片视频在线观看| 久久午夜影视| 奇米777第四色| 1000部国产精品成人观看| 国产精品免费精品一区| 日韩久久久精品| 免费人成在线观看播放视频 | 成人免费性视频| 久久精品国产999大香线蕉| 国产制服丝袜在线| 亚洲一区二区三区视频在线播放| 国产精品-色哟哟| 这里只有精品在线观看| www.精品| 九九九九久久久久| 亚洲一级特黄| 手机看片国产精品| 自拍偷拍亚洲综合| 在线观看免费视频a| 亚洲天堂成人在线| 深夜av在线| 精品综合久久久| 亚洲久久一区| 亚洲国产精品无码久久久久高潮| 亚洲一线二线三线久久久| 999久久久久久| 欧美成人激情视频| 99精品国产九九国产精品| 亚洲精品一品区二品区三品区| 丝袜亚洲另类欧美| 久久久久久久久久久久| 色噜噜狠狠成人中文综合| 天堂av网在线| 欧美在线性爱视频| 日韩精品丝袜美腿| 99爱视频在线| 久久亚区不卡日本| 无码人妻丰满熟妇精品区| 亚洲男人av电影| 欧美成人精品三级网站| 日韩欧美亚洲日产国| 日韩中文字幕一区二区三区| 波多野在线播放| 欧美在线观看视频一区二区三区| аⅴ资源新版在线天堂| 国产精品一区久久久| 99久久婷婷| 亚洲精品乱码久久久久久9色| 一二三四社区欧美黄| 日本黄视频在线观看| 91成人在线播放| 狠狠色狠狠色综合婷婷tag| 在线观看免费成人av| 国产精品久久一级| 国产精品怡红院| 欧美激情视频给我| 青青久久av| 日本免费观看网站| 亚洲欧洲日产国码二区| 亚洲第一天堂网| 欧美一区二区大胆人体摄影专业网站| 禁断一区二区三区在线| 一本一道久久a久久综合蜜桃| 尤物在线观看一区| 深爱激情五月婷婷| 国产精品久久久久999| 国产精品久久久久一区二区三区厕所| 极品人妻一区二区| 日韩欧美国产视频| 秋霞午夜理伦电影在线观看| 91在线播放视频| 麻豆亚洲精品| 天天综合天天做| 亚洲精品久久久久| 高清av一区二区三区| www.一区二区.com| 久久精品一区二区三区不卡| 国产美女精品视频国产| 91精品国产高清自在线| 97在线精品| 免费中文字幕av| 在线电影一区二区三区| 麻豆视频在线看| 在线看无码的免费网站| 99国产精品视频免费观看| 中文无码精品一区二区三区| 欧美激情18p| 日韩中文首页| 99精品一区二区三区无码吞精| 欧美日韩一区二区三区高清 | 91高清视频在线免费观看| 第四色成人网| 亚洲国产精品自拍视频| 56国语精品自产拍在线观看|