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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

猿题库 iOS 客户端架构设计-唐巧

發布時間:2023/12/18 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 猿题库 iOS 客户端架构设计-唐巧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

猿題庫是一個擁有數千萬用戶的創業公司,從20013年題庫項目起步到2015年,團隊保持了極高的生產效率,使我們的產品完成了五個大版本和數十個小版本的高速迭代。

在如此快速的開發過程中,如何保證代碼的質量,降低后期維護的成本,以及為項目越來越快的版本迭代速度提供支持,成為了我們關注的重要問題。這篇文章將闡明我們在猿題庫 iOS 客戶端的架構設計。

MVC

MVC,Model-View-Controller,我們從這個古老而經典的設計模式入手。采用 MVC 這個架構的最大的優點在于其概念簡單,易于理解,幾乎任何一個程序員都會有所了解,幾乎每一所計算機院校都教過相關的知識。而在 iOS 客戶端開發中,MVC 作為官方推薦的主流架構,不但 SDK 已經為我們實現好了 UIView、UIViewController 等相關的組件,更是有大量的文檔和范例供我們參考學習,可以說是一種非常通用而成熟的架構設計。

但 MVC 也有他的壞處。由于 MVC 的概念過于簡單樸素,已經越來越難以適應如今客戶端的需求,大量的代碼邏輯在 MVC 中并沒有定義得很清楚究竟應該放在什么地方,導致他們很容易就會堆積在 Controller 里,成為了人們所說的 Massive View Controller。

MVVM

MVVM,Model-View-ViewModel,一個從 MVC 模式中進化而來的設計模式,最早于2005年被微軟的 WPF 和 Silverlight 的架構師 John Gossman 提出。在 iOS 開發中實踐 MVVM 的話,通常會把大量原來放在 ViewController 里的視圖邏輯和數據邏輯移到 ViewModel 里,從而有效的減輕了 ViewController 的負擔。

另外通過分離出來的 ViewModel 獲得了更好的測試性,我們可以針對 ViewModel 來測試,解決了界面元素難于測試的問題。MVVM 通常還會和一個強大的綁定機制一同工作,一旦 ViewModel 所對應的 Model 發生變化時,ViewModel 的屬性也會發生變化,而相對應的 View 也隨即產生變化。

同樣的,MVVM 也有他的缺點:

一個首要的缺點是,MVVM 的學習成本和開發成本都很高。MVVM 是一個年輕的設計模式,大多數人對他的了解都不如 MVC 熟悉,基于綁定機制來進行編程需要一定的學習才能較好的上手。同時在 iOS 客戶端開發中,并沒有現成的綁定機制可以使用,要么使用 KVO,要么引入類似 ReactiveCocoa 這樣的第三方庫,使得學習成本和開發成本進一步提高。

另一個缺點是,數據綁定使 Debug 變得更難了。數據綁定使程序異常能快速的傳遞到其他位置,在界面上發現的 Bug 有可能是由 ViewModel 造成的,也有可能是由 Model 層造成的,傳遞鏈越長,對 Bug 的定位就越困難。

同時還必須指出的是,在傳統的 MVVM 架構中,ViewModel 依然承載的大量的邏輯,包括業務邏輯,界面邏輯,數據存儲和網絡相關,使得 ViewModel 仍然有可能變得和 MVC 中 ViewController 一樣臃腫。

在兩種架構中權衡而產生的架構

兩種架構的優點都想要,缺點又都想避開,我們在兩種架構中權衡了他們的優缺點,設計出了一個新的架構,起了一個名字叫:MVVM without Binding with DataController,架構圖如下:

ViewModel

先來看右邊視圖相關的部分,傳統的 MVC 當中 ViewController 中有大量的數據展示和樣式定制的邏輯,我們引入 MVVM 中 ViewModel 的概念,將這部分視圖邏輯移到了 ViewModel 當中。

在這個設計中,每一個 View 都會有一個對應的 ViewModel,其包含了這個 View 數據展示和樣式定制所需要的所有數據。同時,我們不引入雙向綁定機制或者觀察機制,而是通過傳統的代理回調或是通知來將 UI 事件傳遞給外界。而 ViewController 只需要生成一個 ViewModel 并把這個裝配給對應的 View,并接受相應的 UI 事件即可。

這樣做有幾個好處:首先是 View 的完全解耦合,對于 View 來說,只需要確定好相應的 ViewModel 和 UI 事件的回調接口即可與 Model 層完全隔離;而 ViewController 可以避免與 View 的具體表現打交道,這部分職責被轉交給了 ViewModel,有效的減輕了 ViewController 的負擔;同時我們棄用了傳統綁定機制,使用了傳統的易于理解的回調機制來傳遞 UI 事件,降低了學習成本,同時使得數據的流入和流出變得易于觀察和控制,降低了維護了調適的成本。

DataController

接下來我們關注 Model 和 VC 之間的關系。如之前提到,在傳統的 MVVM 中,ViewModel 接管了 ViewController 的大部分職責,包括數據獲取,處理,加工等等,導致其很有可能變得臃腫。我們將這部分邏輯抽離出來,引入一個新的部件,DataController。

ViewController 可以向 DataController 請求獲取或是操作數據,也可以將一些事件傳遞給 DataController,這些事件可以是 UI 事件觸發的。DataController 在收到這些請求后,再向 Model 層獲取或是更新數據,最后再將得到的數據加工成 ViewController 最終需要的數據返回。

這樣做之后,使得數據相關的邏輯解耦合,數據的獲取、修改、加工都放在 Data Controller 中處理,View Controller 不關心數據如何獲得,如何處理,Data Controller 也不關心界面如何展示,如何交互。同時 Data Controller 因為完全和界面無關,所以可以有更好的測試性和復用性。

DataController 層和 Model 層之間的界限并不是僵硬的,但需要保證每一個 ViewController 都有一個對應的 DataController。Data Controller 更強調的是其作為業務邏輯對外的接口。而在 DataController 中調用更底層的 Model 層邏輯是我們推薦的編程范式,例如數據加工層,網絡層,持久層等。

在后面的例子中,我們會更詳細的講解 DataController 的實現細節。

Show me the code

我們以猿題庫主頁為例,展示我們是如何使用應用這個架構的。

主頁有幾個部分組成,最上面的小猴子 Banner 頁,用于滾動展示一些活動信息;中間有一個用戶名字的頁面,用于展示用戶信息和答題情況以及一些心靈雞湯;最底下的這部分是一個課目選擇頁面,展示了用戶開啟的科目入口,在更多選項里面可以進一步配置這些科目入口。接下來我們會以科目頁面(SubjectView)為例展示一些細節。

ViewController

我們會給每一個 ViewController 都創建一個對應的 DataController。
例如我們給主頁建一個類起名叫APEHomePraticeViewController,同時他會有一個對應的 DataController 起名叫 APEHomePraticeDataController。同時我們把頁面拆分為幾個部分,每個部分有一個相對應的 SubView。代碼如下:

@interface APEHomePracticeViewController () <APEHomePracticeSubjectsViewDelegate>@property (nonatomic, strong, nullable) UIScrollView *contentView; @property (nonatomic, strong, nullable) APEHomePracticeBannerView *bannerView; @property (nonatomic, strong, nullable) APEHomePracticeActivityView *activityView; @property (nonatomic, strong, nullable) APEHomePracticeSubjectsView *subjectsView;@property (nonatomic, strong, nullable) APEHomePracticeDataController *dataController;@end

在 viewDidLoad 的時候,初始化好各個 SubView,并設置好布局:

