PetShop4( 二 )


PetShop4

文章插图
随着PetShop版本的更新,其分层式结构也在不断的完善,例如PetShop2.0,就没有採用标準的三层式结构,如图三:图三:PetShop 2.0的体系架构
PetShop4

文章插图
从图中我们可以看到,并没有明显的数据访问层设计 。这样的设计虽然提高了数据访问的性能,但也同时导致了业务逻辑层与数据访问的职责混乱 。一旦要求支持的资料库发生变化,或者需要修改数据访问的逻辑,由于没有清晰的分层,会导致项目作大的修改 。而随着硬体系统性能的提高,以及充分利用快取、异步处理等机制,分层式结构所带来的性能影响几乎可以忽略不计 。PetShop3.0纠正了此前层次不明的问题,将数据访问逻辑作为单独的一层独立出来:图四:PetShop 3.0的体系架构
PetShop4

文章插图
PetShop4.0基本上延续了3.0的结构,但在性能上作了一定的改进,引入了快取和异步处理机制,同时又充分利用了ASP.Net 2.0的新功能MemberShip,因此PetShop4.0的系统架构图如下所示:图五:PetShop 4.0的体系架构
PetShop4

文章插图
比较3.0和4.0的系统架构图,其核心的内容并没有发生变化 。在数据访问层(DAL)中,仍然採用DAL Interface抽象出数据访问逻辑,并以DAL Factory作为数据访问层对象的工厂模组 。对于DAL Interface而言,分别有支持MS-SQL的SQL Server DAL和支持Oracle的Oracle DAL具体实现 。而Model模组则包含了数据实体对象 。其详细的模组结构图如下所示:图六:数据访问层的模组结构图
PetShop4

文章插图
可以看到,在数据访问层中,完全採用了“面向接口编程”思想 。抽象出来的IDAL模组,脱离了与具体资料库的依赖,从而使得整个数据访问层利于资料库迁移 。DALFactory模组专门管理DAL对象的创建,便于业务逻辑层访问 。SQLServerDAL和OracleDAL模组均实现IDAL模组的接口,其中包含的逻辑就是对资料库的Select,Insert,Update和Delete操作 。因为资料库类型的不同,对资料库的操作也有所不同,代码也会因此有所区别 。此外,抽象出来的IDAL模组,除了解除了向下的依赖之外,对于其上的业务逻辑层,同样仅存在弱依赖关係,如下图所示: 图七:业务逻辑层的模组结构图
PetShop4

文章插图
图七中BLL是业务逻辑层的核心模组,它包含了整个系统的核心业务 。在业务逻辑层中,不能直接访问资料库,而必须通过数据访问层 。注意图中对数据访问业务的调用,是通过接口模组IDAL来完成的 。既然与具体的数据访问逻辑无关,则层与层之间的关係就是鬆散耦合的 。如果此时需要修改数据访问层的具体实现,只要不涉及到IDAL的接口定义,那幺业务逻辑层就不会受到任何影响 。毕竟,具体实现的SQLServerDAL和OracalDAL根本就与业务逻辑层没有半点关係 。因为在PetShop 4.0中引入了异步处理机制 。插入订单的策略可以分为同步和异步,两者的插入策略明显不同,但对于调用者而言,插入订单的接口是完全一样的,所以PetShop 4.0中设计了IBLLStrategy模组 。虽然在IBLLStrategy模组中,仅仅是简单的IOrderStategy,但同时也给出了一个範例和信息,那就是在业务逻辑的处理中,如果存在业务操作的多样化,或者是今后可能的变化,均应利用抽象的原理 。或者使用接口,或者使用抽象类,从而脱离对具体业务的依赖 。不过在PetShop中,由于业务逻辑相对简单,这种思想体现得不够明显 。也正因为此,PetShop将核心的业务逻辑都放到了一个模组BLL中,并没有将具体的实现和抽象严格的按照模组分开 。所以表示层和业务逻辑层之间的调用关係,其耦合度相对较高:图八:表示层的模组结构图