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

兩天完成一個小型工程報價系統(三層架構)

開發 架構 后端
花了兩天,整理了一下三層架構,順便練了一個小型三層架構——工程報價系統。具體講解了分層代碼的設計與實現。詳細內容請看下文

花了兩天,整理了一下三層架構,順便練了一個小型三層架構——工程報價系統。

功能很簡單,完成基本的增刪改查

  • 搭建項目三層結構

  • 界面的設計以及美化

#p#

  • 分層代碼的設計與實現

1.模型層:由于表設計時存在主外鍵關系,故把表映射成對象時添加一個外鍵對象來保存外鍵那張表的相關數據。

  1. // 外鍵實體  
  2.             private Product _product;  
  3.             private Project _project;  
  4.  
  5.             public Project _Project  
  6.             {  
  7.                 get { return _project; }  
  8.                 set { _project = value; }  
  9.             }  
  10.  
  11.             public Product _Product  
  12.             {  
  13.                 get { return _product; }  
  14.                 set { _product = value; }  
  15.             } 

2.數據訪問層:把數據封裝成Model對象的各層之間傳遞。

我個人不喜歡三層之間傳遞DataSet數據集,我的理解是盡量不在BLL層出現DataSet,所以我在DAL層把所有獲取的數據封裝成IEnumerable集合,然后返回。

  1. protected IEnumerable<ProjectItem> ToModelsByFK(SqlDataReader reader)  
  2.          {  
  3.              var list = new List<ProjectItem>();  
  4.              while (reader.Read())  
  5.              {  
  6.                  list.Add(ToModelByFK(reader));  
  7.              }  
  8.              return list;  
  9.          } 
  1. public ProjectItem ToModelByFK(SqlDataReader reader)  
  2.          {  
  3.              ProjectItem projectItem = new ProjectItem();  
  4.              projectItem._Product = new Product();  
  5.              projectItem._Project = new Project();  
  6.              projectItem.ID = (int)ToModelValue(reader, "ID");  
  7.              projectItem._Product.ID = (int)ToModelValue(reader, "ProductID");  
  8.              projectItem._Project.ID = (int)ToModelValue(reader,"projectID");  
  9.              projectItem._Product.Manufacturer = ToModelValue(reader, "Manufacturer").ToString();  
  10.              projectItem._Product.Parameters = ToModelValue(reader, "Parameters").ToString();  
  11.              projectItem._Product.Price = decimal.Parse( ToModelValue(reader, "Price").ToString());  
  12.              projectItem._Product.ProductName = ToModelValue(reader, "ProductName").ToString();  
  13.              projectItem._Product.Specification = ToModelValue(reader, "Specification").ToString();  
  14.              projectItem._Product.Unit = ToModelValue(reader, "Unit").ToString();  
  15.              projectItem.Count = (int)ToModelValue(reader, "Count");  
  16.              projectItem.TotalMoney = (decimal)ToModelValue(reader, "TotalMoney");  
  17.              projectItem.UnitPrice = (decimal)ToModelValue(reader, "UnitPrice");   
  18.              return projectItem;  
  19.          } 
  1. protected object ToModelValue(SqlDataReader reader,string columnName)  
  2.         {  
  3.             if(reader.IsDBNull(reader.GetOrdinal(columnName)))  
  4.             {  
  5.                 return null;  
  6.             }  
  7.             else 
  8.             {  
  9.                 return reader[columnName];  
  10.             }  
  11.         } 

