petshop4.0设计说明 一、项目名称及描述:(实现步骤为:4-3-6-5-2-1) 1、WEB=表示层 2、BLL=业务逻辑层 3、IDAL=数据访问层接口定义 4、Model=业务实体 5、DALFactory=数据层的抽象工厂(创建反射) 6、SQLServerDAL=SQLServer数据访问层 / OracleDAL=Oracle数据访问层 DBUtility 数据库访问组件基础类 二、项目引用关系 1、Web 引用 BLL。 2、BLL 引用 IDAL,Model,使用DALFactory创建实例。 3、IDAL 引用 Model 4、Model 无引用。 5、DALFactory 引用IDAL,通过读取web.config里设置的程序集,加载类的实例,返回给BLL使用 6、SQLServerDAL 引用 Model和IDAL,被DALFactory加载的程序集,实现接口里的方法。 三、实现步骤 1、创建Model,实现业务实体。 2、创建IDAL,实现接口 3、创建SQLServerDAL,实现接口里的方法 4、增加web.config里的配置信息,为SQLServerDAL的程序集 5、创建DALFactory,返回程序集的指定类的实例。 6、创建BLL,调用DALFactory,得到程序集指定类的实例,完成数据操作方法 7、创建WEB,调用BLL里的数据操作方法。 注意 1、web.config里的程序集名称必须与SQLServerDAL里的输出程序集名称一致 2、DALFactory里只需要一个DataAccess类,可以完成创建所有的程序集实例。 3、项目创建后,注意修改各项目的默认命名空间和程序集名称 <p>4、注意修改解决方案里的项目依赖。 </p> <p>5、注意在解决方案里增加各项目引用。</p> |
刚开始打开PetShop项目的时候,我们未免会被如此多的项目吓一跳,不过只要用心的去分析,看懂它并不是非常难的事。 首先我们来看一下WEB项目,因为我们做WEB应用程序首先想到的就是看看页面是怎么实现的,然后一路追溯下去,直到看明白程序是如何把数据显示到页面和如何处理页面的数据的。 比如说首页吧,Default.aspx,我们看到首页很简单,大多数是静态的,只显示了一个Categories菜单,下面是对应的HTML代码 <PetShopControl:NavigationControl ID="Categories" runat="server"></PetShopControl:NavigationControl> 而这些PetShopControl,NavigationControl标签是什么呢,我们可以在页面HTML代码的上方看到一行 <%@ Register Src="Controls/NavigationControl.ascx" TagName="NavigationControl" TagPrefix="PetShopControl" %> 指令,通过这行指令我们可以看到Categories菜单是通过NavigationControl.ascx用户控件实现的 那好,我们现在就来打开 NavigationControl.ascx ,NavigationControl.ascx 里面有一个Repeater控件,然后我们来看看NavigationControl.ascx的后台代码NavigationControl.ascx.cs 页面初绐化Page_Load调用两个函数GetControlStyle();BindCategories(); 其中GetControlStyle()是为了实现菜单在首页和其它页面显示不同的风格,BindCategories()方法就是绑定数据了。 BindCategories() { Category category = new Category(); repCategories.DataSource = category.GetCategories(); repCategories.DataBind(); } 在BindCategories()方法中有个类Category,Category是在BLL项目中实现的,我们可以单击右键点转到定义快速的找到它,category.GetCategories()方法我们也可以快速的找到它的定义 表现层到这就转到业务层了,现在我们来看看业务层如何实现Category类,业务层的GetCategories()方法实现如下 public IList<CategoryInfo> GetCategories() { return dal.GetCategories(); } 而变量 dal 在类中有定义 private static readonly ICategory dal = PetShop.DALFactory.DataAccess.CreateCategory(); 然后我们再看到PetShop.DALFactory.DataAccess.CreateCategory() 在DataAccess类的CreateCategory()方法中我们所看到的并没有具体的数据操作,取而代之的是 string className = path + ".Category"; return (PetShop.IDAL.ICategory)Assembly.Load(path).CreateInstance(className); 我们可以看到 path 的定义 private static readonly string path = ConfigurationManager.AppSettings["WebDAL"]; path是WEB.config中定义的WebDAL节点值,我们来看看Web.config中的WebDAL值,如果装的是SQL数据库的话应该是 “PetShop.SQLServerDAL” 原来语句“Assembly.Load(path).CreateInstance(className)”就是通过Web.config配置来实例化PetShop.SQLServerDAL集合中的Category类,然后我们才在PetShop.SQLServerDAL.Category看到方法GetCategories()的具体实现 但是何必运用如此烦杂的步骤来实现对数据的操作呢,细想一下,不同的用户有不同的数据库,例如我们可以使用SQL SERVER,也可以使用Oracle数据库,为了轻松的实现对不同数据库的访问而不修改业务层,降低各层之间的偶合,所以PetShop运用了设计模式中的抽象工厂模式Factory,而为什么表现层和业务层之间不需要这样做,因为业务层的业务规则一般都是固定的,所以没必要写几个业务层,如果应用程序中的业务层是时常变动的,或开发的是通用的WEB应用程序,针对不同的企业有不同的业务层,而表现层却一样,也可以运用抽象工厂模式。 PetShop的整体架构就是这样子了,可以说这是经典的三层架构啦!! 由于整体已经有22个项目,所以,对于初学者一看就晕了,所以,我做了分解,可以大体上分几块去理解。
|
原文地址:http://hi.baidu.com/kxlf4600/blog/item/7bf5934576679d25cefca367.html