菜鸟学PetShop一

  category

BLL 中声明了一个 ICATEGORY 对象,
private static readonly ICategory dal = PetShop.DALFactory.DataAccess.CreateCategory();
声明了一个实例,调用的是DALFactory中的CreateCategory()方法。
然后下面用了泛形的方法。
public IList<CategoryInfo> GetCategories() {
            return dal.GetCategories();
        }
将类型转化为CategoryInfo类型的方法。
而dal实际上是哪个类的实例呢,就得看createCategory()
定义如下:
public static PetShop.IDAL.ICategory CreateCategory() {
            string className = path + ".Category";
            return (PetShop.IDAL.ICategory)Assembly.Load(path).CreateInstance(className);
        }
(PetShop.IDAL.ICategory)Assembly.Load(path).CreateInstance(className); 这句话据说是利用反射创建了一个实例。
而path是什么呢。找一下web.config就可以了。
private static readonly string path = ConfigurationManager.AppSettings["WebDAL"];
找一下WEBDAL就可以了。
< add key = "WebDAL"value="PetShop.SQLServerDAL"/>
所以path就得出来了,看className的值吧。
className=PetShop.SQLServerDAL.Category
于是 return dal.GetCategories(); 这句话返回的是className的实例,而方法就是这个类中的方法,并把返回类型转化为<CategoryInfo>类型。细看一下这个类下面的这个方法的定义。
   public IList<CategoryInfo> GetCategories() {
           IList<CategoryInfo> categories = new List<CategoryInfo>();
            //Execute a query to read the categories
using (SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_CATEGORIES, null)) {
                while (rdr.Read()) {
                    CategoryInfo cat = new CategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2));
                    categories.Add(cat);
                }
            } 
            return categories;
        }
这个里面又牵涉到了SqlHelper的内容,
SqlHelper 位于Dbutility中用来对数据库进行操作,先看一下SqlHelper.ConnectionStringLocalTransaction的内容是什么,肯定是一个静态的变量public static readonly string ConnectionStringLocalTransaction = ConfigurationManager.ConnectionStrings["SQLConnString1"].ConnectionString;可见又是放在web.config中间了,找找看,只找到这么一句并没有找到连接字符串。<addname="MSPetShop4"connectionStringName="SQLConnString1"pollTime="10000"/>再找找
<add name="SQLConnString1" connectionString="server=.;database=MSPetShop4;user id=mspetshop;password=pass@word1;min pool size=4;max pool size=4;"
   providerName="System.Data.SqlClient" />
找到了,操作是数据库MSPetShop4 原来微软还把web.config给加密了,不过也提供了一个解密工具,DecryptWebConfig.bat,于是一切都明了了。 SQL_SELECT_CATEGORIES 是声明的一个字符串常量,private const string SQL_SELECT_CATEGORIES = "SELECT CategoryId, Name, Descn FROM Category";
一切又来到了 return dal.GetCategories(); 再看看外面如何与BLL联系吧。
在NavigationControl.ascx自定义控件中绑定了category方法如下:
   private void BindCategories() {
            Category category = new Category();
            repCategories.DataSource = category.GetCategories();
            repCategories.DataBind();           
        }
于是总算完了绑定种类到repeater控件上。这里面共牵涉到几个项目如下:
BLL,SQLserverDAL,DButility,Model,IDAL,DALFACTORY
关键是系统架构和代码习两方面,对初和提高有很大帮助 petshop5.0比较大,代码已经解压出来 4.0和3.0没有解压出来,自行安装解压(需要SqlServer数据做连接或者在安装到数据库连接时直接拷贝出来) petshop5.0 基于.NET Framework 3.5 ------------ 使用LINQ to SQL改进数据访问层 PetShop.Model.DataContext.MSPetShop4DataContext 继承System.Data.Linq.DataContext PetShop.Model.ProductInfo与PetShop.Model.CategoryInfo实体类分别映射数据库PetShop.Model.ProductInfo其中的Category属性存在一对一的关系 PetShop.Model.CategoryInfo中的Products属性存在一对多的关系 使用WCF来提供RSS, web/FeedService.svc目录下 PetShop.SyndicationFeeds 并在UI层上做一些改进,如使用ASP.NET AJAX,ListView控件等。 在PetShop 5.0中引入了异步处理机制。 插入订单的策略可以分为同步和异步,两者的插入策略明显不同,但对于调用者而言,插入订单的接口是完全一样的,所以PetShop 5.0中设计了IBLLStrategy模块。 虽然在IBLLStrategy模块中,仅仅是简单的IOrderStategy,但同时也给出了一个范例和信息,那就是在业务逻辑的处理中,如果存在业务操作的多样化,或者是今后可能的变化,均应利用抽象的原理。或者使用接口,或者使用抽象类,从而脱离对具体业务的依赖。 不过在PetShop中,由于业务逻辑相对简单,这种思想体现得不够明显。 也正因为此,PetShop将核心的业务逻辑都放到了一个模块BLL中,并没有将具体的实现和抽象严格的按照模块分开。所以表示层和业务逻辑层之间的调用关系,其耦合度相对较高: PetShop4.0源代码 .NET Pet Shop4 应用程序的设计说明了构建企业 n 层 .NET 2.0 应用程序的最佳做法,这种应用程序可能需要支持各种数据库平台和部署方案。 .NET Pet Shop 4 项目的目标是: 工作效率:减少了 .NET Pet Shop 3 的代码数量 - 我们减少了近 25% 的代码。 利用 ASP.NET 2.0 的新功能 - 我们利用母版页、成员身份和配置文件,并设计出一个新的、吸引人的用户界面。 企业体系结构:构建一个灵活的最佳做法应用程序 - 我们实现了设计模式,以及表示层、业务层和数据层的分离。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值