我今天对PetSshop4的22个项目做了个摘要图,PetSshop4应用.net2.0的技术实现该购物解决方案。为了能够方便分析PetSshop4的项目中之间的关系,做个图备忘。
ëY³`
B¬wBnfhot.comÃ<)ÅpÄó
附件:
您所在的用户组无法下载或查看附件ëY³`
B¬wBnfhot.comÃ<)ÅpÄóPetShop4用的最多的就是简单的工厂模式。
ëY³`
B¬wBnfhot.comÃ<)ÅpÄó利用反射技术实现具体工厂类的--抽象产品接口--具体产品
ëY³`
B¬wBnfhot.comÃ<)ÅpÄóëY³`
B¬wBnfhot.comÃ<)ÅpÄó里面提到了两个比较重要的模式
ëY³`
B¬wBnfhot.comÃ<)ÅpÄó1、策略模式(该模式适用于一个功能可以通过多种方法实现的时候使用该模式):在该解决方案的订单处理中,处理过程有直接操作数据库的同步订单和消息队列方式的异步订单的订单处理方法,所以利用了策略模式来解决问题。
ëY³`
B¬wBnfhot.comÃ<)ÅpÄó该策略模式的调用过程主要是插入订单过程,IBLLStrategy项目的接口类仅仅实现了一个insert方法的接口。然后BLL项目中的OrderSynchronous和OrderAsychronous类实现该接口的方法(因为一个是同步的需要直接操作数据库,一个需要操作消息队列的插入订单方法,所以分别调用了不通的订单插入的工厂类,实现插入订单insert方法),然后BLL项目中的Order类,在插入订单操作时,根据WEB.CONFIG中的参数不同,利用反射技术实现返回IBLLStrategy项目的接口类实例,来实现调用同步还是异步的订单插入。
ëY³`
B¬wBnfhot.comÃ<)ÅpÄóëY³`
B¬wBnfhot.comÃ<)ÅpÄó2、外观模式(该模式应该属于表示层了,因为他直接服务于表示层):我总结的是,外观模式就是直接调用具体产品实例的方法,获取相关对象,然后方便表示层的使用而已,所以称之为外观模式。
ëY³`
B¬wBnfhot.comÃ<)ÅpÄó 在PetShop4中的缓存依赖就是典型的外观模式;
ëY³`
B¬wBnfhot.comÃ<)ÅpÄó 1、首先创建一个返回AggregateCacheDependency对象的一个接口方法
ëY³`
B¬wBnfhot.comÃ<)ÅpÄó 2、
然后在具体产品类中,取出该产品类的共性部分,抽象一个类,改抽象类实现并集成上边的接口。首先该类构造函数实现根据参数及web.config文件的配置参数,来实现AggregateCacheDependency对象,并有实现的接口方法返回。
ëY³`
B¬wBnfhot.comÃ<)ÅpÄó 最终产品类,集成该抽象类,不同产品类使用不同参数,并调用该基类的构造函数,传递特定参数。
ëY³`
B¬wBnfhot.comÃ<)ÅpÄó 3、然后静态的具体工厂类中通过反射依赖技术实现各个具体产品的实例。(
这里已经可以调用各个实例的方法返回AggregateCacheDependency对象了,但是如果直接调用的话,1、是调用的代码太长,2、是如果共性部分的抽象类的方法名称有所改变,哪就要改各个地方的调用部分,高耦合。)所以就有了下边的外观模式的类。
ëY³`
B¬wBnfhot.comÃ<)ÅpÄó 4、
外观模式类,这里实现了几个类似的方法,首先判断了web.config文件中的配置参数是否存在,然后分别通过调用简单工厂类的具体产品实例的方法返回相应的AggregateCacheDependency对象。ëY³`
B¬wBnfhot.comÃ<)ÅpÄó 这样就可以在调用的时候直接调用外观模式相应的方法即可得到相应的缓存依赖对象了。ëY³`
B¬wBnfhot.comÃ<)ÅpÄó简单工厂类的实现步骤是:
ëY³`
B¬wBnfhot.comÃ<)ÅpÄó1、创建抽象产品类接口(其中包含返回业务实体类的方法)
ëY³`
B¬wBnfhot.comÃ<)ÅpÄó2、实现接口的具体产品类
ëY³`
B¬wBnfhot.comÃ<)ÅpÄó3、根据配置文件得到相应项目程序集合类的路径。利用反射技术实现返回抽象产品类接口对象的产品实例。
ëY³`
B¬wBnfhot.comÃ<)ÅpÄó4、具体应用中,调用工厂类的方法返回接口类型实例。通过该实例对象的方法做相应的功能实现。
ëY³`
B¬wBnfhot.comÃ<)ÅpÄó5、表现出利用4的实现数据绑定显示数据
ëY³`
B¬wBnfhot.comÃ<)ÅpÄó