PetShop4


PetShop4

文章插图
PetShop4【PetShop4】PetShop是一个範例,微软用它来展示 。Net企业系统开发的能力 。业界有许多 。Net与J2EE之争,许多数据是从微软的PetShop和Sun的PetStore而来 。
基本介绍软体名称:PetShop4
开发商:微软
这种争论不可避免带有浓厚的商业色彩,对于我们开发人员而言,没有必要过多关注 。然而PetShop随着版本的不断更新,至现在基于.Net 2.0的PetShop4.0为止,整个设计逐渐变得成熟而优雅,却又很多可以借鉴之处 。PetShop是一个小型的项目,系统架构与代码都比较简单,却也凸现了许多颇有价值的设计与开发理念 。本系列试图对PetShop作一个全方位的解剖,依据的代码是PetShop4.0,可以从连结http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/bdasamppet4.asp中获得 。
PetShop4

文章插图
一、PetShop的系统架构设计在软体体系架构设计中,分层式结构是最常见,也是最重要的一种结构 。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或成为领域层)、表示层,如图所示:图一:三层的分层式结构数据访问层:有时候也称为是持久层,其功能主要是负责资料库的访问 。简单的说法就是实现对数据表的Select,Insert,Update,Delete的操作 。如果要加入ORM的元素,那幺就会包括对象和数据表之间的mapping,以及对象实体的持久化 。在PetShop的数据访问层中,并没有使用ORM,从而导致了代码量的增加,可以看作是整个设计实现中的一大败笔 。业务逻辑层:是整个系统的核心,它与这个系统的业务(领域)有关 。以PetShop为例,业务逻辑层的相关设计,均和网上宠物店特有的逻辑相关,例如查询宠物,下订单,添加宠物到购物车等等 。如果涉及到资料库的访问,则调用数据访问层 。表示层:是系统的UI部分,负责使用者与整个系统的互动 。在这一层中,理想的状态是不应包括系统的业务逻辑 。表示层中的逻辑代码,仅与界面元素有关 。在PetShop中,是利用ASP.Net来设计的,因此包含了许多Web控制项和相关逻辑 。分层式结构究竟其优势何在?Martin Fowler在《Patterns of Enterprise Application Architecture》一书中给出了答案:1、开发人员可以只关注整个结构中的其中某一层;2、可以很容易的用新的实现来替换原有层次的实现;3、可以降低层与层之间的依赖;4、有利于标準化;5、利于各层逻辑的复用 。概括来说,分层式设计可以达至如下目的:分散关注、鬆散耦合、逻辑复用、标準定义 。一个好的分层式结构,可以使得开发人员的分工更加明确 。一旦定义好各层次之间的接口,负责不同逻辑设计的开发人员就可以分散关注,齐头并进 。例如UI人员只需考虑用户界面的体验与操作,领域的设计人员可以仅关注业务逻辑的设计,而资料库设计人员也不必为繁琐的用户互动而头疼了 。每个开发人员的任务得到了确认,开发进度就可以迅速的提高 。鬆散耦合的好处是显而易见的 。如果一个系统没有分层,那幺各自的逻辑都紧紧纠缠在一起,彼此间相互依赖,谁都是不可替换的 。一旦发生改变,则牵一髮而动全身,对项目的影响极为严重 。降低层与层间的依赖性,既可以良好地保证未来的可扩展,在复用性上也是优势明显 。每个功能模组一旦定义好统一的接口,就可以被各个模组所调用,而不用为相同的功能进行重複地开发 。进行好的分层式结构设计,标準也是必不可少的 。只有在一定程度的标準化基础上,这个系统才是可扩展的,可替换的 。而层与层之间的通信也必然保证了接口的标準化 。“金无足赤,人无完人”,分层式结构也不可避免具有一些缺陷:1、降低了系统的性能 。这是不言而喻的 。如果不採用分层式结构,很多业务可以直接造访资料库,以此获取相应的数据,如今却必须通过中间层来完成 。2、有时会导致级联的修改 。这种修改尤其体现在自上而下的方向 。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码 。前面提到,PetShop的表示层是用ASP.Net设计的,也就是说,它应是一个BS系统 。在.Net中,标準的BS分层式结构如下图所示:图二:.Net中标準的BS分层式结构