zoukankan      html  css  js  c++  java
  • 实验二:对试验一进行优化代码

    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类里面了,其它代码均未做修改,现在运行一下,看到如下结果表示你第一次优化成功:

    对比一下实验一和实验二的程序结构:

    实验一种,每个web form页面直接使用ADO.NET访问数据库。我们实验中只有一个显示产品列表的页面Listing.aspx,如果还有其它页面的话,也是和GetProducts()方法一样直接利用SqlConnection、SqlCommand等对象去数据库取数据。

    实验二中,我们增加了一个Repository类,将获取产品列表的代码放在Repository类里面了,程序的结构是:

    经过这样优化,我们在页面代码中,只需要调用Repository对象的属性Products,就可以得到产品列表了,如果页面2、页面3页需要产品列表的话,也是只要访问Repository的Products属性即可。

    思考一下:这样优化之后,好处是什么?(其实前面的解释中基本已经给出答案了,读者自己整理一下吧,别只会做伸手党)

  • 相关阅读:
    二,数据类型与流程控制语句
    一,cmd指令集与变量
    web第九天,浮动与定位
    web第八天,PS切图与float浮动
    web第七天,标签分类
    web第六天,CSS优先级与盒子模型
    web第五天复合样式与选择器
    web第四天,CSS基础
    web第三天 表单与css基础
    装饰器
  • 原文地址:https://www.cnblogs.com/bayes/p/6025971.html
Copyright © 2011-2022 走看看