PetShop是MS用来展示.Net企业级系统开发能力的一个范例。
伴随着.NET Framework,PetShop的版本也在不断更新,目前可供下载的是基于.Net 2.0的PetShop4.0,它虽是一个小型的项目,系统架构与代码都比较简单,却也凸现了许多颇有价值的设计与开发理念。这也是我为什么选择PetShop作为NBear的一个案例的初衷,大家可以发现在采用了NBear后,系统架构更加简洁和灵活,代码量也显着的减少。
PetShop Enhanced by NBear 的目标
1. Architecture optimization: 架构更清晰、更灵活。
2. Productivity: 在与PetShop4.0实现相同功能的基础上,减少代码量。
PetShop Enhanced by NBear 的体系架构
在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(或称领域层)、表示层。
数据访问层(DAL):也可称为持久层,其功能主要是负责数据库的访问。在PetShop中处理的数据库对象分为两类:一是数据实体(Model),对应数据库中相应的数据表,他们没有行为,仅用于表现对象的数据;二是数据的基本业务操作,即完成一般的CRUD,这部分采用了抽象工厂模式,即保证了系统的可扩展性,同时也保证了数据库的可移植性。当用NBear来实现时,在定义了实体对象的接口后,由NBear.Tools.EntityDesignToEntity.exe工具可以自动生成实体类、实体配置文件以及数据库脚本的代码。采用了NBear的ORM模块后,不仅显着的减少了代码量,自动实现了数据库的可移植性,也省去了后期对数据的基本业务操作的维护工作。
业务逻辑层(BLL):是整个系统的核心,它与这个系统的业务(领域)有关。以PetShop为例,业务逻辑层的相关设计,均和网上宠物店特有的逻辑相关,例如查询宠物,下订单,添加宠物到购物车等等。也许是业务逻辑比较简单地缘故,在业务逻辑层的设计中,PetShop并没有秉承在数据访问层中面向接口设计的思想。除了完成对插入订单策略的抽象(IBLLStrategy)外,整个业务逻辑层仅以BLL模块实现,没有为领域对象定义抽象的接口。因而PetShop的表示层与业务逻辑层就存在强依赖关系,如果业务逻辑层中的需求发生变更,就必然会影响表示层的实现。这样的分层也只有在用户界面发生更改时才有重用的价值,例如将B/S架构修改为C/S架构。当采用NBear的IoC模块后,完全摆脱了表现层与业务逻辑层的强依赖,基于容器的“依赖注入”,使得Service的调用者与实现者松散耦合,同时简化了PetShop的模块数量。BLL、CacheDependency、OrderMessaging、Profile都可以利用这样的模式,统一于PetShop.ServiceInterfaces程序集中。不用自己去写抽象工厂和IoC容器的任何代码,就可以实现可抽取、可替换的“抽屉”式三层架构。
表示层:是系统的UI部分,负责使用者与整个系统的交互。在这一层中,理想的状态是不应包括系统的业务逻辑。表示层中的逻辑代码,仅与界面元素有关。在PetShop4.0中,大量采用了ASP.Net 2.0的特性,如Master Page、Wizard等控件,Membership Provider和控件,Profile Provider,CacheDependency等。在改进后的版本中,绝大部分沿用原有代码,在实现原有功能外仅增加对历史订单的查询功能,以后可以考虑是否用AJAX。
本文作者: