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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Golang 简洁架构实战

發布時間:2024/2/28 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Golang 简洁架构实战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:bearluo,騰訊 IEG 運營開發工程師

文中項目代碼位置:https://github.com/devYun/go-clean-architecture

由于 golang 不像 java 一樣有一個統一的編碼模式,所以我們和其他團隊一樣,采用了 Go 面向包的設計和架構分層這篇文章介紹的一些理論,然后再結合以往的項目經驗來進行分包:

├──?cmd/ │???└──?main.go?//啟動函數 ├──?etc │???└──?dev_conf.yaml??????????????//?配置文件 ├──?global │???└──?global.go?//全局變量引用,如數據庫、kafka等 ├──?internal/ │???????└──?service/ │???????????└──?xxx_service.go?//業務邏輯處理類 │???????????└──?xxx_service_test.go │???????└──?model/ │???????????└──?xxx_info.go//結構體 │???????└──?api/ │???????????└──?xxx_api.go//路由對應的接口實現 │???????└──?router/ │???????????└──?router.go//路由 │???????└──?pkg/ │???????????└──?datetool//時間工具類 │???????????└──?jsontool//json?工具類

其實上面的這個劃分只是簡單的將功能分了一下包,在項目實踐的過程中還是有很多問題。比如:

  • 對于功能實現我是通過 function 的參數傳遞還是通過結構體的變量傳遞?

  • 使用一個數據庫的全局變量引用傳遞是否安全?是否存在過度耦合?

  • 在代碼實現過程中幾乎全部都是依賴于實現,而不是依賴于接口,那么將 MySQL 切換為 MongDB 是不是要修改所有的實現?

所以現在在我們工作中隨著代碼越來越多,代碼中各種 init,function,struct,全局變量感覺也越來越亂。每個模塊不獨立,看似按邏輯分了模塊,但沒有明確的上下層關系,每個模塊里可能都存在配置讀取,外部服務調用,協議轉換等。久而久之服務不同包函數之間的調用慢慢演變成網狀結構,數據流的流向和邏輯的梳理變得越來越復雜,很難不看代碼調用的情況下搞清楚數據流向。

不過就像《重構》中所說:先讓代碼工作起來-如果代碼不能工作,就不能產生價值;然后再試圖將它變好-通過對代碼進行重構,讓我們自己和其他人更好地理解代碼,并能按照需求不斷地修改代碼。

所以我覺得是時候自我改變一下。

The Clean Architecture