- (void)setupContentView {self.contentView = [[UIScrollView alloc] init];[self.view addSubview:self.contentView];self.bannerView = [[APEHomePracticeBannerView alloc] init];self.activityView = [[APEHomePracticeActivityView alloc] init];self.subjectsView = [[APEHomePracticeSubjectsView alloc] init];self.subjectsView.delegate = self;[self.contentView addSubview:self.bannerView];[self.contentView addSubview:self.activityView];[self.contentView addSubview:self.subjectsView];// Layout Views ... }

接下來,ViewController 會向 DataController 請求 Subject 相關的數據,并在請求完成后,用獲得的數據生成 ViewModel,將其裝配給 SubjectView,完成界面渲染,代碼如下:

- (void)fetchSubjectData {[self.dataController requestSubjectDataWithCallback:^(NSError *error) {if (error == nil) {[self renderSubjectView];}}]; } - (void)renderSubjectView {APEHomePracticeSubjectsViewModel *viewModel =[APEHomePracticeSubjectsViewModel viewModelWithSubjects:self.dataController.openSubjects];[self.subjectsView bindDataWithViewModel:viewModel]; }

數據結構

為了更好的演示,我們接下來要介紹一下 Subject 相關的數據結構:
APESubject 是科目的資源結構,包含了 Subject 的 id 和 name 等資源屬性,這部分屬性是用戶無關的;APEUserSubject 是用戶的科目信息,包含了用戶是否打開某個學科的屬性。

@interface APESubject : NSObject @property (nonatomic, strong, nullable) NSNumber *id; @property (nonatomic, strong, nullable) NSString *name; @end @interface APEUserSubject : NSObject @property (nonatomic, strong, nullable) NSNumber *id; @property (nonatomic, strong, nullable) NSNumber *updatedTime; /// On or Off @property (nonatomic) APEUserSubjectStatus status; @end

DataController

如我們之前所說,每一個 ViewController 都會有一個對應的 DataController,這一類 DataController 的主要職責是處理這個頁面上的所有數據相關的邏輯,我們稱其為 View Related Data Controller。

// APEHomePracticeDataController.h @interface APEHomePracticeDataController : APEBaseDataController // 1 @property (nonatomic, strong, nonnull, readonly) NSArray<APESubject *> *openSubjects; // 2 - (void)requestSubjectDataWithCallback:(nonnull APECompletionCallback)callback; @end

上面的這個代碼

  • 我們定義了一個界面最終需要的數據的 property,這里是?openSubjects,這個 property 會存儲用戶打開的科目列表,他的類型是APESubject。
  • 我們還會定義一個接口來請求 openSubject 數據。
    DataController 這一層是一個靈活性很高的部件,一個 DataController 可以復用更小的 DataController,這一類更小的 DataController 通常只會包含純粹的或是更抽象的 Model 相關的邏輯,例如網絡請求,數據庫請求,或是數據加工等。我們稱這一類 DataController 為 Model Related Data Controller。
    Model Related Data Controller 通常會為上層提供正交的數據:
  • // APEHomePracticeDataController.m @interface APEHomePracticeDataController () @property (nonatomic, strong, nonnull) APESubjectDataController *subjectDataController; @end @implementation APEHomePracticeDataController - (void)requestSubjectDataWithCallback:(nonnull APECompletionCallback)callback {APEDataCallback dataCallback = ^(NSError *error, id data) {callback(error);};[self.subjectDataController requestAllSubjectsWithCallback:dataCallback];[self.subjectDataController requestUserSubjectsWithCallback:dataCallback]; } - (nonnull NSArray<APESubject *> *)openSubjects {return self.subjectDataController.openSubjectsWithCurrentPhase ?: @[]; } @end

    在我們的 APEHomePraticeDataController 的實現中,就包含了一個 APESubjectDataController,這個 subjectDataController 會負責請求 All Subjects 和 User Subjects,并將其加工成上層所最終需要的 Open Subjects。(備注:這個例子里面的 callback 會回調多次是猿題庫產品的需求,如有需要,可在這一層控制請求都完成后再調用上層回調)
    事實上,Model Related Data Controller 可以一般性的認為就是大家經常在寫的 Model 層代碼,例如 UserAgent,UserService,PostService 之類的服務。之后讀者若想重構就項目成這個架構,大可以不必糾結于形式,直接在 DataController 里調用舊有代碼的邏輯即可,如圖下面這樣的行為都是允許的:

    ViewModel

    每一個 View 都會有一個對應的 ViewModel,這個 ViewModel 會包含展示這個 View 所需要的所有數據。
    我們會使用工廠方法來創建 View Model,例如這個例子里,Subject View Model 不需要關心傳遞給他是什么樣的 Subject,所有的課目或者只是用戶開啟的科目。

    @interface APEHomePracticeSubjectsViewModel : NSObject @property (nonatomic, strong, nonnull) NSArray<APEHomePracticeSubjectsCollectionCellViewModel *> *cellViewModels; @property (nonatomic, strong, nonnull) UIColor *backgroundColor; + (nonnull APEHomePracticeSubjectsViewModel *)viewModelWithSubjects:(nonnull NSArray<APESubject *>*)subjects;@end

    ViewModel 可以包含更小的 ViewModel,就像 View 可以有 SubView 一樣。SubjectView 的內部是由一個UICollectionView實現的,所以我們也給了對應的 Cell 設計了一個 ViewModel。
    需要額外注意的是,ViewModel 一般來說會包含的顯示界面所需要的所有元素,但粒度是可以控制。一般來說,我們只把會因為業務變化而變化的部分設為 ViewModel 的一部分,例如這里的 titleColor 和 backgroundColor 會因為主題不同而變化,但字體的大小(titleFont)卻是不會變的,所以不需要事無巨細的都加到 ViewModel 里。

    @interface APEHomePracticeSubjectsCollectionCellViewModel : NSObject @property (nonatomic, strong, nonnull) UIImage *image; @property (nonatomic, strong, nonnull) UIImage *highlightedImage; @property (nonatomic, strong, nonnull) NSString *title; @property (nonatomic, strong, nonnull) UIColor *titleColor; @property (nonatomic, strong, nonnull) UIColor *backgroundColor; + (nonnull APEHomePracticeSubjectsCollectionCellViewModel *)viewModelWithSubject:(nonnull APESubject *)subject; + (nonnull APEHomePracticeSubjectsCollectionCellViewModel *)viewModelForMore;@end

    View

    View 只需要定義好裝配 ViewModel 的接口和定義好 UI 回調事件即可:

    @protocol APEHomePracticeSubjectsViewDelegate <NSObject> - (void)homePracticeSubjectsView:(nonnull APEHomePracticeSubjectsView *)subjectViewdidPressItemAtIndex:(NSInteger)index; @end @interface APEHomePracticeSubjectsView : UIView @property (nonatomic, strong, nullable, readonly) APEHomePracticeSubjectsViewModel *viewModel; @property (nonatomic, weak, nullable) id<APEHomePracticeSubjectsViewDelegate> delegate; - (void)bindDataWithViewModel:(nonnull APEHomePracticeSubjectsViewModel *)viewModel; @end

    渲染界面的時候,完全依靠 ViewModel 進行,包括 View 的 SubView 也會使用 ViewModel 里面的子 ViewModel 渲染。

    - (void)bindDataWithViewModel:(nonnull APEHomePracticeSubjectsViewModel *)viewModel {self.viewModel = viewModel;self.backgroundColor = viewModel.backgroundColor;[self.collectionView reloadData];[self setNeedsUpdateConstraints]; } - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath: (NSIndexPath *)indexPath {APEHomePracticeSubjectsCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];if (0 <= indexPath.row && indexPath.row < self.viewModel.cellViewModels.count) {APEHomePracticeSubjectsCollectionCellViewModel *vm = self.viewModel.cellViewModels[indexPath.row];[cell bindDataWithViewModel:vm]; }return cell; }

    至此,我們就完成了所有的步驟。我們回過頭再看一下 ViewController 的職責就回變的非常簡單,裝配好 View,向 DataController 請求數據,裝配 ViewModel,配置給 View,接收 View 的UI事,一切復雜的操作都能夠的代理出去。

    總結

    優點

    通過上面的例子我們可以看到,這個架構有幾個優點:

    層次清晰,職責明確:和界面有關的邏輯完全劃到 ViewModel 和 View 一遍,其中 ViewModel 負責界面相關邏輯,View 負責繪制;Data Controller 負責頁面相關的數據邏輯,而 Model 還是負責純粹的數據層邏輯。 ViewController 僅僅只是充當簡單的膠水作用。

    耦合度低,測試性高:除開 ViewController 外,各個部件可以說是完全解耦合的,各個部分也是可以完全獨立測試的。同一個功能,可以分別由不同的開發人員分別進行開發界面和邏輯,只需要確立好接口即可。

    復用性高:解耦合帶來的額外好處就是復用性高,例如同一個View,只需要多一個工廠方法生成 ViewModel,就可以直接服用。數據邏輯代碼不放在 ViewController 層也可以更方便的服用。

    學習成本低: 本質上來說,這個架構屬于對 MVC 的優化,主要在于解決 Massive View Controller 問題,把原本屬于 View Controller 的職責根據界面和邏輯部分相應的拆到 ViewModel 和 DataController 當中,所以是一個非常易于理解的架構設計,即使是新手也可以很快上手。

    開發成本低: 完全不需要引入任何第三方庫就可以進行開發,也避免了因為 MVVM 維護成本高的問題。

    實施性高,重構成本低:可以在 MVC 架構上逐步重構的架構,不需要整體重寫,是一種和 MVC 兼容的設計。

    缺點

    不可否認的是,這個設計也有其相應的缺點,由于其把傳統 MVVM 里面的 VM 拆成兩部分,會照成下面的一些情況:

  • 當頁面的交互邏輯非常多時,需要頻繁的在 DC-VC-VM 里來回傳遞信息,造成了大量膠水代碼。
  • 另外,由于在傳統的 MVVM 中 VM 原本是一體的,一些復雜的交互本來可以在 VM 中直接完成測試,如今卻需要同時使用 DC 和 VM 并附上一些膠水代碼才能進行測試。
  • 沒有了 Binding,代碼寫起來會更費勁一點(仁者見仁,智者見智)。
  • 后記

    MVVM 是一個很棒的架構,私底下我也會用其來做一些個人項目,但在公司項目里,我會更慎重的考慮個中利弊。我做這個設計的時候,心儀 MVVM 的種種好處,又忌憚于它的種種壞處,再考慮到團隊的開發和維護成本,所以最終設計成了如今這樣。

    個人認為,好的架構設計的都是和團隊以及業務場景息息相關的。我們這套架構幫助我們解決了 ViewController 代碼堆積的問題,也帶來了更清晰明了的代碼層級和模塊職責,同時沒有引入過多的復雜性。希望大家也能充分理解這套架構的適用場景,在自己的 APP 架構設計中有所借鑒。

    轉載于:https://www.cnblogs.com/weiboyuan/p/5090592.html

    總結

    以上是生活随笔為你收集整理的猿题库 iOS 客户端架构设计-唐巧的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    丁香六月av | 久久免费视频一区 | 亚洲免费在线播放视频 | 天天草视频 | 免费三级av | 激情综合五月婷婷 | 日本精品免费看 | 狠狠操天天射 | 国产精品美女在线 | 国产乱老熟视频网88av | 亚洲精品在线一区二区 | 色婷婷在线观看视频 | 丁香六月婷婷开心 | 日韩有码在线观看视频 | 麻豆一区二区三区视频 | 99热精品国产一区二区在线观看 | 玖玖综合网 | 日韩av在线看 | 久久久久久久久亚洲精品 | 国产在线永久 | 91成人精品一区在线播放 | 在线视频 精品 | 男女拍拍免费视频 | 美女网站在线播放 | 91人人干 | 国产免费三级在线观看 | 91精品久久久久久综合乱菊 | 国产成人精品一区二区三区福利 | 韩国一区二区在线观看 | 99精品在线看 | 天天色成人 | 国产成人精品综合久久久 | 嫩草av在线 | 91成人网在线播放 | 日韩电影中文字幕 | 91成人免费在线 | 日本精品小视频 | 日韩黄色免费电影 | 亚洲精品18日本一区app | 久久tv视频| 国产精品av久久久久久无 | 久久人人爽av | 国产一级视频在线免费观看 | 国产伦理精品一区二区 | 中文字幕黄网 | 五月天网页 | 夜夜婷婷 | 色综合久久久久综合体桃花网 | 综合久久五月天 | 特级片免费看 | 伊人影院得得 | 99久久精品午夜一区二区小说 | 日韩v在线91成人自拍 | 狠狠色狠狠色综合系列 | 五月天色婷婷丁香 | 亚洲丝袜一区二区 | 99这里精品 | 日韩视频一区二区三区 | 中文字幕中文字幕在线中文字幕三区 | 国产高清不卡一区二区三区 | 草久电影 | 美女免费黄视频网站 | 成人久久久久久久久 | 狠狠狠操| 91久久精品一区二区二区 | 在线观看一区 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | av三级在线免费观看 | 成人久久影院 | 亚洲在线黄色 | 色狠狠综合天天综合综合 | 精品久久久久久久久久久久久 | 91精品一区二区在线观看 | 免费观看性生交大片3 | 在线免费试看 | 欧美日韩视频在线观看一区二区 | 丁香六月激情婷婷 | 欧美一区二区三区在线 | 91精品老司机久久一区啪 | 亚洲精品资源在线观看 | 国产一区欧美日韩 | 国产在线观看国语版免费 | 色综合天天综合在线视频 | 黄色小网站在线观看 | 久久视频免费在线观看 | 开心激情五月婷婷 | 国产系列精品av | 国产免费高清 | 久久不射影院 | 久久男人中文字幕资源站 | 国产99久久久国产精品成人免费 | 激情综合婷婷 | 久久久黄色| 国产视频资源在线观看 | 色噜噜在线观看视频 | 国产成人三级 | 蜜臀aⅴ国产精品久久久国产 | 91桃色免费观看 | 免费进去里的视频 | 日韩av电影中文字幕在线观看 | 黄色小说18| 国产伦理久久精品久久久久_ | 精品不卡视频 | 日韩另类在线 | 久久99这里只有精品 | 国产一级免费观看视频 | 国产精品久久久久久一区二区 | 久久综合久久久久88 | 亚洲无毛专区 | 国产精品福利无圣光在线一区 | www久久久久 | 日日夜夜精品视频 | 中文字幕在线观看亚洲 | 亚洲乱码精品久久久久 | 首页中文字幕 | 视频国产区 | 精品在线小视频 | 日韩肉感妇bbwbbwbbw | 国产亚洲欧美精品久久久久久 | 国产一级久久 | 天天插天天干天天操 | 精品不卡视频 | 国产精品久久久久久久久久妇女 | 国产精品久久久久久久7电影 | 久久国产网站 | 国产精品涩涩屋www在线观看 | 97av.com| 二区视频在线 | 欧美日韩91| 一区三区视频在线观看 | 五月花婷婷| 在线免费观看麻豆视频 | 在线最新av | 九九热免费在线观看 | 亚洲精品国产精品国产 | 色综合色综合久久综合频道88 | 精品久久久久久久久亚洲 | av在线最新 | 久久av一区二区三区亚洲 | 日本精品免费看 | 成人久久18免费网站图片 | 中国一级片在线播放 | 国产精品剧情在线亚洲 | 国产精品手机在线播放 | 久久久久久久久久国产精品 | 韩国一区在线 | 99视频这里只有 | 蜜臀av网站| 欧美日韩亚洲在线观看 | 精品一区二区三区香蕉蜜桃 | 91中文字幕永久在线 | 国产91在线播放 | 欧洲色综合 | 日韩高清dvd| 女人18精品一区二区三区 | 69视频永久免费观看 | 在线观看91网站 | 精品欧美一区二区精品久久 | 色综合婷婷久久 | 亚洲 欧美 91 | 色吊丝在线永久观看最新版本 | 久久久国际精品 | 久久久久久久久久久久电影 | 深夜精品福利 | 国产精品久久久久久久久搜平片 | 99久久精品免费 | 欧美亚洲xxx | 国产精品久久久久久久久久久久午夜片 | 在线观看一区视频 | 97国产大学生情侣白嫩酒店 | 国产精品 日本 | 国产91精品一区二区 | 五月婷婷视频在线 | 久久视频国产 | 深夜福利视频在线观看 | 日韩最新av | 激情欧美xxxx| 黄色片免费看 | 日韩欧美在线一区二区 | 久久亚洲国产精品 | 天天操天天拍 | 日韩av网页| 久久精品影片 | 成人免费在线播放 | 亚洲国产精品成人av | 伊人久久婷婷 | 最新色视频 | 久久久久综合精品福利啪啪 | 好看的国产精品视频 | 丁香午夜 | 国产精品mv| 99在线精品视频在线观看 | 九九九免费视频 | 精品1区2区3区 | 91成人在线观看高潮 | 成人小视频在线观看免费 | 狠狠干狠狠操 | 青草视频在线播放 | 人人要人人澡人人爽人人dvd | 欧美色图亚洲图片 | 男女激情麻豆 | 99在线视频精品 | 91香蕉视频黄 | 五月激情丁香婷婷 | 免费看三级网站 | 伊人成人激情 | 成人羞羞视频在线观看免费 | 欧美日韩在线看 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 久久久国产精品电影 | av在线永久免费观看 | 日韩啪视频 | 综合久久久久久久 | 91看片淫黄大片在线播放 | 久久免费影院 | 黄色软件大全网站 | 久99视频 | 91精品日韩 | 国产一区二区三区免费在线观看 | 亚洲国产剧情av | 九九免费在线观看 | 国产精品a久久 | 国产亚洲无 | 久久影院午夜论 | 免费视频在线观看网站 | 久久国语露脸国产精品电影 | 中文字幕在线一区二区三区 | 色婷婷啪啪免费在线电影观看 | 91九色porny蝌蚪主页 | 五月综合在线观看 | 青春草免费在线视频 | av在线播放快速免费阴 | 久久精品香蕉 | 亚洲欧洲国产视频 | 91九色porny蝌蚪视频 | 久久精品这里精品 | 最新日韩视频在线观看 | 麻豆一区二区三区视频 | 在线观看亚洲专区 | 亚洲国产精品va在线看黑人 | 久久综合五月 | 91亚洲国产成人久久精品网站 | av黄色免费在线观看 | 日韩欧美一级二级 | 久久免费在线观看 | 一区二精品 | 亚洲在线资源 | 天天色天天操天天爽 | 日本aaa在线观看 | 国产成人精品一区二区三区福利 | 中文字幕一区二区三区久久蜜桃 | 西西444www大胆高清图片 | 欧美成人黄 | www日韩欧美 | 日日碰狠狠躁久久躁综合网 | 欧美一级视频一区 | 国产专区免费 | 久草免费在线观看 | 免费成人在线电影 | 久久人91精品久久久久久不卡 | 在线视频观看国产 | 一区在线免费观看 | 成人亚洲综合 | 免费在线观看亚洲视频 | 日韩视频免费播放 | 日韩欧美在线高清 | 国产破处在线播放 | 97精品国产 | 四虎4hu永久免费 | 中文字幕日韩电影 | 天堂网一区二区 | 玖玖视频精品 | 免费在线观看av网站 | 亚洲一级电影 | 成人在线播放视频 | 五月天综合| 一本一道波多野毛片中文在线 | 亚洲黄色在线观看 | 国产色在线视频 | 在线色网站| 一区二区久久 | 1024在线看片 | 91在线免费播放视频 | 欧美日韩一区二区在线观看 | 日韩欧美一区二区在线观看 | 国产亚洲精品久久久久动 | 中文字幕高清 | 欧洲成人av | 久久情侣偷拍 | 狠狠操天天干 | 亚洲精品国偷拍自产在线观看蜜桃 | 欧美激情第十页 | av片子在线观看 | 丝袜美腿在线视频 | av片一区二区 | 狠狠色噜噜狠狠狠狠2021天天 | 亚洲三级网 | 国产无套精品久久久久久 | 天天做天天爱夜夜爽 | 亚洲欧洲国产日韩精品 | 亚洲免费色 | 81精品国产乱码久久久久久 | 欧洲黄色片 | 婷婷www| 国色综合| 日韩视频一二三区 | 中文字幕123区 | 免费在线观看中文字幕 | 日韩高清一区在线 | 99在线高清视频在线播放 | 日韩性色 | 成人在线视频你懂的 | 久久久久久久久久福利 | 999ZYZ玖玖资源站永久 | av电影免费 | 永久黄网站色视频免费观看w | 国产精品高 | 在线观看网站av | av黄网站| 亚洲成色777777在线观看影院 | 国产精品永久久久久久久www | 久草在线网址 | 啪啪av在线 | 日韩欧美高清一区二区三区 | 99国产精品久久久久老师 | 欧美日一级片 | 国产精品女同一区二区三区久久夜 | 手机看片国产 | 国产精品一区二区免费在线观看 | 又色又爽又激情的59视频 | 精品久久美女 | 手机色在线 | 久久尤物电影视频在线观看 | 国产一区麻豆 | 国产精品美女久久久 | 久久人人97超碰com | 超碰在线人人 | 毛片一级免费一级 | 国产精品18久久久久vr手机版特色 | 精品影院一区二区久久久 | 色婷婷激情网 | 亚洲精品色视频 | 黄色大片国产 | 久久国产精品一区二区 | 五月婷色 | 免费福利在线播放 | 亚洲另类视频在线 | 成人97视频一区二区 | 久久精品播放 | 88av网站| 国产视频精品免费播放 | 最新国产福利 | 99在线视频免费观看 | 青青河边草免费直播 | 国产手机在线精品 | 日韩av电影国产 | 中文字幕2021| 91在线观 | 欧美日韩在线电影 | 91九色网站 | 免费a网址 | 国产精品女主播一区二区三区 | av黄免费看 | aaa亚洲精品一二三区 | 日韩xxxxxxxxx| 国产精品免费久久久久影院仙踪林 | 日韩超碰 | 国产精品久久久久久久久久不蜜月 | 麻豆视频在线 | 久久综合网色—综合色88 | 精品国产一区二区三区久久久 | 丁香激情网 | 久久69av| 国内精品美女在线观看 | av色网站| 日韩中字在线 | 日韩精品一区电影 | 久久男人影院 | 日韩高清av在线 | 国语精品视频 | 日韩在线高清视频 | 国产美女视频免费观看的网站 | 久久国产精品色av免费看 | 久久婷亚洲五月一区天天躁 | 国产欧美精品一区二区三区四区 | 久草视频免费在线观看 | 日韩在线中文字幕 | 成年人免费电影 | 国产精品毛片完整版 | 美女激情影院 | 天天操天| 综合久久久久久久 | 国产精品久久久久久一区二区三区 | 日韩网站在线播放 | 日本黄色免费在线 | 色综合久久精品 | 一区二区三区在线播放 | 亚洲精品在线观看不卡 | 国产精品久久久久久999 | 日韩理论片中文字幕 | 精品一区在线看 | 综合中文字幕 | 99欧美| 日韩在线一区二区免费 | 一区二区视频在线播放 | 亚州人成在线播放 | 91精品国产自产在线观看永久 | 国产日韩在线视频 | 丁香五月亚洲综合在线 | sesese图片| 国产va饥渴难耐女保洁员在线观看 | 人人爽人人av | 日韩激情三级 | 96看片 | 天天干夜夜擦 | 天堂av在线网 | 综合色综合 | 天天激情综合网 | 欧美日韩伦理在线 | 欧美日韩在线第一页 | 狠狠色丁香婷婷综合最新地址 | 欧美久久九九 | 久久欧美在线电影 | 激情中文在线 | 精品在线一区二区三区 | 国产精品密入口果冻 | 最近乱久中文字幕 | 91黄色免费网站 | 久久少妇| 久久 在线 | 色综合天天 | 丁香花在线视频观看免费 | 亚洲精品视频免费在线 | 国产精品久免费的黄网站 | 亚洲欧美在线综合 | 97视频资源| 91传媒免费在线观看 | 亚洲午夜在线视频 | 久久精品网 | 久久久精品| 免费av观看| 国产偷v国产偷∨精品视频 在线草 | www.天天成人国产电影 | 国产一级性生活 | 在线免费视频一区 | 欧美成年人在线观看 | 青草草在线 | 亚洲色图激情文学 | 国产无吗一区二区三区在线欢 | 日本中文字幕观看 | 黄色视屏av | 黄色网在线免费观看 | 日韩黄色免费在线观看 | 亚洲国产成人高清精品 | 美女视频久久 | 国产精品午夜免费福利视频 | 国产精品爽爽久久久久久蜜臀 | 欧美日韩在线观看不卡 | 国产成人精品网站 | 最新国产在线视频 | 日韩成人黄色 | 日本少妇视频 | 天天操夜夜干 | 日韩av中文字幕在线 | 日韩系列在线观看 | 国产xxxxx在线观看 | 国产精品99久久久 | 亚洲色影爱久久精品 | 中文av网站| 国产91电影在线观看 | 97国产精品一区二区 | 99精品在线视频播放 | 99视频在线免费播放 | 国产精品久久久久久久久久尿 | 日本精品中文字幕 | 国产日产亚洲精华av | 天天干天天草天天爽 | 色国产精品 | 日韩一区在线免费观看 | 99热精品视| 91九色porny蝌蚪视频 | 日本高清中文字幕有码在线 | 国产精品mv | 国产黑丝一区二区三区 | 天天射综合| 深爱激情五月婷婷 | 欧美日韩国语 | 人人爽久久涩噜噜噜网站 | 亚洲精品9 | 天天操狠狠操 | 色播亚洲婷婷 | 久久久久黄 | 成人a在线观看高清电影 | 天天操人| 婷五月激情 | 波多野结衣动态图 | 美女网站黄在线观看 | 国产视频一区二区在线播放 | 播五月婷婷 | 国产a视频免费观看 | 日韩高清不卡一区二区三区 | 国产在线超碰 | 麻豆91在线播放 | 九色视频网 | 亚洲午夜久久久久久久久久久 | 中文超碰字幕 | 亚洲欧美国产精品18p | 亚洲久草网| 伊人天天干 | 超碰在线资源 | 精品国产自在精品国产精野外直播 | 美女亚洲精品 | 欧美视频一区二 | 久久精视频 | 99视频在线精品国自产拍免费观看 | 天天天插 | 日韩黄色在线电影 | 欧美做受高潮1 | 四虎国产精品免费观看视频优播 | 人人玩人人爽 | 国产精品一区二区在线观看 | 日日天天 | 免费韩国av | 亚洲开心激情 | 三级黄色片在线观看 | 狠狠色噜噜狠狠狠狠2021天天 | 午夜在线日韩 | 欧美日韩后 | 99tvdz@gmail.com| 亚洲黄色免费网站 | 亚洲黄a| 免费91在线 | 日韩最新在线 | 黄网站色| 婷婷激情综合网 | 麻豆免费视频网站 | 免费精品人在线二线三线 | www国产亚洲精品久久网站 | 91在线亚洲 | 黄色av观看 | 久久视了| 久久精品波多野结衣 | 久久婷婷激情 | 国产99久久精品一区二区永久免费 | 夜夜操网| 国产免费a | 国产亚洲一区二区在线观看 | 亚州精品国产 | 国产午夜精品一区二区三区四区 | 色综合久久悠悠 | 亚洲日本在线一区 | 天天综合日 | 91午夜精品| 狠狠色噜噜狠狠狠狠2022 | 黄色成人在线 | 97成人在线观看 | 日韩免费中文 | 天天操操操操操 | 麻豆91视频| 91精品国产99久久久久 | 国产一区福利在线 | 日韩高清免费观看 | 国产精品一区二区果冻传媒 | 中文字幕影视 | 欧美一级片在线免费观看 | 成人va在线观看 | 91在线看黄| 欧美日韩1区 | 日本中出在线观看 | 国产一区二区免费 | 一级理论片在线观看 | 免费午夜av| 久久开心激情 | 色妞色视频一区二区三区四区 | 91av短视频 | 欧美精品国产精品 | 日韩二区在线播放 | 色老板在线视频 | 久草国产视频 | 日韩在线资源 | 午夜av免费| 欧美日韩在线观看一区二区三区 | 日本精品一区二区 | 五月的婷婷 | 日韩一区二区三区在线看 | 天天射天天干天天爽 | 亚洲a色 | 天天插视频 | 国产第一页在线观看 | 在线国产日韩 | 国产精品午夜在线观看 | 亚洲最新av在线网站 | 最新中文在线视频 | 免费中文字幕在线观看 | 亚洲视频在线观看网站 | 免费 在线 中文 日本 | 国产视频不卡一区 | 深夜福利视频一区二区 | 久久伦理 | 波多野结衣在线视频免费观看 | 色综合欧洲 | 中文字幕在线免费看 | 最近中文字幕大全 | 国产精品久久久久av免费 | 国产中文字幕网 | 婷婷丁香导航 | 午夜视频99 | 麻豆免费精品视频 | 久草免费在线视频观看 | 久草在线免费看视频 | 亚洲特级片 | 日韩欧美极品 | 亚洲精品视频二区 | 国产精品11| 婷婷六月在线 | 九九九九精品 | 亚洲永久精品一区 | 免费网站色 | 国产精品网红直播 | 日韩免费一区二区三区 | 中文字幕在线影院 | 少妇高潮冒白浆 | 亚洲精品一区二区三区四区高清 | 69视频永久免费观看 | 97在线观看免费高清完整版在线观看 | 日日碰狠狠躁久久躁综合网 | 五月天中文在线 | 欧美一区二区三区激情视频 | 国产亚洲精品久久19p | 日本精品久久久久中文字幕 | 尤物一区二区三区 | 91亚洲精品国偷拍自产在线观看 | 97av.com| 97自拍超碰 | 九九热在线观看 | 一级性生活片 | 亚洲一级电影视频 | 有码中文字幕在线观看 | 九九免费在线观看视频 | 国产精品日韩久久久久 | 日韩在线观看你懂得 | 国产在线污 | 久草在线视频首页 | 精品视频在线视频 | 欧美 亚洲 另类 激情 另类 | 国产视频在线观看一区 | 99久e精品热线免费 99国产精品久久久久久久久久 | 欧美日韩精品影院 | 免费看黄色小说的网站 | 日韩有码第一页 | 久久91网 | 国产精品成久久久久三级 | 特级西西人体444是什么意思 | www久久国产| 国际av在线 | 国产私拍在线 | 亚洲在线视频观看 | 国产高清久久 | 视频国产在线 | 天天操天天干天天摸 | 香蕉影视app | 亚洲视频一级 | 久久黄色网址 | 亚洲精品乱码白浆高清久久久久久 | 国产成人高清av | 精品国产乱码久久 | 国产男女无遮挡猛进猛出在线观看 | 日日干美女 | 国产色区 | 精品久久视频 | 久久精品国产一区二区 | 色av资源网 | 久久国产免费 | 国产成人在线观看免费 | 天干啦夜天干天干在线线 | 男女免费视频观看 | 久久99热这里只有精品国产 | 天堂av免费在线 | 97香蕉超级碰碰久久免费软件 | 国产一区网 | 国产91精品欧美 | 福利在线看片 | 深夜免费网站 | 91在线91拍拍在线91 | 久久综合久久综合这里只有精品 | 久久精品免费 | 福利二区视频 | www亚洲一区 | 天天艹天天 | 亚洲国产美女久久久久 | 亚洲在线国产 | 天天综合网天天 | 91精品视频免费看 | 日韩黄色免费电影 | 99精品毛片 | 欧美午夜精品久久久久久浪潮 | 蜜桃麻豆www久久囤产精品 | av先锋中文字幕 | av永久网址| 成年人网站免费观看 | 免费三级大片 | 国产福利a| 久草在线视频看看 | 亚洲 欧美 综合 在线 精品 | 国产综合片 | 国产精品中文久久久久久久 | 久久久精品国产免费观看同学 | 国产精品不卡一区 | www.午夜色.com| 日韩理论在线播放 | 精品国产乱码久久久久久久 | 99精品久久99久久久久 | 国产精品男女 | 成人a毛片| 日韩成人在线免费观看 | 欧美性猛片, | 欧美在一区 | 6080yy精品一区二区三区 | 97香蕉久久国产在线观看 | 蜜臀av性久久久久av蜜臀三区 | 欧美视频99| 色大片免费看 | 国产成人61精品免费看片 | 日韩精品视频网站 | 一区二区三区韩国免费中文网站 | 午夜在线免费观看 | 亚洲精品美女在线观看 | 韩国一区在线 | 1000部国产精品成人观看 | 欧美日韩亚洲精品在线 | 韩日在线一区 | 亚洲精品久久久蜜臀下载官网 | 91人人干| 中文字幕一区二区三区乱码在线 | 国产又粗又硬又长又爽的视频 | 国产美女黄网站免费 | 亚洲天天综合 | 91在线看片 | 五月天伊人网 | 人人干人人添 | 四虎在线视频免费观看 | 99热在线免费观看 | 久久精美视频 | 色综合中文字幕 | 久久久午夜精品福利内容 | 国产精品麻豆果冻传媒在线播放 | 久久成人资源 | 99精品在线免费观看 | 欧美久久久影院 | 黄色av大片 | 久久久久久久久久久成人 | 91片黄在线观 | 欧美成人aa | 丁香色综合 | 欧美人zozo | 天天射综合网站 | 天天色天天操天天爽 | 91香蕉视频 mp4 | 免费 在线 中文 日本 | 日本aa在线| 国产手机在线视频 | 国产视频观看 | 波多野结衣精品视频 | 天天射天天艹 | 成人黄色小说在线观看 | 日韩理论在线播放 | 国产一区在线观看免费 | 一区二区视频网站 | 久久久精品国产一区二区电影四季 | 欧美日视频 | 亚洲成人av一区二区 | 天天做日日做天天爽视频免费 | 国产黄色高清 | 欧美日韩高清一区二区三区 | 美女国产免费 | 国产精品日韩欧美 | 一本一本久久a久久精品综合小说 | 麻豆视频网址 | 色综合久久久久综合体 | 五月色婷 | 精品一区二区免费视频 | 日韩精品专区在线影院重磅 | 天天操综 | 最近中文字幕免费视频 | 丁香花中文在线免费观看 | 久久成人国产 | 国产精品专区在线观看 | 日韩免费视频观看 | 一级黄色在线视频 | 国产老太婆免费交性大片 | 在线免费观看国产黄色 | 911在线| av超碰在线观看 | 人人玩人人添人人澡97 | 免费色视频在线 | 激情婷婷在线观看 | 丁香激情综合久久伊人久久 | 中文字幕av电影下载 | 五月天久久婷 | 97精品国产 | 福利视频 | 日韩高清在线一区二区三区 | 久久久久国产一区二区 | 最近中文字幕大全 | 啪啪小视频网站 | 天天操综合 | 欧美日韩亚洲在线观看 | 久久久久亚洲精品 | 国产一二三四在线视频 | 人人射 | 亚洲精品乱码久久 | 久久久精品99 | 五月亚洲婷婷 | 看全黄大色黄大片 | 亚洲国产综合在线 | 欧美 亚洲 另类 激情 另类 | 日韩欧美在线视频一区二区三区 | 亚洲第一香蕉视频 | 福利网址在线观看 | 1024手机基地在线观看 | 久久不射电影院 | 韩日精品在线观看 | 一本—道久久a久久精品蜜桃 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 五月婷婷激情综合 | 天天操天天操天天操 | 精品久久久久久久久久 | 九九九热精品免费视频观看 | 五月天色站 | av免费网页 | 国产a精品| 五月天六月色 | 久久久久欧美精品 | 91成人国产 | 日韩在线观看av | 精品久久久久久亚洲综合网站 | 国产人成在线视频 | 五月天激情视频 | 日韩精品国产一区 | 国产va在线观看免费 | 豆豆色资源网xfplay | 免费成人看片 | 国产高清一级 | 日韩欧美在线高清 | 久久精品久久精品久久39 | 亚洲精品在线视频网站 | 亚洲精品一区中文字幕乱码 | 久久日韩精品 | 午夜a区| 高清av在线免费观看 | 久草免费在线视频观看 | 中文字幕在线观看第二页 | 黄色免费网战 | 久久视频二区 | 91丨九色丨国产在线观看 | 国内久久精品视频 | 国产精品乱码高清在线看 | 日韩伦理一区二区三区av在线 | 国产女v资源在线观看 | 久久99精品久久久久久久久久久久 | 黄色一区三区 | 国产精品毛片一区二区 | 在线观看精品视频 | 日韩精品久久久久久中文字幕8 | 911免费视频 | 国产精品美女久久久久久久久 | 国产精品视频免费看 | 中文字幕在线一区观看 | 二区精品视频 | a天堂一码二码专区 | 精品国产亚洲在线 | 日韩精品一二三 | 99久久精品视频免费 | 狠狠色丁香九九婷婷综合五月 | 亚洲综合干 | 亚洲视频电影在线 | 国产无限资源在线观看 | 国产在线观看一 | 最近免费中文字幕 | 精品影院一区二区久久久 | 丁香六月天 | 国产午夜在线 | 久久久久高清 | 精品国产一区二区三区久久久蜜月 | 91亚洲综合 | 日本免费久久高清视频 | 亚洲三级性片 | 激情综合久久 | 亚洲毛片一区二区三区 | 在线国产视频 | 久久天天躁狠狠躁亚洲综合公司 | 国产精品一区二区久久精品爱微奶 | 免费看片色 | 欧美日韩二三区 | 91亚洲精品乱码久久久久久蜜桃 | 视频成人永久免费视频 | 国产一卡在线 | 免费a v在线| 99爱这里只有精品 | 九九视频精品免费 | 国产综合视频在线观看 | 99久久99久久精品国产片果冰 | 久久久麻豆 | 天天插天天爱 | 91高清完整版在线观看 | av在线免费播放网站 | 亚洲理论影院 | 亚洲成a人片在线www | 久久久国产日韩 | 国产成在线观看免费视频 | 成人免费视频播放 | 毛片99 | 亚洲精品视频在线 | 久久视频6 | 天天射天天 | www.99热精品 | 亚洲精区二区三区四区麻豆 | 成人在线黄色电影 | 蜜臀精品久久久久久蜜臀 | 久久久国产一区二区三区四区小说 | 国产成人精品一区二区三区在线 | 免费开视频 | 91视视频在线直接观看在线看网页在线看 | 天天透天天插 | 久草在线观看 | 缴情综合网五月天 | 日本女人在线观看 | 亚州av网站| 五月精品 | 久久久久这里只有精品 | 国产免费视频一区二区裸体 | 97免费视频在线 | 国产不卡毛片 | 国产精品中文字幕在线 | 色婷婷国产 | 中文资源在线官网 | 日韩精品一区二区不卡 | 亚洲精品日韩av | 免费观看完整版无人区 | 一区二区视频在线观看免费 | 国产精品九九久久久久久久 | 日韩在线视频免费看 | 黄色av播放 | 一区二精品 | 日韩在线不卡av | 97色婷婷人人爽人人 | 麻豆传媒视频在线播放 | 国产无遮挡又黄又爽在线观看 | 日本少妇久久久 | 久久久国产精品亚洲一区 | 国产精品乱码久久久久久1区2区 | 日本黄色免费在线观看 | 国产黄色一级片在线 | 亚洲一级黄色片 | 国产视频在线看 | 国产裸体永久免费视频网站 | 亚洲免费观看视频 | 国产精品一区二区三区99 | 精品国产一区二区三区四 | 国语黄色片 | 国产毛片久久久 | 综合色久 | 中文字幕日韩电影 | 久草在线免费看视频 | 永久av免费在线观看 | 精品在线视频一区二区三区 | 亚洲精品国偷自产在线91正片 | 97超碰人人干 | 欧美日韩国产精品爽爽 | 91免费在线 | 成人黄色电影在线 | 特级西西444www大精品视频免费看 | 精品免费久久 | 久久尤物电影视频在线观看 | 欧美精品国产综合久久 | 成年人免费av网站 | 黄色电影网站在线观看 | 亚洲一级片免费观看 | 国产一区二区久久 | 狠狠亚洲| 日b视频在线观看网址 | 午夜视频99 | 亚洲婷婷在线 | 国产精品永久在线观看 | 国产成人精品一区二区三区网站观看 | 97视频在线观看播放 | 免费色黄 | 国产精品毛片久久久久久久久久99999999 | 天天天色| 丁香综合 | 欧美视频国产视频 | av在线进入 | 日韩在线视频线视频免费网站 | 国产亚洲精品久久19p | 久久久黄色av | 天天干人人插 | 欧美一区视频 | 国产一区高清在线观看 |