实验二:对试验一进行优化代码
2016-11-03 11:47
302 查看
1.使用自动类型推断和对象初始化器优化代码
(自动类型推断和初始化器技术介绍请参考【Asp.net入门2-01】C#基本功能)
在实验一中,打开Listing.aspx.cs文件,修改GetProducts()方法:
其中,第5、6、7行使用了自动类型推断。第14-21使用了初始化器技术。代码比实验一中的代码优雅得多。
2.添加Repository类,将数据操作从页面分离
实验一中,GetProducts()方法里直接使用ADO.NET去访问数据库,试想一下,如果在另外一个页面ProductManage.aspx(如产品管理页面)中也要读取产品列表,那么我们不得不在ProductManage.aspx页面中将上面的代码重新写一遍。同样的代码在程序里多次重复地写,很明显这是不可取的。现在我们不该面功能,只对代码的表现形式重新调整一下。
首先,在SportsStoreEx网站中新增加一个类:Repository。(这里我就不再讲如何给项目添加类了)。添加完之后,项目是这样的:
第二步:编写Repository类的代码
打开Repository.cs文件,添加代码如下:
注意第1、2行是将相应的命名空间引用到本文件中来,不引用的话,IEnumerable和SqlConnection等类就没法用。
这样,只要访问Repository类的Products属性,就可以得到数据库Products表中的所有数据了。
3.修改Listing.aspx.cs文件中GetProducts()方法
现在GetProducts()方法里不用自己亲自去数据库读数据了,直接向Repository类对象要Products属性就OK啦!
4.第一次运行优化后的代码
经过前3个步骤,我们将访问数据的代码移植到Repository类里面了,其它代码均未做修改,现在运行一下,看到如下结果表示你第一次优化成功:
对比一下实验一和实验二的程序结构:
实验一种,每个web form页面直接使用ADO.NET访问数据库。我们实验中只有一个显示产品列表的页面Listing.aspx,如果还有其它页面的话,也是和GetProducts()方法一样直接利用SqlConnection、SqlCommand等对象去数据库取数据。
实验二中,我们增加了一个Repository类,将获取产品列表的代码放在Repository类里面了,程序的结构是:
经过这样优化,我们在页面代码中,只需要调用Repository对象的属性Products,就可以得到产品列表了,如果页面2、页面3页需要产品列表的话,也是只要访问Repository的Products属性即可。
思考一下:这样优化之后,好处是什么?(其实前面的解释中基本已经给出答案了,读者自己整理一下吧,别只会做伸手党)
(自动类型推断和初始化器技术介绍请参考【Asp.net入门2-01】C#基本功能)
在实验一中,打开Listing.aspx.cs文件,修改GetProducts()方法:
protected IEnumerable<Product> GetProducts() { IList<Product> products = new List<Product>(); var sql = "select ProductID,Name,Description,Category,Price from Products"; var con = new SqlConnection("Data Source=.;Initial Catalog=SportsStore;Integrated Security=True"); var cmd = new SqlCommand(sql, con); SqlDataReader dr; con.Open(); dr = cmd.ExecuteReader(); while (dr.Read()) { var prod = new Product { ProductID = dr.GetInt32(0), Name = dr.GetString(1), Description = dr.GetString(2), Category = dr.GetString(3), Price = dr.GetDecimal(4) }; products.Add(prod); } return products; }
其中,第5、6、7行使用了自动类型推断。第14-21使用了初始化器技术。代码比实验一中的代码优雅得多。
2.添加Repository类,将数据操作从页面分离
实验一中,GetProducts()方法里直接使用ADO.NET去访问数据库,试想一下,如果在另外一个页面ProductManage.aspx(如产品管理页面)中也要读取产品列表,那么我们不得不在ProductManage.aspx页面中将上面的代码重新写一遍。同样的代码在程序里多次重复地写,很明显这是不可取的。现在我们不该面功能,只对代码的表现形式重新调整一下。
首先,在SportsStoreEx网站中新增加一个类:Repository。(这里我就不再讲如何给项目添加类了)。添加完之后,项目是这样的:
第二步:编写Repository类的代码
打开Repository.cs文件,添加代码如下:
using System.Collections.Generic; using System.Data.SqlClient; namespace SportStoreEx { public class Repository { public IEnumerable<Product> Products { get { IList<Product> products = new List<Product>(); var sql = "select ProductID,Name,Description,Category,Price from Products"; var con = new SqlConnection("Data Source=.;Initial Catalog=SportsStore;Integrated Security=True"); var cmd = new SqlCommand(sql, con); SqlDataReader dr; con.Open(); dr = cmd.ExecuteReader(); while (dr.Read()) { var prod = new Product { ProductID = dr.GetInt32(0), Name = dr.GetString(1), Description = dr.GetString(2), Category = dr.GetString(3), Price = dr.GetDecimal(4) }; products.Add(prod); } return products; } } } }
注意第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属性即可。
思考一下:这样优化之后,好处是什么?(其实前面的解释中基本已经给出答案了,读者自己整理一下吧,别只会做伸手党)
相关文章推荐
- C#与.NET程序员面试宝典 2.2.2 面试题9:如何使用实时编译进行代码优化
- 【转】[Android] Android开发优化之——从代码角度进行优化
- 从代码角度进行优化的技巧
- Android开发优化之——从代码角度进行优化
- 空调系统进行优化控制试验方案
- [Android] Android开发优化之——从代码角度进行优化
- 解析Android开发优化之:从代码角度进行优化的技巧
- java性能优化开发之--循环内进行代码控制
- 用选择的方式对数组进行排序,并写出对应的优化后的代码实现。(重点写思路、原理)
- 借助weka实现的分类器进行针对文本分类问题的特征词选择实验(实验代码备份)
- JavaScript代码进行优化
- 单调队列优化DP能到什么程度(今天中午进行的实验记录)
- 工作笔记总结——使用sonar进行代码优化
- [Android] Android开发优化之——从代码角度进行优化
- MySQL 分表优化试验代码
- 对查找进行优化实例代码:
- [Android] Android开发优化之——从代码角度进行优化
- Android开发优化之——从代码角度进行优化(转载)
- Android开发优化之——从代码角度进行优化