在簡潔架構里面對我們的項目提出了幾點要求:

  • 獨立于框架。該架構不依賴于某些功能豐富的軟件庫的存在。這允許你把這些框架作為工具來使用,而不是把你的系統塞進它們有限的約束中。

  • 可測試。業務規則可以在沒有 UI、數據庫、Web 服務器或任何其他外部元素的情況下被測試。

  • 獨立于用戶界面。UI 可以很容易地改變,而不用改變系統的其他部分。例如,一個 Web UI 可以被替換成一個控制臺 UI,而不改變業務規則。

  • 獨立于數據庫。你可以把 Oracle 或 SQL Server 換成 Mongo、BigTable、CouchDB 或其他東西。你的業務規則不受數據庫的約束。

  • 獨立于任何外部機構。事實上,你的業務規則根本不知道外部世界的任何情況。

  • 上圖中同心圓代表各種不同領域的軟件。一般來說,越深入代表你的軟件層次越高。外圓是戰術實現機制,內圓的是戰略核心策略。對于我們的項目來說,代碼依賴應該由外向內,單向單層依賴,這種依賴包含代碼名稱,或類的函數,變量或任何其他命名軟件實體。

    對于簡潔架構來說分為了四層:

    • Entities:實體

    • Usecase:表達應用業務規則,對應的是應用層,它封裝和實現系統的所有用例;

    • Interface Adapters:這一層的軟件基本都是一些適配器,主要用于將用例和實體中的數據轉換為外部系統如數據庫或 Web 使用的數據;

    • Framework & Driver:最外面一圈通常是由一些框架和工具組成,如數據庫 Database, Web 框架等;

    那么對于我的項目來說,也分為了四層:

    • models

    • repo

    • service

    • api

    代碼分層

    models

    封裝了各種實體類對象,與數據庫交互的、與 UI 交互的等等,任何的實體類都應該放在這里。如:

    import?"time"type?Article?struct?{ID????????int64?????`json:"id"`Title?????string????`json:"title"`Content???string????`json:"content"`UpdatedAt?time.Time?`json:"updated_at"`CreatedAt?time.Time?`json:"created_at"` }

    repo

    這里存放的是數據庫操作類,數據庫 CRUD 都在這里。需要注意的是,這里不包含任何的業務邏輯代碼,很多同學喜歡將業務邏輯也放到這里。

    如果使用 ORM,那么這里放入的 ORM 操作相關的代碼;如果使用微服務,那么這里放的是其他服務請求的代碼;

    service

    這里是業務邏輯層,所有的業務過程處理代碼都應該放在這里。這一層會決定是請求 repo 層的什么代碼,是操作數據庫還是調用其他服務;所有的業務數據計算也應該放在這里;這里接受的入參應該是 controller 傳入的。

    api

    這里是接收外部請求的代碼,如:gin 對應的 handler、gRPC、其他 REST API 框架接入層等等。

    面向接口編程

    除了 models 層,層與層之間應該通過接口交互,而不是實現。如果要用 service 調用 repo 層,那么應該調用 repo 的接口。那么修改底層實現的時候我們上層的基類不需要變更,只需要更換一下底層實現即可。

    例如我們想要將所有文章查詢出來,那么可以在 repo 提供這樣的接口:

    package?repoimport?("context""my-clean-rchitecture/models""time" )//?IArticleRepo?represent?the?article's?repository?contract type?IArticleRepo?interface?{Fetch(ctx?context.Context,?createdDate?time.Time,?num?int)?(res?[]models.Article,?err?error) }

    這個接口的實現類就可以根據需求變更,比如說當我們想要 mysql 來作為存儲查詢,那么只需要提供一個這樣的基類:

    type?mysqlArticleRepository?struct?{DB?*gorm.DB }//?NewMysqlArticleRepository?will?create?an?object?that?represent?the?article.Repository?interface func?NewMysqlArticleRepository(DB?*gorm.DB)?IArticleRepo?{return?&mysqlArticleRepository{DB} }func?(m?*mysqlArticleRepository)?Fetch(ctx?context.Context,?createdDate?time.Time,num?int)?(res?[]models.Article,?err?error)?{err?=?m.DB.WithContext(ctx).Model(&models.Article{}).Select("id,title,content,?updated_at,?created_at").Where("created_at?>??",?createdDate).Limit(num).Find(&res).Errorreturn }

    如果改天想要換成 MongoDB 來實現我們的存儲,那么只需要定義一個結構體實現 IArticleRepo 接口即可。

    那么在 service 層實現的時候就可以按照我們的需求來將對應的 repo 實現注入即可,從而不需要改動 service 層的實現:

    type?articleService?struct?{articleRepo?repo.IArticleRepo }//?NewArticleService?will?create?new?an?articleUsecase?object?representation?of?domain.ArticleUsecase?interface func?NewArticleService(a?repo.IArticleRepo)?IArticleService?{return?&articleService{articleRepo:?a,} }//?Fetch func?(a?*articleService)?Fetch(ctx?context.Context,?createdDate?time.Time,?num?int)?(res?[]models.Article,?err?error)?{if?num?==?0?{num?=?10}res,?err?=?a.articleRepo.Fetch(ctx,?createdDate,?num)if?err?!=?nil?{return?nil,?err}return }

    依賴注入 DI

    依賴注入,英文名 dependency injection,簡稱 DI 。DI 以前在 java 工程里面經常遇到,但是在 go 里面很多人都說不需要,但是我覺得在大型軟件開發過程中還是有必要的,否則只能通過全局變量或者方法參數來進行傳遞。

    至于具體什么是 DI,簡單來說就是被依賴的模塊,在創建模塊時,被注入到(即當作參數傳入)模塊的里面。想要更加深入的了解什么是 DI 這里再推薦一下 Dependency injection 和 Inversion of Control Containers and the Dependency Injection pattern 這兩篇文章。

    如果不用 DI 主要有兩大不方便的地方,一個是底層類的修改需要修改上層類,在大型軟件開發過程中基類是很多的,一條鏈路改下來動輒要修改幾十個文件;另一方面就是就是層與層之間單元測試不太方便。

    因為采用了依賴注入,在初始化的過程中就不可避免的會寫大量的 new,比如我們的項目中需要這樣:

    package?mainimport?("my-clean-rchitecture/api""my-clean-rchitecture/api/handlers""my-clean-rchitecture/app""my-clean-rchitecture/repo""my-clean-rchitecture/service" )func?main()?{//?初始化dbdb?:=?app.InitDB()//初始化?reporepository?:=?repo.NewMysqlArticleRepository(db)//初始化servicearticleService?:=?service.NewArticleService(repository)//初始化apihandler?:=?handlers.NewArticleHandler(articleService)//初始化routerrouter?:=?api.NewRouter(handler)//初始化ginengine?:=?app.NewGinEngine()//初始化serverserver?:=?app.NewServer(engine,?router)//啟動server.Start() }

    那么對于這么一段代碼,我們有沒有辦法不用自己寫呢?這里我們就可以借助框架的力量來生成我們的注入代碼。

    在 go 里面 DI 的工具相對來說沒有 java 這么方便,技術框架一般主要有:wire、dig、fx 等。由于 wire 是使用代碼生成來進行注入,性能會比較高,并且它是 google 推出的 DI 框架,所以我們這里使用 wire 進行注入。

    wire 的要求很簡單,新建一個 wire.go 文件(文件名可以隨意),創建我們的初始化函數。比如,我們要創建并初始化一個 server 對象,我們就可以這樣:

    //+build?wireinjectpackage?mainimport?("github.com/google/wire""my-clean-rchitecture/api""my-clean-rchitecture/api/handlers""my-clean-rchitecture/app""my-clean-rchitecture/repo""my-clean-rchitecture/service" )func?InitServer()?*app.Server?{wire.Build(app.InitDB,repo.NewMysqlArticleRepository,service.NewArticleService,handlers.NewArticleHandler,api.NewRouter,app.NewServer,app.NewGinEngine)return?&app.Server{} }

    需要注意的是,第一行的注解:+build wireinject,表示這是一個注入器。

    在函數中,我們調用wire.Build()將創建 Server 所依賴的類型的構造器傳進去。寫完 wire.go 文件之后執行 wire 命令,就會自動生成一個 wire_gen.go 文件。

    //?Code?generated?by?Wire.?DO?NOT?EDIT.//go:generate?go?run?github.com/google/wire/cmd/wire //+build?!wireinjectpackage?mainimport?("my-clean-rchitecture/api""my-clean-rchitecture/api/handlers""my-clean-rchitecture/app""my-clean-rchitecture/repo""my-clean-rchitecture/service" )//?Injectors?from?wire.go:func?InitServer()?*app.Server?{engine?:=?app.NewGinEngine()db?:=?app.InitDB()iArticleRepo?:=?repo.NewMysqlArticleRepository(db)iArticleService?:=?service.NewArticleService(iArticleRepo)articleHandler?:=?handlers.NewArticleHandler(iArticleService)router?:=?api.NewRouter(articleHandler)server?:=?app.NewServer(engine,?router)return?server }

    可以看到 wire 自動幫我們生成了 InitServer 方法,此方法中依次初始化了所有要初始化的基類。之后在我們的 main 函數中就只需調用這個 InitServer 即可。

    func?main()?{server?:=?InitServer()server.Start() }

    測試

    在上面我們定義好了每一層應該做什么,那么對于每一層我們應該都是可單獨測試的,即使另外一層不存在。

    • models 層:這一層就很簡單了,由于沒有依賴任何其他代碼,所以可以直接用 go 的單測框架直接測試即可;

    • repo 層:對于這一層來說,由于我們使用了 mysql 數據庫,那么我們需要 mock mysql,這樣即使不用連 mysql 也可以正常測試,我這里使用 github.com/DATA-DOG/go-sqlmock 這個庫來 mock 我們的數據庫;

    • service 層:因為 service 層依賴了 repo 層,因為它們之間是通過接口來關聯,所以我這里使用 github.com/golang/mock/gomock 來 mock repo 層;

    • api 層:這一層依賴 service 層,并且它們之間是通過接口來關聯,所以這里也可以使用 gomock 來 mock service 層。不過這里稍微麻煩了一點,因為我們接入層用的是 gin,所以還需要在單測的時候模擬發送請求;

    由于我們是通過 github.com/golang/mock/gomock 來進行 mock ,所以需要執行一下代碼生成,生成的 mock 代碼我們放入到 mock 包中:

    mockgen?-destination?.\mock\repo_mock.go?-source?.\repo\repo.go?-package?mockmockgen?-destination?.\mock\service_mock.go?-source?.\service\service.go?-package?mock

    上面這兩個命令會通過接口幫我自動生成 mock 函數。

    repo 層測試

    在項目中,由于我們用了 gorm 來作為我們的 orm 庫,所以我們需要使用 github.com/DATA-DOG/go-sqlmock 結合 gorm 來進行 mock:

    func?getSqlMock()?(mock?sqlmock.Sqlmock,?gormDB?*gorm.DB)?{//創建sqlmockvar?err?errorvar?db?*sql.DBdb,?mock,?err?=?sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))if?err?!=?nil?{panic(err)}//結合gorm、sqlmockgormDB,?err?=?gorm.Open(mysql.New(mysql.Config{SkipInitializeWithVersion:?true,Conn:??????????????????????db,}),?&gorm.Config{})if?nil?!=?err?{log.Fatalf("Init?DB?with?sqlmock?failed,?err?%v",?err)}return }func?Test_mysqlArticleRepository_Fetch(t?*testing.T)?{createAt?:=?time.Now()updateAt?:=?time.Now()//id,title,content,?updated_at,?created_atvar?articles?=?[]models.Article{{1,?"test1",?"content",?updateAt,?createAt},{2,?"test2",?"content2",?updateAt,?createAt},}limit?:=?2mock,?db?:=?getSqlMock()mock.ExpectQuery("SELECT?id,title,content,?updated_at,?created_at?FROM?`articles`?WHERE?created_at?>???LIMIT?2").WithArgs(createAt).WillReturnRows(sqlmock.NewRows([]string{"id",?"title",?"content",?"updated_at",?"created_at"}).AddRow(articles[0].ID,?articles[0].Title,?articles[0].Content,?articles[0].UpdatedAt,?articles[0].CreatedAt).AddRow(articles[1].ID,?articles[1].Title,?articles[1].Content,?articles[1].UpdatedAt,?articles[1].CreatedAt))repository?:=?NewMysqlArticleRepository(db)result,?err?:=?repository.Fetch(context.TODO(),?createAt,?limit)assert.Nil(t,?err)assert.Equal(t,?articles,?result) }

    service 層測試

    這里主要就是用我們 gomock 生成的代碼來 mock repo 層:

    func?Test_articleService_Fetch(t?*testing.T)?{ctl?:=?gomock.NewController(t)defer?ctl.Finish()now?:=?time.Now()mockRepo?:=?mock.NewMockIArticleRepo(ctl)gomock.InOrder(mockRepo.EXPECT().Fetch(context.TODO(),?now,?10).Return(nil,?nil),)service?:=?NewArticleService(mockRepo)fetch,?_?:=?service.Fetch(context.TODO(),?now,?10)fmt.Println(fetch) }

    api 層測試

    對于這一層,我們不僅要 mock service 層,還需要發送 httptest 來模擬請求發送:

    func?TestArticleHandler_FetchArticle(t?*testing.T)?{ctl?:=?gomock.NewController(t)defer?ctl.Finish()createAt,?_?:=?time.Parse("2006-01-02",?"2021-12-26")mockService?:=?mock.NewMockIArticleService(ctl)gomock.InOrder(mockService.EXPECT().Fetch(gomock.Any(),?createAt,?10).Return(nil,?nil),)article?:=?NewArticleHandler(mockService)gin.SetMode(gin.TestMode)//?Setup?your?router,?just?like?you?did?in?your?main?function,?and//?register?your?routesr?:=?gin.Default()r.GET("/articles",?article.FetchArticle)req,?err?:=?http.NewRequest(http.MethodGet,?"/articles?num=10&create_date=2021-12-26",?nil)if?err?!=?nil?{t.Fatalf("Couldn't?create?request:?%v\n",?err)}w?:=?httptest.NewRecorder()//?Perform?the?requestr.ServeHTTP(w,?req)//?Check?to?see?if?the?response?was?what?you?expectedif?w.Code?!=?http.StatusOK?{t.Fatalf("Expected?to?get?status?%d?but?instead?got?%d\n",?http.StatusOK,?w.Code)} }

    總結

    以上就是我對 golang 的項目中發現問題的一點點總結與思考,思考的先不管對不對,總歸是解決了我們當下的一些問題。不過,項目總歸是需要不斷重構完善的,所以下次有問題的時候下次再改唄。

    對于我上面的總結和描述感覺有不對的地方,請隨時指出來一起討論。

    項目代碼位置:https://github.com/devYun/go-clean-architecture

    Reference

    https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html

    https://github.com/bxcodec/go-clean-arch

    https://medium.com/hackernoon/golang-clean-archithecture-efd6d7c43047

    https://farer.org/2021/04/21/go-dependency-injection-wire/

    總結

    以上是生活随笔為你收集整理的Golang 简洁架构实战的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    最近中文字幕在线中文高清版 | 国产精品视频观看 | 欧美性生活小视频 | 狠狠干网站 | 久草视频视频在线播放 | 欧美成年人在线观看 | 午夜 在线 | 久久久国产毛片 | 免费高清国产 | 91夜夜夜 | 国产剧情一区二区 | 亚洲欧洲国产精品 | 国产精品igao视频网入口 | 久久国内精品 | 最近中文字幕完整视频高清1 | 五月香视频在线观看 | 日韩有码中文字幕在线 | 亚洲人在线 | 国产精品欧美 | 国产精品成人免费一区久久羞羞 | 六月丁香社区 | 日韩精品一卡 | 亚洲视频观看 | 亚洲午夜久久久久久久久久久 | 欧美日本啪啪无遮挡网站 | 99精品一区二区 | 丝袜网站在线观看 | 国产精品va| av.com在线 | 四虎在线免费视频 | 日韩一区二区三区不卡 | 久草干 | 成人国产精品免费 | 亚洲国产精品第一区二区 | 天天干天天怕 | 国产精品高| 色老板在线视频 | 99r精品视频在线观看 | 天天操婷婷 | 又污又黄的网站 | 久久免费精品 | 国产不卡一区二区视频 | 成人免费视频在线观看 | 国产经典 欧美精品 | 亚洲精品国产综合久久 | 探花视频免费在线观看 | av免费看看| 久久在线播放 | 亚洲成av人片在线观看香蕉 | 97av影院| 免费观看午夜视频 | 久久这里只有精品久久 | 亚洲四虎在线 | 最近免费中文字幕大全高清10 | 中文字幕一区二区三区乱码不卡 | 久久精品久久99精品久久 | 国产精品一区二区在线观看 | 美女精品国产 | av免费在线观 | 去看片 | 视频一区二区三区视频 | 日韩欧美在线高清 | 亚洲精品大全 | 国产精品99久久久久久人免费 | 日韩最新av在线 | 日日躁夜夜躁xxxxaaaa | 亚洲一区欧美激情 | 天天操天天干天天插 | 亚洲精品在线一区二区 | 啪啪激情网| 久久久国产精品麻豆 | 天天天天爱天天躁 | 国产午夜免费视频 | 超碰97久久| 91福利视频一区 | 亚洲精品女人久久久 | 午夜精品久久久久久久久久久久 | 色视频在线观看 | 亚洲综合色av | 日韩精品一区二区三区视频播放 | av高清一区 | avove黑丝 | 999热视频 | 九草在线视频 | 亚洲成人黄 | 国产精品高潮久久av | 99tvdz@gmail.com| 在线看的毛片 | 一区二区三区中文字幕在线 | 97福利视频 | 国产一级二级av | 麻豆91在线观看 | 欧美激情视频在线免费观看 | 国产一区二区三区在线 | 人人dvd | 免费av大片 | 亚洲理论电影网 | 国产黄色片久久 | 免费a视频在线观看 | 日韩av电影网站在线观看 | 97电影院网| 五月婷婷,六月丁香 | 美女网站免费福利视频 | 成人一区影院 | 国产精品免费视频久久久 | 久热电影 | 国产亚洲在 | 人成免费网站 | 黄污在线观看 | 欧美一级xxxx| 久久韩国免费视频 | 欧洲精品码一区二区三区免费看 | 午夜10000 | 99久久毛片 | 成人毛片在线观看视频 | 日韩免费在线观看网站 | 亚洲欧美在线综合 | 黄色精品一区二区 | 97精品国自产拍在线观看 | 国产第一二区 | 国产精品一区二区三区在线看 | 日韩在线免费 | av黄色大片| 亚洲精品乱码久久 | 黄色的片子 | 国产精品久久久久aaaa九色 | 精品国产伦一区二区三区观看体验 | 成人av电影免费在线观看 | 国产精品一区二区三区久久 | 精品在线观看一区二区三区 | 一区av在线播放 | 免费视频久久 | 国产午夜精品一区二区三区四区 | 精品嫩模福利一区二区蜜臀 | 在线观看国产福利片 | 日韩欧美综合在线视频 | 99国产高清| 精品亚洲一区二区 | 九色琪琪久久综合网天天 | 在线精品在线 | 国产成人免费观看久久久 | 91九色精品国产 | 激情五月婷婷综合 | 中文字幕在线播出 | 精品国产理论片 | 在线观看av中文字幕 | 久久久久久久久久久久国产精品 | 国产精品久久久久久久久久免费 | www.天天干| 亚洲91精品| av在线进入 | 欧美少妇bbwhd | 亚洲久草在线视频 | 国语久久 | 中文字幕亚洲欧美 | 日韩精品视频网站 | 国产精华国产精品 | 欧美日韩中文国产一区发布 | 91久久丝袜国产露脸动漫 | 国产亚洲人 | 色婷婷国产精品一区在线观看 | www黄色软件 | 九九99视频 | 黄色软件网站在线观看 | 色综合中文字幕 | 韩国精品视频在线观看 | 黄色一级在线视频 | 日韩在线播放av | 婷婷亚洲综合五月天小说 | 韩国av免费观看 | 免费在线观看一级片 | 久久精品视频网站 | а天堂中文最新一区二区三区 | 国产欧美精品xxxx另类 | 男女啪啪网站 | a级片在线播放 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 五月婷香 | 一区二区精品在线观看 | 精品中文字幕在线 | 欧美一级片免费播放 | 波多野结衣在线中文字幕 | 国内视频在线 | 国产在线传媒 | 婷婷色狠狠| 最近最新最好看中文视频 | 欧美激情视频一区二区三区免费 | 久久电影国产免费久久电影 | 国产91精品高清一区二区三区 | 探花视频在线观看+在线播放 | 久草网视频 | 日韩免费观看一区二区三区 | 久久伊人精品天天 | 欧美日韩久久不卡 | 国产精品久久一区二区三区不卡 | 91av看片| av蜜桃在线| 青青色影院 | 中文字幕 91 | 麻豆91精品91久久久 | 国产精品免费看久久久8精臀av | 国产视频一区二区在线观看 | 91视频首页 | av 一区二区三区四区 | 国产精选在线观看 | 日本精品视频网站 | 精品99视频| 在线三级中文 | 免费在线国产黄色 | 国产精品男女啪啪 | 探花视频免费观看高清视频 | 中文字幕人成一区 | 毛片美女网站 | 亚洲高清视频一区二区三区 | 激情文学综合丁香 | av永久网址 | 超碰人人舔 | 国产丝袜| 国产 色| 国产精品成人一区二区三区吃奶 | 久久久精品国产免费观看一区二区 | 久草综合在线观看 | 久草国产在线观看 | 国内一区二区视频 | 国产精品女人网站 | 天天操天天舔天天干 | 999久久久久久久久 69av视频在线观看 | 久久免费国产 | 97成人资源 | 麻豆久久久久久久 | 国产一区二区三区免费在线观看 | 国产麻豆剧果冻传媒视频播放量 | 婷婷综合伊人 | 又污又黄网站 | 少妇bbbb搡bbbb搡bbbb | 成人久久亚洲 | 久久国产精品久久国产精品 | 亚洲成人资源网 | 欧洲性视频| www.xxx.性狂虐 | 国产伦精品一区二区三区照片91 | 91精品国产自产91精品 | 人人插人人 | 一本一道久久a久久精品 | 视频在线观看99 | 中文字幕色综合网 | 三级黄色片在线观看 | 久久综合九色欧美综合狠狠 | 日日麻批40分钟视频免费观看 | 精品人人爽 | 伊人五月| 欧美永久视频 | 毛片网站免费在线观看 | 欧美日韩高清在线一区 | 韩国视频一区二区三区 | 久久综合久久八八 | 久久在线精品视频 | 米奇狠狠狠888 | 九九日九九操 | 久久久久亚洲精品男人的天堂 | 最近中文字幕免费大全 | 成人精品福利 | 久久久免费看视频 | 亚洲资源片 | 免费亚洲成人 | 91中文字幕在线 | 欧美精品一级视频 | 黄av资源 | 国产精品观看在线亚洲人成网 | 五月天天在线 | 欧美一级性生活 | 欧美动漫一区二区三区 | 国产精品久久久久久久久大全 | 一级黄色片在线 | 久久久久视| www中文在线| 久久国产精品精品国产色婷婷 | 国产大片免费久久 | 久久久久久久久久久免费 | 国产涩涩在线观看 | 精品自拍av | 日韩高清无线码2023 | 成全免费观看视频 | 91丨九色丨高潮丰满 | 超碰在线人人艹 | 色综合久久久久综合体 | 午夜123| 黄色特级毛片 | 91尤物国产尤物福利在线播放 | 九九热精品在线 | 又色又爽又激情的59视频 | 久久手机在线视频 | 最新国产中文字幕 | 国产精品久久久久久久av大片 | 一区二区视频免费在线观看 | 中文视频在线播放 | 丁香六月在线 | 一区中文字幕电影 | 成人久久视频 | 欧洲色综合 | 青青河边草免费视频 | 激情久久婷婷 | 黄色免费网战 | 亚洲一级黄色片 | 日本在线观看中文字幕无线观看 | 人人干人人干人人干 | 色综合久久久久久久 | 色 中文字幕| 久久理论电影网 | 91在线免费播放 | 亚洲国产午夜 | 五月天激情在线 | 开心激情久久 | 美女视频黄频 | 91九色蝌蚪在线 | 免费av高清 | 欧美综合国产 | 久久国产视频网站 | 超碰97人| 在线中文字幕电影 | 国产91精品看黄网站在线观看动漫 | 欧美精品做受xxx性少妇 | 成人精品国产免费网站 | 国产精品福利小视频 | 在线亚洲天堂网 | 亚洲激情视频在线观看 | 99久久精品免费看国产一区二区三区 | 欧美精品在线一区 | 奇米导航 | 亚洲一区日韩在线 | 久草在线中文视频 | 不卡视频一区二区三区 | 国内小视频 | 亚洲无吗视频在线 | 中文字幕在线乱 | 毛片a级片 | 亚洲码国产日韩欧美高潮在线播放 | 日韩视频一 | 免费看v片网站 | 五月婷婷婷婷婷 | 88av网站 | 深夜男人影院 | 成人av片免费看 | 亚洲婷婷免费 | 亚洲成av人影片在线观看 | 精品国产伦一区二区三区观看说明 | 精品久久久久久久 | 亚洲九九九在线观看 | 中文字幕免费观看全部电影 | 国产.精品.日韩.另类.中文.在线.播放 | 四虎影院在线观看av | 综合婷婷久久 | 国产在线视频导航 | 碰天天操天天 | 97超碰国产精品女人人人爽 | 久久资源总站 | 久久露脸国产精品 | 香蕉影院在线播放 | 久久精品www人人爽人人 | 国产成人精品亚洲日本在线观看 | 亚洲精品国偷拍自产在线观看 | 国产午夜精品av一区二区 | 国产三级精品在线 | 美女在线观看网站 | 欧美色综合久久 | 欧美午夜理伦三级在线观看 | 日韩精品中文字幕在线 | 四虎国产精品免费观看视频优播 | 国产成人精品一区二区三区福利 | 国产理论片在线观看 | 欧美色道| 五月香婷 | 999成人 | 国产精品亚州 | 久久99国产精品自在自在app | 五月天婷婷在线视频 | 中文字幕人成人 | 在线欧美最极品的av | 日韩久久精品一区二区 | 伊人影院得得 | 激情久久婷婷 | 日日干激情五月 | 超碰人人做 | 久久久久久久久影视 | 日韩黄色免费在线观看 | 中文字幕精品在线 | 中文在线字幕观看电影 | 91视频在线看 | 日本高清免费中文字幕 | 操操操人人 | 欧美激情综合色 | 久久9999久久 | 久久久久久久免费看 | 国产小视频在线观看 | 亚洲aⅴ免费在线观看 | 久久午夜色播影院免费高清 | 丝袜制服天堂 | 51久久成人国产精品麻豆 | 精品久久视频 | 激情五月婷婷综合网 | 黄色一级性片 | 日日夜夜天天综合 | 区一区二区三区中文字幕 | 亚州精品在线视频 | 玖玖视频精品 | 一区二区伦理电影 | 91精品国产91 | 九九在线播放 | 国内成人av | 婷婷五月情| 在线黄色免费 | 激情网在线视频 | 国产在线综合视频 | 国产精品18久久久久久首页狼 | 日韩网站在线播放 | 久久久国产精品免费 | 开心激情综合网 | 日韩精品一区二 | 天天综合人人 | 久久精品免费观看 | 国产高清不卡在线 | 成人午夜电影网站 | 久精品在线观看 | 精品国产乱码久久久久久天美 | 色天天综合网 | 国产乱老熟视频网88av | aaa亚洲精品一二三区 | 国产成人精品综合 | 免费av网址大全 | 精品国产乱码久久久久久久 | 欧美大码xxxx | 免费看一级特黄a大片 | 91精品秘密在线观看 | 精品国产1区 | 成人免费精品 | 日日激情| 天堂av观看 | 免费视频a| 国产91九色蝌蚪 | 一级欧美一级日韩 | 少妇搡bbb| 69国产精品成人在线播放 | 男女全黄一级一级高潮免费看 | 手机在线视频福利 | 久久中文字幕在线视频 | 国产视频精选在线 | 久久久久久久综合色一本 | 日韩三级在线观看 | 日韩一级片网址 | 国内精品在线看 | 视频高清| 欧美射射射| 成人精品久久久 | av千婊在线免费观看 | 国产精品在线看 | 久久成人欧美 | 久久精品男人的天堂 | 手机av在线网站 | av在线播放中文字幕 | 国产玖玖在线 | 亚洲专区一二三 | 日本在线中文 | 日韩精品一区二区在线 | 在线观看91网站 | 亚洲精品乱码久久久久久 | www.com.日本一级 | 亚洲干视频在线观看 | 免费看日韩 | 在线亚洲观看 | 一区久久久 | 亚洲一区二区黄色 | 最近2019好看的中文字幕免费 | 久久午夜影视 | 蜜臀久久99精品久久久久久网站 | 一区二区三区精品久久久 | 免费在线a | 在线免费黄网站 | 免费看的黄色网 | 丝袜美腿在线视频 | 日本公妇色中文字幕 | 六月丁香在线视频 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 九色视频网址 | 亚洲精品乱码白浆高清久久久久久 | 九九九热精品免费视频观看网站 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 好看的国产精品视频 | 99久久久国产精品免费99 | 香蕉久草在线 | 女人18片 | 国产亚洲精品综合一区91 | 久久毛片高清国产 | 精品视频123区在线观看 | 手机成人在线电影 | 成人免费在线电影 | 999精品在线| 国产成人av免费在线观看 | 国产一级免费在线观看 | 午夜精品福利一区二区三区蜜桃 | 成人午夜av电影 | 在线观看电影av | 91人人爽人人爽人人精88v | 国色天香av | 久久久久久久久久久影院 | 成人a在线观看高清电影 | 韩日三级av | 国外av在线 | 91精品国产麻豆 | 中文字幕在线免费看 | 婷婷综合成人 | 亚洲视频观看 | 亚洲一区网站 | 日韩在线电影观看 | 国内精品小视频 | 日韩视频一区二区三区 | 91精品国产高清自在线观看 | 欧美日韩国产在线精品 | 久草在线| 视频在线观看99 | 久久撸在线视频 | 久久免费福利视频 | 国产精品九九久久99视频 | 久久99欧美 | 玖玖综合网 | 久久日韩精品 | 国产成人a v电影 | 日本在线观看一区二区 | 久久免费视频在线观看30 | 欧美亚洲成人xxx | av大片免费看 | 国产精品mv在线观看 | 欧美亚洲精品在线观看 | 国产一区在线视频观看 | 国产淫片 | 日韩大片在线观看 | 97av在线| 亚洲欧美视频在线播放 | 久久蜜桃av| 成年人在线看片 | 五月天丁香视频 | 免费看的黄色的网站 | 久久国产系列 | 亚洲经典在线 | 五月婷婷六月丁香激情 | 久久精品国产免费看久久精品 | 在线观看aa | 91大神精品视频在线观看 | 久久久久久国产精品美女 | 91大神免费在线观看 | 国产麻豆精品在线观看 | 在线观看不卡视频 | 一区精品久久 | av中文字幕在线观看网站 | 久久av网址| 国产成人一区二区精品非洲 | 久久福利国产 | 99久久电影 | 国产一区二区三区四区大秀 | 久久亚洲福利视频 | 亚洲精品动漫成人3d无尽在线 | 亚洲一级黄色 | 成人午夜电影网站 | 欧美a级在线 | 久久99热国产 | 日本乱视频 | 正在播放国产一区二区 | 黄色精品国产 | 欧美亚洲成人xxx | 久产久精国产品 | 91精品黄色| 久久久久女教师免费一区 | 免费高清无人区完整版 | 久久久久久久久电影 | 国产精品高清一区二区三区 | 亚洲情感电影大片 | 亚洲欧美国产精品va在线观看 | 六月丁香婷婷久久 | 国产精品高清免费在线观看 | 97视频免费播放 | 国产精品麻豆果冻传媒在线播放 | 五月天婷婷狠狠 | 日韩欧美国产视频 | 成人亚洲精品久久久久 | 免费看在线看www777 | 在线免费国产视频 | 91麻豆产精品久久久久久 | 在线观看mv的中文字幕网站 | 国产精品久久一区二区三区不卡 | 四虎在线观看视频 | 成人午夜剧场在线观看 | 色天天综合网 | 欧美日韩在线播放 | 免费看一及片 | 国产91精品久久久久久 | 骄小bbw搡bbbb揉bbbb | 国产精品理论在线观看 | 国产成人香蕉 | 最近高清中文字幕在线国语5 | 亚洲国产成人精品电影在线观看 | av片子在线观看 | 国产一级黄色免费看 | 天天干天天操天天射 | 超碰个人在线 | 久久96国产精品久久99漫画 | 天天色综合天天 | 中日韩免费视频 | 日韩黄色中文字幕 | 亚洲精品91天天久久人人 | av大片免费看 | 美女久久久久久 | 色资源网免费观看视频 | 免费在线一区二区 | 亚洲精欧美一区二区精品 | 日本特黄一级片 | 国产精品www | 韩国av在线播放 | 在线成人一区二区 | 在线观看久久久久久 | 中文字幕91在线 | 四虎伊人| 久久综合久久综合久久 | 国产一区二区免费 | 国产精品永久免费在线 | 在线导航av | 成人蜜桃网 | 中文字幕在线免费看 | 黄色免费在线看 | 国产资源中文字幕 | 午夜精品麻豆 | www.在线观看av | 亚洲免费在线看 | 久碰视频在线观看 | 久久精品中文字幕免费mv | 日韩在线观看视频中文字幕 | 色综合夜色一区 | 手机看片99 | 美女黄频视频大全 | 久久精选视频 | 亚洲精品视频播放 | 日韩电影黄色 | 中文字幕高清在线播放 | 永久免费av在线播放 | 婷婷久久网 | 97成人资源站| 久久综合狠狠综合久久狠狠色综合 | 91麻豆传媒 | 色综合天天综合网国产成人网 | 欧美日韩精品二区第二页 | 午夜美女视频 | 国产精品美女999 | 91看片在线播放 | 狠狠色伊人亚洲综合成人 | 日韩免费三区 | 最新日韩视频 | 黄色免费av | 久久96国产精品久久99漫画 | 婷婷色在线资源 | 国产美女精品 | 日韩中字在线 | 91九色蝌蚪国产 | 午夜精品999 | 91av在线播放视频 | 九色免费视频 | 中文资源在线观看 | 美女视频永久黄网站免费观看国产 | 久久五月婷婷丁香社区 | 综合色亚洲 | av在线精品 | 色综合久久久久综合 | 久久久久久久免费观看 | 日日操夜夜操狠狠操 | 超碰在线免费福利 | 久久九精品 | 国产男男gay做爰 | 中文字幕电影高清在线观看 | 日韩电影在线视频 | 久久综合免费 | 国产91免费在线观看 | 国产精品美女视频 | www五月天婷婷 | av中文字幕在线观看网站 | 丰满少妇在线观看 | 丁香婷婷在线 | 国产美女无遮挡永久免费 | 久久久久久国产精品 | 成人h视频在线 | 黄色.com | 天天天天爽 | 中文字幕av在线 | 欧美老少交| 在线观看免费观看在线91 | 久久久99精品免费观看乱色 | 人人爽人人干 | 日本久草电影 | 曰本免费av | 欧美久草网 | 久久久久成人精品 | 亚洲精品成人av在线 | 九九热在线精品视频 | 国产精品综合久久久久 | 国产一区二三区好的 | 狠狠色丁香九九婷婷综合五月 | 精品国产一二三 | 狠狠的日 | 国色天香在线观看 | 国产亚洲精品久久久久久 | 激情丁香5月 | 国产香蕉久久精品综合网 | 深爱开心激情 | 欧美精品久久久久性色 | 黄色一级在线视频 | 亚洲国产字幕 | 久草免费在线视频 | 婷婷视频在线观看 | 中中文字幕av | 国产精品久久久久久久久久不蜜月 | 欧美国产一区二区 | 狠狠干.com | 国产手机av | 国产三级香港三韩国三级 | 91成人在线免费观看 | 国产精品一区二区三区观看 | 韩国一区二区三区在线观看 | 青青河边草免费直播 | 九九精品无码 | 美女网站黄在线观看 | 九九免费观看全部免费视频 | 婷婷av网 | 日韩在线激情 | 国产韩国精品一区二区三区 | 深夜免费网站 | 国产精品久久久亚洲 | 丁香激情婷婷 | 在线国产不卡 | 日韩av片无码一区二区不卡电影 | 成人国产精品一区 | 欧美精品三级在线观看 | 色诱亚洲精品久久久久久 | 国产精品午夜在线 | 超碰在线观看99 | 久久精品99国产国产精 | 亚洲成aⅴ人在线观看 | 久久精品79国产精品 | 国产一级在线观看视频 | 国产一区二区久久久 | 久艹视频在线免费观看 | 黄色网址国产 | 日韩欧美国产精品 | 日韩精品欧美专区 | 狠狠色综合网站久久久久久久 | 久艹视频在线免费观看 | 日本精品久久久久中文字幕5 | 国产精品一区二区电影 | 日韩久久精品一区二区三区下载 | 国产美女在线免费观看 | 午夜精品久久久久久99热明星 | 欧美日韩高清免费 | 摸bbb搡bbb搡bbbb | 中文字幕观看av | 天天夜夜操 | 一级做a爱片性色毛片www | 国产精品18p | 日韩在线观看中文字幕 | 97电影院在线观看 | 午夜在线免费视频 | www.狠狠色 | 国产日韩精品久久 | 久久精彩视频 | 久久视频在线免费观看 | 在线观看视频h | 日韩午夜一级片 | 九九有精品 | 干综合网| 特级西西444www大精品视频免费看 | 黄色成品视频 | 激情伊人五月天久久综合 | 国产免费叼嘿网站免费 | 欧美作爱视频 | 日韩一区二区三区在线观看 | 中文字幕av免费观看 | 婷婷国产视频 | 毛片一级免费一级 | av电影中文| 色综合久久久久网 | 在线国产视频一区 | 国产精品毛片一区二区在线看 | 久久男人免费视频 | 99久久99精品| 婷婷精品国产一区二区三区日韩 | 美女国产在线 | 日韩久久一区 | 久久久麻豆视频 | 久久99精品久久只有精品 | 91色偷偷| 成人动漫一区二区三区 | 久久久精选| 91重口视频 | 天天操操 | 日韩欧美69| 久久综合之合合综合久久 | 国产精品精品久久久久久 | 欧美日韩在线免费视频 | 992tv人人网tv亚洲精品 | www.日韩免费 | 日本大片免费观看在线 | 国产成人精品三级 | 国产资源网站 | 欧美日韩电影在线播放 | 国产系列在线观看 | 在线免费观看视频 | 久久久久久久免费看 | 婷婷色在线播放 | 午夜精品久久久久久久99 | 香蕉在线观看视频 | 婷婷中文在线 | 欧美一级片免费 | 婷婷视频在线观看 | 国产精品久久久久久久7电影 | 字幕网资源站中文字幕 | 麻豆国产露脸在线观看 | 成人av手机在线 | 亚洲美女精品区人人人人 | av免费看电影 | 特级毛片在线免费观看 | 三级性生活视频 | 亚洲精品国产品国语在线 | 国产成人av电影在线观看 | 91大神电影 | 日韩中文字幕网站 | 在线看黄色的网站 | 亚洲天堂网视频在线观看 | 日本中文字幕高清 | 欧美日一级片 | 日韩成人看片 | 成人在线播放av | 97国产电影| 一级片免费在线 | 国产精品入口a级 | 亚洲精选在线观看 | 久久国产91 | 97色视频在线 | 999久久国精品免费观看网站 | 亚洲第一区精品 | 超碰人人射 | 日本激情视频中文字幕 | 亚洲另类视频 | 99热在线国产精品 | 91日韩在线 | 91精品视频一区二区三区 | 激情综合五月天 | 日日干,天天干 | 在线a人v观看视频 | 色就色,综合激情 | 国产精品网址在线观看 | 91视频在线免费 | 99视频在线观看视频 | 91麻豆精品国产午夜天堂 | 中文av日韩 | www免费在线观看 | 久久国产亚洲视频 | 午夜精品视频在线 | 日韩啪啪小视频 | 久久综合毛片 | 开心丁香婷婷深爱五月 | 操碰av | 久久久精品影视 | 美女露久久 | 99久久99久久精品免费 | 免费福利视频网站 | 国产精品剧情在线亚洲 | 黄色资源在线观看 | 国产精品久久久久久吹潮天美传媒 | 九九热在线观看视频 | 精品久久1 | 亚洲精选国产 | 日韩视频中文字幕在线观看 | 久久综合免费视频 | 亚洲理论在线观看电影 | 成人h视频 | 国产一区二区免费看 | 免费h漫在线观看 | 亚洲mv大片欧洲mv大片免费 | 日本黄色大片免费 | 麻豆精品视频在线观看免费 | 成人小视频免费在线观看 | 欧美一级艳片视频免费观看 | 天天玩天天干 | av九九九 | 国产福利专区 | 福利视频一区二区 | 国产v视频| 精品久久久久久电影 | 成人国产精品久久久 | 嫩草伊人久久精品少妇av | 久久久久亚洲天堂 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 综合在线观看色 | 欧美少妇xx | 久久久私人影院 | 欧美精品三级在线观看 | 911香蕉视频 | 色就色,综合激情 | 国产女v资源在线观看 | 99久久9| 日本精品一区二区三区在线播放视频 | 久草综合视频 | 欧美大片aaa| 丁香婷婷综合激情 | 免费成人在线观看视频 | 91精品久久久久久久久久久久久 | www.日韩免费 | 亚洲永久av | 伊人网综合在线观看 | 黄色一二级片 | 久草免费福利在线观看 | 成年人av在线播放 | 欧美 日韩 视频 | 精品国自产在线观看 | 成人性生交大片免费观看网站 | 福利一区在线 | 婷婷色站| 国产美女免费观看 | 精品久久久久久久久久久久 | 日韩三级视频在线看 | 韩国av电影在线观看 | 午夜国产一区二区 | 伊人天天色 | 97超级碰碰碰碰久久久久 | 超碰免费观看 | 久久精品国产久精国产 | 久久精品视频国产 | 色婷婷狠狠五月综合天色拍 | 又黄又刺激的网站 | 91中文字幕| 人人要人人澡人人爽人人dvd | 韩日电影在线观看 | 激情五月婷婷综合网 | 天天操天天干天天 | 国产在线观看你懂的 | 在线a视频 | www色婷婷com| 99色资源| 国产精品99久久久久久大便 | 97视频在线观看免费 | 精品欧美一区二区在线观看 | 最近日本韩国中文字幕 | 国产精品亚洲片夜色在线 | 综合成人在线 | 亚洲精品福利在线 | 亚洲成人免费 | 在线观看免费中文字幕 | 看片一区二区三区 | 黄色一级片视频 | 国产乱码精品一区二区蜜臀 | 日韩精品一区二区在线视频 | 久99久中文字幕在线 | 色综合久久88 | 一区二区视频在线观看免费 | 一区二区三区日韩在线 | 国产无套精品久久久久久 | 久久视频在线观看免费 | 日韩精品一区二区三区视频播放 | 亚州精品天堂中文字幕 | 97精品国产97久久久久久粉红 | 香蕉视频4aa | 成人黄色免费观看 | 五月天综合色 | 91香蕉嫩草 | 349k.cc看片app | 亚洲一区精品二人人爽久久 | 视频在线一区 | 美女视频黄是免费的 | 久久99精品一区二区三区三区 | 亚洲黄在线观看 | 黄色软件视频网站 | 免费看的黄色网 | 中文字幕在线观看播放 | 丝袜少妇在线 | 久久亚洲欧美日韩精品专区 | 黄色一级大片在线观看 | 丁香婷婷综合网 | 国产黄a三级三级 | 在线看片中文字幕 | 91丨九色丨国产在线观看 | 国内免费久久久久久久久久久 | 国产视频久 | 色天天天| 99在线视频观看 | a视频在线观看 | 欧美性粗大hdvideo | 激情婷婷网| 久草视频播放 | 精品国产中文字幕 | 欧美色久 | 国产精品三级视频 | 婷婷国产v亚洲v欧美久久 | 婷婷激情综合五月天 | 日韩三级免费 |