现在的位置: 首页 > 综合 > 正文

PetShop4学习

2013年07月09日 ⁄ 综合 ⁄ 共 1647字 ⁄ 字号 评论关闭

PetShop4层次

1.Web呈现层   ASP.page对象

2.后台服务层   Cache的维护,及Cache中对象存取。是业务逻辑层的性能优化和扩充,不是关键。

3.业务逻辑层   返回对象集合(真正的业务逻辑类),封装对实例的增///改等操作,对这些方法的调用支撑系统运转。

4.元素对象层   定义系统中离散的对象实体,是业务逻辑层中集合类的基本元素。

5.数据访问层  分离出业务逻辑层中与数据库交互的方法封装为一个访问类,以便代码维护

 


策略模式:

类定义可以封装成员变量及方法,如果某些方法可能有不同的方式可以实现,那么这些方法应该从类定义中分离出来。虽然也可以为这些有差异行为的一组方法定义通用接口函数,但设计一个新类可以使条理更清晰,架构更灵活。如在BLL中声明的dal成员对象,即是一个操纵实例,所属类IDAL封装了与数据库交互相关的一组方法。

封装了这些“差异方法”(可能有不同方式工作的方法)的类,我称之为“操纵类”。操纵类实例作为主对象(原来的对象)的一个成员,相当于主对象应用了一组方法调用策略,调用操纵实例的方法,即相当于按策略中预定义的方式工作。通常一个主对象只能有一种行为方式,只能应用一个策略,包含一个操纵类实例。

如果需要为主对象实现(应用)不同的策略,就需改变操纵类实例。策略配置可以在配置文件中设置来实现,操纵实例可以由一个工厂类动态创建,步骤:

1.  首先为所有操纵类定义一个公共的接口类,如IDAL.ICategory

2.  然后分别定义具体操纵类,实现IDAL接口。为每一种策略都分别预定义了一组方法,这些方法在不同的策略中有不同的实现,但具有相同的函数签名。如SQLServerDAL.CategoryOracleDAL.Category

3.  在配置文件中配置装配件名称和操纵类名称;

4.  定义一个创建操纵实例(应用一组策略)的工厂类(策略管理),如PetShop.DALFactory.DataAccess

5.定义一个工厂类的静态方法CreateInstance()读取配置文件,利用反射在运行期动态创建并返回指定的操纵实例,如

    public static PetShop.IDAL.ICategory CreateCategory() {

            string className = path + ".Category";  //string path = ConfigurationManager.AppSettings["WebDAL"];

            return (PetShop.IDAL.ICategory)Assembly.Load(path).CreateInstance(className);

         }

6.  在原类中声明一个操纵实例成员变量,并用工厂类动态实例化,以应用一个策略。

PetShop.BLL.Category {static readonly ICategory dal = PetShop.DALFactory.DataAccess.CreateCategory(); }

7引用接口实例,调用接口成员函数。对象按我们预配置的一种策略工作。如dal.GetCategory(categoryId);

 

 

定义工厂类和公共接接口类仅是为了辅助动态创建操纵(策略)实例。

PetShop中多处应用策略模式这一程序设计技巧,简直用滥了。

PetShop巧妙地运用策略模式实现了数据访问层与业务逻辑层的分离。没有ORM映射,难以避免构造SQL语句时字符串处理。

好处:

1.架构灵活,逻辑清晰,方便维护。

2.易于扩展策略,派生公共接口类即可定义新策略。

3.结合配置文件,可以启用系统预置的策略,改变程序工作方式。须通过反射机制实现。

 

 

 

还没读过设计模式,Google一下,果真有“策略模式”这么一说,晕死。我一直认为所谓的“设计模式”就是一些面向对象编程的技巧,自己悟出来的设计技巧总比书上学的理论知识要好,所以至今没有阅读设计模式的书。

 


 


抱歉!评论已关闭.