使用GetProjectByCondition方法返回一個封裝成對象的 IEnumerable集合

  1. public IEnumerable<Model.Project> GetProjectByCondition(string projectName, string customerName, string contract, string tel)  
  2.         {  
  3.             StringBuilder sqlWhere = new StringBuilder("select * from Project where 1=1");  
  4.             List<SqlParameter> listParameters = new List<SqlParameter>();  
  5.             if (!string.IsNullOrWhiteSpace(projectName))  
  6.             {  
  7.                 sqlWhere.AppendLine(" and projectName like @projectName");  
  8.                 listParameters.Add(new SqlParameter("projectName""%" + projectName + "%"));  
  9.             }  
  10.             if (!string.IsNullOrWhiteSpace(contract))  
  11.             {  
  12.                 sqlWhere.AppendLine(" and Contact like @Contact");  
  13.                 listParameters.Add(new SqlParameter("Contact""%" + contract + "%"));  
  14.             }  
  15.             if (!string.IsNullOrWhiteSpace(customerName))  
  16.             {  
  17.                 sqlWhere.AppendLine(" and customer like @customer");  
  18.                 listParameters.Add(new SqlParameter("customer""%" + customerName + "%"));  
  19.             }  
  20.             if (!string.IsNullOrWhiteSpace(tel))  
  21.             {  
  22.                 sqlWhere.AppendLine(" and tel like @tel");  
  23.                 listParameters.Add(new SqlParameter("tel""%" + tel + "%"));  
  24.             }  
  25.             using (SqlDataReader reader = SqlHelper.ExecuteDataReader(sqlWhere.ToString(), listParameters.ToArray()))  
  26.             {  
  27.                 return ToModels(reader);  
  28.             }  
  29.  
  30.         } 

UpdatePassChecked方法接受一個對象,通過對象的屬性來獲取數據

  1. public int UpdatePassChecked(ProjectItem projectItem)  
  2.          {  
  3.              string sql =  
  4.                  "UPDATE Project " +  
  5.                  "SET " +  
  6.              " ProjectName = @ProjectName" 
  7.                  + ", Customer = @Customer" 
  8.                  + ", Contact = @Contact" 
  9.                  + ", Tel = @Tel" 
  10.                  + ", DeliveryPlace = @DeliveryPlace" 
  11.                  + ", DeliveryTime = @DeliveryTime" 
  12.                  + ", TransportCosts = @TransportCosts" 
  13.                  + ", PaymentTerm = @PaymentTerm" 
  14.                  + ", Bak = @Bak" 
  15.  
  16.              + " WHERE ID = @ID";  
  17.  
  18.  
  19.              SqlParameter[] para = new SqlParameter[]  
  20.             {  
  21.                 new SqlParameter("@ID", projectItem._Project.ID)  
  22.                     ,new SqlParameter("@ProjectName", ToDBValue(projectItem._Project.ProjectName))  
  23.                     ,new SqlParameter("@Customer", ToDBValue(projectItem._Project.Customer))  
  24.                     ,new SqlParameter("@Contact", ToDBValue(projectItem._Project.Contact))  
  25.                     ,new SqlParameter("@Tel", ToDBValue(projectItem._Project.Tel))  
  26.                     ,new SqlParameter("@DeliveryPlace", ToDBValue(projectItem._Project.DeliveryPlace))  
  27.                     ,new SqlParameter("@DeliveryTime", ToDBValue(projectItem._Project.DeliveryTime))  
  28.                     ,new SqlParameter("@TransportCosts", ToDBValue(projectItem._Project.TransportCosts))  
  29.                     ,new SqlParameter("@PaymentTerm", ToDBValue(projectItem._Project.PaymentTerm))  
  30.                     ,new SqlParameter("@Bak", ToDBValue(projectItem._Project.Bak))  
  31.             };  
  32.  
  33.              return SqlHelper.ExecuteNonQuery(sql, para);  
  34.  
  35.          } 

Add方法傳入一個已經把數據封裝好的對象,然后返回一個新的對象(包含新創建生成的ID)

  1. public Product Add(Product product)  
  2.         {  
  3.                 string sql ="INSERT INTO Product (ProductName, Specification, Manufacturer, Parameters, Price, Unit)  output inserted.ID VALUES (@ProductName, @Specification, @Manufacturer, @Parameters, @Price, @Unit)";  
  4.                 SqlParameter[] para = new SqlParameter[]  
  5.                     {  
  6.                         new SqlParameter("@ProductName", ToDBValue(product.ProductName)),  
  7.                         new SqlParameter("@Specification", ToDBValue(product.Specification)),  
  8.                         new SqlParameter("@Manufacturer", ToDBValue(product.Manufacturer)),  
  9.                         new SqlParameter("@Parameters", ToDBValue(product.Parameters)),  
  10.                         new SqlParameter("@Price", ToDBValue(product.Price)),  
  11.                         new SqlParameter("@Unit", ToDBValue(product.Unit)),  
  12.                     };  
  13.                       
  14.                 int newId = (int)SqlHelper.ExecuteScalar(sql, para);  
  15.                 return GetByID(newId);  
  16.         } 

#p#

