深入研究Petshop基础篇

来源:互联网 发布:java把值存入数组 编辑:程序博客网 时间:2024/06/06 12:58

上节课,我们基本完成了default.aspx和Products.aspx的页面。从数据角度看,完成了Category数据的加载,上次我们直接从数据库中读出,用的是传统方法,下面我们将深入研究Pethsop的实现机制,并尽量讲究其原因。


1、  首先看看Pethsop中如何实现Category绑定的?
1)在NavigationControl.ascx.cs文件中,

  1. Category category = new Category();
  2. repCategories.DataSource = category.GetCategories();

首先是实例化了一个Petshop.BLL.Category类,然后是使用了Category类中GetCategories()方法来形成一个IList的集合,作为绑定的数据源。
2)我们再来看Petshop.BLL.Category类,里面有两个方法,一个是GetCategories()用来实现得到所有Categore所有信息,另一个是GetCategory(string categoryId)用来得到特定Categore信息,所不同的是类型有所不同,一个是IList类型,这种类型是希望隔离数据模型时,系统中没有表、记录的概念,除数据访问层外都以对象做为数据载体来使用,而另一个是CategoryInfo类型,GetCategory(string categoryId)方法主要通过categoryId来得到这个CategoryInfo。需要注意的是,用了下面代码:

  1. // Get an instance of the Category DAL using the DALFactory
  2. // Making this static will cache the DAL instance after the initial load
  3.         private static readonly ICategory dal = PetShop.DALFactory.DataAccess.CreateCategory();

用的是DALFactory,这部分主要是反射作用,是通过WebConfig来映射到那类数据库。在这里用到DataAccess类中的CreateCategory()方法。
3)我们再看Petshop.DALFactory.DataAccess类。这个类是通过WebConfig来找到那类数据库。先有一个变量path,path的作用是从WebConfig中读取命名空间PetShop.SQLServerDAL,通过这个定位到PetShop.SQLServerDAL.Category类中。接下来,我们看CreateCategory():

  1. public static PetShop.IDAL.ICategory CreateCategory() {
  2.             string className = path + ".Category";
  3.             return (PetShop.IDAL.ICategory)Assembly.Load(path).CreateInstance(className);
  4.         }

使用了Assembly.Loa(path).CreateInstance(className),这里使用的C#的反射,作用是在程序运行时动态创建对象,这里是创建了PetShop.SQLServerDAL.Category对象。
4)我们再看PetShop.SQLServerDAL.Category类。这个类中GetCategories()方法是从PetShop.IDAL. ICategory接口来的,这个方法是从数据库中读取数据,那这个方法哪里用到呢,真正用到是在PetShop.BLL.Category的return dal.GetCategories()。这个函数中,用了一个using,这个用于定义一个范围,在此范围的末尾将释放对象,也就是用DataReader,最后要释放的。再这个函数中SqlHelper类,用来ExecuteReader函数来得到DataReader的值,然后Add到IList<CategoryInfo> categories中。
2、  我们学到了什么?
1)  这里我们学到IList集合作为数据源的方法
2)  学习了反射作用的机理,通过反射我们知道了如何切换到不同数据库的
3)  知道了接口这个东西如何实现的
4)  还知道了using用于语言的作用。
原创粉丝点击