码迷,mamicode.com
首页 > 其他好文 > 详细

实验二:对试验一进行优化代码

时间:2016-11-03 14:02:02      阅读:299      评论:0      收藏:0      [点我收藏+]

标签:自己   security   store   gets   rip   www   命名   读取   return   

1.使用自动类型推断和对象初始化器优化代码

自动类型推断和初始化器的语法知识请参考【Asp.net入门2-01】C#基本功能

在实验一中,打开Listing.aspx.cs文件,修改GetProducts()方法:

 1         protected IEnumerable<Product> GetProducts()
 2         {
 3             IList<Product> products = new List<Product>();
 4 
 5             var sql = "select ProductID,Name,Description,Category,Price from Products";
 6             var con = new SqlConnection("Data Source=.;Initial Catalog=SportsStore;Integrated Security=True");
 7             var cmd = new SqlCommand(sql, con);
 8             SqlDataReader dr;
 9 
10             con.Open();
11             dr = cmd.ExecuteReader();
12             while (dr.Read())
13             {
14                 var prod = new Product
15                 {
16                     ProductID = dr.GetInt32(0),
17                     Name = dr.GetString(1),
18                     Description = dr.GetString(2),
19                     Category = dr.GetString(3),
20                     Price = dr.GetDecimal(4)
21                 };
22                 products.Add(prod);
23             }
24             return products;
25         }

其中,第5、6、7行使用了自动类型推断。第14-21使用了初始化器技术。试用了初始化器,代码比实验一中的代码优雅得多。

2.添加Repository类,将数据操作从页面分离

实验一中,GetProducts()方法里直接使用ADO.NET去访问数据库,试想一下,如果在另外一个页面ProductManage.aspx(如产品管理页面)中也要读取产品列表,那么我们不得不在ProductManage.aspx页面中将上面的代码重新写一遍。同样的代码在程序里多次重复地写,很明显这是不可取的。现在我们不该面功能,只对代码的表现形式重新调整一下。

首先,在SportsStoreEx网站中新增加一个类:Repository。(这里我就不再讲如何给项目添加类了)。添加完之后,项目是这样的:

技术分享

第二步:编写Repository类的代码

打开Repository.cs文件,添加代码如下:

 1 using System.Collections.Generic;
 2 using System.Data.SqlClient;
 3 
 4 namespace SportStoreEx
 5 {
 6     public class Repository
 7     {
 8         public IEnumerable<Product> Products
 9         {
10             get
11             {
12                 IList<Product> products = new List<Product>();
13 
14                 var sql = "select ProductID,Name,Description,Category,Price from Products";
15                 var con = new SqlConnection("Data Source=.;Initial Catalog=SportsStore;Integrated Security=True");
16                 var cmd = new SqlCommand(sql, con);
17                 SqlDataReader dr;
18 
19                 con.Open();
20                 dr = cmd.ExecuteReader();
21                 while (dr.Read())
22                 {
23                     var prod = new Product
24                     {
25                         ProductID = dr.GetInt32(0),
26                         Name = dr.GetString(1),
27                         Description = dr.GetString(2),
28                         Category = dr.GetString(3),
29                         Price = dr.GetDecimal(4)
30                     };
31                     products.Add(prod);
32                 }
33                 return products;
34             }
35         }
36     }
37 }

注意第1、2行将命名空间引用到本文件中来,不引用的话,IEnumerable和SqlConnection等类就没法用。

这样,只要访问Repository类的Products属性,就可以得到数据库Products表中的所有数据了。

3.修改Listing.aspx.cs文件中GetProducts()方法

现在GetProducts()方法里不用自己亲自去数据库读数据了,直接向Repository类对象要Products属性就OK啦!

protected IEnumerable<Product> GetProducts()
{
    Repository repository = new Repository();
    return repository.Products;
}

4.第一次运行优化后的代码

经过前3个步骤,我们将访问数据的代码移植到Repository类里面了,其它代码均未做修改,现在运行一下,看到如下结果表示你第一次优化成功:

技术分享

5.

 

实验二:对试验一进行优化代码

标签:自己   security   store   gets   rip   www   命名   读取   return   

原文地址:http://www.cnblogs.com/bayes/p/6025971.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!