3.業務邏輯層:業務邏輯層是項目的核心,業務邏輯上的代碼通常在這兒實現(一言難盡)。

簡單數據驗證:

  1. public bool UpdateThroughChecked(ProjectItem projectItem)  
  2.         {  
  3.             if (string.IsNullOrEmpty(projectItem._Project.ProjectName))  
  4.             {  
  5.                 throw new Exception("項目名稱不能為空");  
  6.             }  
  7.             //顧客姓名可以為空,但聯系人不能為空,所以數據庫里就應該設計好  
  8.             if (string.IsNullOrEmpty(projectItem._Project.Contact))  
  9.             {  
  10.                 throw new Exception("聯系人姓名不能為空");  
  11.             }  
  12.             if (string.IsNullOrEmpty(projectItem._Project.Tel))  
  13.             {  
  14.                 throw new Exception("聯系電話不能為空");  
  15.             }  
  16.             if (string.IsNullOrEmpty(projectItem._Project.DeliveryPlace))  
  17.             {  
  18.                 throw new Exception("交貨地點不能為空");  
  19.             }  
  20.             if (string.IsNullOrEmpty(projectItem._Project.DeliveryTime))  
  21.             {  
  22.                 throw new Exception("交貨時間不能為空");  
  23.             }  
  24.             if (projectItem._Project.TransportCosts<00)  
  25.             {  
  26.                 throw new Exception("運輸費用不能為負數");  
  27.             }  
  28.             return new DAL.ProjectItemService().UpdatePassChecked(projectItem) > 0;  
  29.  
  30.         } 

計算總金額:

  1. public decimal GetProductTotalMoney(int projectID)  
  2.         {  
  3.             var list = new DAL.ProjectItemService().GetProductTotalMoney(projectID);  
  4.             decimal  totalMoney = 0.00M;  
  5.             foreach (var model in list)  
  6.             {  
  7.                 totalMoney+=model.TotalMoney.Value;  
  8.             }  
  9.             return totalMoney;  
  10.         } 

根據查詢條件獲取數據集合:

  1. /// <summary>  
  2.         /// 根據查詢條件獲取數據集合  
  3.         /// </summary>  
  4.         /// <param name="condition"></param>  
  5.         /// <returns></returns>  
  6.         public IEnumerable<Model.Product> GetProductsByCondition(string condition)  
  7.         {  
  8.            return new DAL.ProductService().GetProductsByCondition(condition);  
  9.          
  10.         } 

根據ProjectItemID獲取一條記錄(封裝成對象)

  1. public Model.ProjectItem GetOneProjectItemByID(int ProjectItemID)  
  2.         {  
  3.             return new DAL.ProjectItemService().GetOneProjectItemByID(ProjectItemID);  
  4.         } 

增加一條記錄:

  1. /// <summary>  
  2.         /// 新增一條記錄 根據條件  
  3.         /// </summary>  
  4.         /// <param name="modelProject"></param>  
  5.         /// <returns></returns>  
  6.         public Model.Project AddPassCheckd(Model.Project modelProject)  
  7.         {  
  8.  
  9.             if (string.IsNullOrEmpty(modelProject.ProjectName))  
  10.             {  
  11.                 throw new Exception("項目名稱不能為空");  
  12.             }  
  13.             if (string.IsNullOrEmpty(modelProject.Customer))  
  14.             {  
  15.                 throw new Exception("顧客名稱不能為空");  
  16.             }  
  17.             if (string.IsNullOrEmpty(modelProject.Tel))  
  18.             {  
  19.                 throw new Exception("聯系電話不能為空");  
  20.             }  
  21.             if (modelProject.TransportCosts <= 0)  
  22.             {  
  23.                 throw new Exception("運輸費用不能為負數:(");  
  24.             }  
  25.             return new DAL.ProjectService().Add(modelProject);  
  26.              
  27.         } 

刪除一個項目:

  1. /// <summary>  
  2.         /// 刪除一個項目  
  3.         /// </summary>  
  4.         /// <param name="projectID"></param>  
  5.         /// <returns></returns>  
  6.         public bool DeleteProject(int projectID)  
  7.         {  
  8.              bool isSucceed=  new BLL.ProjectItemManager().DeleteProjectItemsByProjectID(projectID);  
  9.              isSucceed = new DAL.ProjectService().DeleteByID(projectID) > 0 && isSucceed;  
  10.              return isSucceed;  
  11.         } 

4.表現層(UI)

簡單的窗體里嵌套窗體:

  1. public void LoadProjectListForm()  
  2.         {  
  3.             projectListForm = null;  
  4.             if (projectListForm==null)  
  5.             {  
  6.                 projectListForm = new ProjectListForm();  
  7.             }  
  8.             //去掉邊框  
  9.             projectListForm.FormBorderStyle = FormBorderStyle.None;  
  10.             projectListForm.TopLevel = false;//窗體是否是頂級窗體  
  11.             projectListForm.Dock = DockStyle.Fill;//填充  
  12.             projectListForm.Show();//不寫看不到  
  13.             panelContainer.Controls.Clear();//清空  
  14.             panelContainer.Controls.Add(projectListForm);  
  15.         } 

綁定數據:

 我原先思路是直接在DataGridView里綁定對象的屬性,和GridView一樣使用,但一直無法綁上去,哪兒錯了?

 

 所以只能曲線救國了:
 

  1. void LoadData()  
  2.         {  
  3.             var list = new BLL.ProjectItemManager().GetAllProducts(projectID);  
  4.             //dataGridViewProjectItems.DataSource = list;//當控件被綁定時無法向其添加Row  
  5.             dataGridViewProjectItems.Rows.Clear();  
  6.             foreach (var model in list)  
  7.             {  
  8.                 int i = dataGridViewProjectItems.Rows.Add();  
  9.                 dataGridViewProjectItems.Rows[i].Cells["idColumn"].Value = model.ID;  
  10.                 dataGridViewProjectItems.Rows[i].Cells["specificationColumn"].Value = model._Product.Specification;  
  11.                 dataGridViewProjectItems.Rows[i].Cells["productNameColumn"].Value = model._Product.ProductName;  
  12.                 dataGridViewProjectItems.Rows[i].Cells["manufacturerColumn"].Value = model._Product.Manufacturer;  
  13.                 dataGridViewProjectItems.Rows[i].Cells["parametersColumn"].Value = model._Product.Parameters;  
  14.                 dataGridViewProjectItems.Rows[i].Cells["productIDColumn"].Value = model._Product.ID;  
  15.                 dataGridViewProjectItems.Rows[i].Cells["totalMoneyColumn"].Value = model.TotalMoney;  
  16.                 dataGridViewProjectItems.Rows[i].Cells["countColumn"].Value = model.Count;  
  17.                 dataGridViewProjectItems.Rows[i].Cells["unitPriceColumn"].Value = model.UnitPrice;  
  18.                 dataGridViewProjectItems.Rows[i].Cells["projectIDColumn"].Value = model._Project.ID;  
  19.             } 

5.項目總結

花了一個周末修修補補完成了這個工程報價系統,算是復習了一把三層架構。

如果有需要這個項目的朋友可以留下郵箱,我發給你,不算很專業,湊合著參考下~~

沒想到這么多朋友要我的源碼,我很感動。附件我就不傳了,我也怕誤導新人。有需要的朋友可以留下郵箱,大家一起探討,我的代碼純當入門階段,是我個人對三層架構的理解,不足之處,也請多多包涵,提個意見,希望與君互勉。想要更深刻探索我推介《ASP.NET 設計模式》

 

原文鏈接:http://www.cnblogs.com/OceanEyes/archive/2012/06/18/project.html

責任編輯:林師授 來源: 博客園
相關推薦

2011-04-19 13:53:41

三層架構

2013-09-22 14:42:55

鮑爾默微軟

2013-01-09 11:00:20

架構開發三層架構.NET架構

2009-08-26 18:20:42

三層架構

2009-07-28 17:25:14

ASP.NET三層結構

2011-08-08 14:14:03

架構

2012-02-03 09:44:33

.NET

2016-12-06 15:35:25

2009-04-30 15:56:50

三層架構MVCMVP

2009-07-28 15:08:50

MVC三層架構實例

2015-07-02 10:57:11

General框架架構開發

2018-10-31 14:32:53

數據中心網絡架構

2010-01-14 13:29:33

三層交換機特性

2018-03-08 15:30:31

超融合架構傳統三層架構

2015-05-25 15:15:53

浪潮

2014-03-13 14:17:05

Android手游速成

2012-08-02 11:05:04

系統建模架構

2009-05-06 09:40:04

LINQWEB開發構架

2012-02-07 10:40:13

MVCJava

2010-02-02 14:53:22

點贊
收藏

51CTO技術棧公眾號

欧美日韩成人影院| 精品成人一区二区三区免费视频| 欧美日韩国产在线一区| 亚洲第一男人av| av免费在线播放网站| 日本a级在线| jlzzjlzz亚洲日本少妇| 国产精品久久久91| 免费在线观看国产精品| 国产精品亚洲片在线播放| 91麻豆精品国产91久久久| 奇米精品一区二区三区| 日韩精品毛片| 久久综合五月天婷婷伊人| 国产精品一二三在线| 国产大片aaa| 91精品国产91久久综合| 亚洲美女av在线| 日本泡妞xxxx免费视频软件| 亚洲www啪成人一区二区| 亚洲国产综合91精品麻豆| 亚洲精品无人区| 天堂在线免费av| 国产伦精一区二区三区| 国产精品爽爽ⅴa在线观看| 日韩美女一级片| 亚洲精品tv久久久久久久久久| 亚洲色图狂野欧美| 中文字幕在线永久| 亚洲不卡视频| 欧美一区二区精美| 黄色一级片免费的| 电影亚洲一区| 在线看日本不卡| 内射国产内射夫妻免费频道| 中文字幕在线三区| 中文字幕一区在线观看| 日韩久久精品一区二区三区| 日韩在线免费播放| 99久久精品免费看国产| 91丝袜脚交足在线播放| 国产露脸国语对白在线| 麻豆精品新av中文字幕| 国产精品视频26uuu| 五月婷婷六月婷婷| 巨乳诱惑日韩免费av| 2018日韩中文字幕| 日韩欧美亚洲视频| 在线亚洲观看| 日韩av理论片| 国产精品露脸视频| 免费人成黄页网站在线一区二区| 国产精品jizz在线观看麻豆| 中文字幕在线播| 亚洲欧美清纯在线制服| 人体精品一二三区| 午夜一区二区三区四区| 视频一区中文字幕国产| 国产成人精品电影| 亚洲一区二区三区高清视频| 久久av资源网| 3d动漫精品啪啪一区二区三区免费| 国产又粗又猛又爽又黄91| 久久99精品国产.久久久久久| 成人精品久久av网站| 国产精品欧美亚洲| 国产一区二区三区免费在线观看| 亚洲一区二区三区视频播放| 99久久精品国产色欲| 国产69精品一区二区亚洲孕妇| 97人摸人人澡人人人超一碰| 成人免费公开视频| 久久综合久久综合亚洲| 日韩欧美视频一区二区| 欧美极品另类| 亚洲国产日韩精品| 青青青在线播放| 久久91超碰青草在哪里看| 欧美福利电影网| 欧美一级片在线免费观看| 欧美一级全黄| 色偷偷888欧美精品久久久| 综合五月激情网| 亚洲成人直播| 国产精品视频999| 亚洲精品一区二区口爆| 久久久国产精品午夜一区ai换脸| 亚洲精品成人自拍| 国产啊啊啊视频在线观看| 精品久久久视频| 久久人人爽av| 欧美国产极品| 日韩有码视频在线| 国产成人亚洲精品自产在线| 日本亚洲天堂网| 粉嫩av一区二区三区免费观看| 欧美孕妇孕交xxⅹ孕妇交| 中文字幕在线不卡国产视频| 国自产拍偷拍精品啪啪一区二区| 日韩三区免费| 亚洲国产精彩中文乱码av在线播放| 魔女鞋交玉足榨精调教| 亚洲xxx拳头交| 日韩美女视频在线观看| 国产成人av免费看| 国产日韩成人精品| 福利视频一区二区三区四区| 国产经典一区| 亚洲黄色成人网| 国产视频123区| 99日韩精品| 亚洲综合在线小说| av在线资源网| 日韩欧美大尺度| 久久久久亚洲av片无码v| 欧美日中文字幕| 欧美亚洲视频在线看网址| 国产三级漂亮女教师| 国产亚洲一区二区三区| 少妇高潮喷水在线观看| 视频一区视频二区欧美| 中文字幕av一区二区| 天堂在线免费观看视频| 国产成人小视频| 综合网五月天| 777午夜精品电影免费看| 亚洲精品美女在线观看播放| 青草草在线视频| 精品一区二区三区视频在线观看 | 国产性色一区二区| 国产在线播放观看| 亚洲日本一区二区三区在线| 色阁综合伊人av| 国产成人av免费| 国产亚洲综合在线| 欧美日韩亚洲一| 卡通动漫国产精品| 久久久久久久激情视频| 精品黑人一区二区三区国语馆| 国产精品久99| 欧美大片欧美激情性色a∨久久| 日本久久精品一区二区| 曰本一区二区三区视频| 97在线视频免费| 日韩在线观看视频一区| 亚洲一区在线免费观看| 亚洲精品久久久久久| 66视频精品| 99久久99久久| 蜜乳av一区| 337p日本欧洲亚洲大胆精品| 青娱乐免费在线视频| 粉嫩嫩av羞羞动漫久久久 | 日本视频在线免费观看| 欧美性视频一区二区三区| 国产精品美女高潮无套| 秋霞影院一区二区| 亚洲一区二区在| 福利一区三区| 欧美俄罗斯乱妇| 欧洲精品久久一区二区| 亚洲成人免费电影| 亚洲精品乱码久久久久久久| 性欧美xxxx大乳国产app| 欧美激情第六页| www.26天天久久天堂| 久久视频在线观看免费| 亚洲第一页综合| 精品女厕一区二区三区| 国产精品久久久久无码av色戒| 日本特黄久久久高潮| 黄色www在线观看| 最新精品在线| 庆余年2免费日韩剧观看大牛| 阿v免费在线观看| 日韩一区二区免费高清| 国产精品18p| 国产亚洲欧美日韩俺去了| 久久人人爽av| 亚洲三级免费| 天天爽天天狠久久久| 免费一级欧美在线大片| 38少妇精品导航| 欧美18一19xxx性| 精品国内片67194| 一级一级黄色片| 一区二区三区国产精品| 全黄一级裸体片| 韩国一区二区在线观看| 又粗又黑又大的吊av| 日韩一区二区三区免费播放| 亚洲一区二区少妇| 最新中文字幕在线播放| 久久久精品999| 天堂av中文在线资源库| 欧美高清你懂得| 一级片免费在线播放| 亚洲欧美日韩中文播放| 色噜噜在线观看| 国产精品自拍av| 一级黄色香蕉视频| 精品二区视频| 国产精品夜夜夜爽张柏芝| 日韩欧美在线精品| 亚洲va国产va天堂va久久| 亚洲国产福利| 久久久久久网站| 成人在线免费看片| 一区二区三区黄色| 欧美一级淫片免费视频魅影视频| 欧美日韩国产高清一区二区三区 | 超碰在线网址| 一区二区三区四区在线观看视频| 人妻无码中文字幕| 欧美一区二区日韩一区二区| av首页在线观看| 欧美日韩精品在线视频| 中文字幕在线有码| 国产精品美女一区二区| 国产精品扒开腿做爽爽| 菠萝蜜视频在线观看一区| 一区二区三区国产好的精华液| 久久久亚洲一区| 亚洲中文字幕无码专区| 国模 一区 二区 三区| 成人在线观看www| 成人毛片免费看| 日本一区二区在线视频观看| 欧美精品中文| 国产一区二区在线网站| 成人福利一区| 97久久夜色精品国产九色| 国产一区二区三区| 亚洲一区中文字幕| 国产精久久一区二区| 91色视频在线导航| 日韩毛片免费视频一级特黄| 国产精品人成电影| 国产a亚洲精品| 国产精品无av码在线观看| 欧美一级大黄| 国产精品av在线播放| 午夜激情成人网| 国产精品青草久久久久福利99| 日韩高清在线| 国产精品久久久久77777| 亚洲www.| 国产精自产拍久久久久久| 欧美freesex| 国产欧美 在线欧美| 国外成人福利视频| 成人啪啪免费看| 亚洲国产一区二区三区网站| 91久久极品少妇xxxxⅹ软件| 日韩一区二区三区精品| 国产精品swag| 日本欧美高清| 欧美一区1区三区3区公司 | 性色av香蕉一区二区| 成av人片在线观看www| 欧美性一区二区三区| 写真福利精品福利在线观看| 国产美女高潮久久白浆| 免费一区二区三区四区| 亚洲影院污污.| 精品少妇一区| 日韩精品资源| 婷婷综合久久| a级免费在线观看| 亚洲一区二区三区高清不卡| 熟女少妇精品一区二区| 另类的小说在线视频另类成人小视频在线 | 免播放器亚洲| 日本黄色福利视频| 成人免费高清在线观看| 九色porny自拍视频| 国产精品美女一区二区在线观看| 黄色一级片在线| 欧美丝袜第一区| 91久久精品国产91性色69| 日韩欧美一卡二卡| 免费动漫网站在线观看| 久久激情视频久久| 女人高潮被爽到呻吟在线观看| 国产精品扒开腿做爽爽爽视频| 91精品国产自产观看在线| 国产欧美一区二区视频| 日韩av片子| av网站手机在线观看| 蜜臀av性久久久久蜜臀aⅴ| wwwww在线观看| 国产欧美精品区一区二区三区| 人妻人人澡人人添人人爽| 欧美性xxxxxx| 精品人妻一区二区三区蜜桃| 亚洲欧洲一区二区三区久久| 国产写真视频在线观看| 热re99久久精品国产66热| 国产免费av国片精品草莓男男 | 日韩精品中文字幕第1页| 美女黄色免费看| 久久精品国产精品亚洲红杏 | 国产精品久久久久久久浪潮网站| 国产真实乱人偷精品视频| 欧美色欧美亚洲另类二区| 人妻少妇精品无码专区| 色久欧美在线视频观看| 牛牛精品一区二区| 国产成人精品日本亚洲11 | 在线免费看91| 日韩精品中文字幕久久臀| www在线免费观看视频| 国产精品极品美女在线观看免费| 国产乱人伦丫前精品视频| 视频一区二区视频| 男人操女人的视频在线观看欧美| 美女久久久久久久久| 亚洲另类在线制服丝袜| 中文字幕一区二区免费| 日韩精品免费在线| 蜜臀av在线| 亚洲free性xxxx护士hd| 色97色成人| 波多结衣在线观看| 久久看人人爽人人| 日韩在线观看第一页| 欧美大片国产精品| 成人影院在线观看| 国产欧美日韩丝袜精品一区| 亚洲系列另类av| 成人免费在线小视频| www.日本不卡| 国产午夜福利精品| 精品剧情在线观看| 永久免费网站在线| eeuss一区二区三区| 欧美影视一区| 一级片免费在线观看视频| 亚洲色图.com| 国产精品一级视频| 欧美插天视频在线播放| 成人av在线播放| 亚洲av首页在线| 国产成人午夜视频| 国产一级在线视频| 亚洲第一视频网站| 美女av在线免费看| 欧美日韩精品免费观看| 久久视频一区| 国产极品视频在线观看| 在线播放中文字幕一区| 米奇777四色精品人人爽| 成人午夜高潮视频| 欧美一区免费| 黄色免费视频网站| 午夜av电影一区| 精品视频三区| 国产美女高潮久久白浆| 一区二区三区在线观看免费| 国产吃瓜黑料一区二区| 午夜精品视频在线观看| 视频国产在线观看| 国产精品久久久久久久久久99| 青青草国产免费一区二区下载| 最新免费av网址| 一区二区高清免费观看影视大全| www久久久com| 欧美亚洲国产另类| 欧美在线免费看视频| 伊人国产精品视频| 亚洲地区一二三色| 国产精品一级伦理| 91夜夜揉人人捏人人添红杏| 亚洲成人资源| 国产传媒视频在线| 日韩欧美国产综合在线一区二区三区| 9999在线视频| 亚洲欧美日韩在线综合 | 国产日韩一区| 国产三级短视频| 精品国产a毛片| 日韩精品免费观看视频| 综合网五月天| 91麻豆123| 国产视频在线观看免费| 性欧美xxxx视频在线观看| heyzo久久| 最新日本中文字幕| 色欧美片视频在线观看在线视频| 伦xxxx在线| 久久亚洲一区二区| 九一久久久久久| 女人十八岁毛片| 久久久精品美女| 中文字幕亚洲影视| 久久久久久国产精品日本| 色www精品视频在线观看| 污视频在线看网站| 日韩在线导航| av日韩在线网站|