最初研究 .NET Pet Shop 的目的是用 Microsoft .NET 实现 Sun 主要的 J2EE 蓝图应用程序 Sun Java Pet Store 同样的应用程序功能。 根据用 .NET 实现的 Sun J2EE 最佳实践示例应用程序,各方面的客户可以直接地对 Microsoft 的 .NET 技术与基于 J2EE 的应用程序服务器进行比较,同时了解构建基于Web的应用程序中用到的各种建议的设计模式之间的异同。旨在显示构建企业级 n 层应用程序(可能需要支持多种数据库平台和部署模型)的 .NET 最佳实践。
Java Pet Store 是 什么?
Java Pet Store 是按 Sun 公司维护的 J2EE 蓝图开发的分布式应用程序的一个参考实现。示例应用程序最初的开发目的是帮助开发人员和架构师理解如何使用和利用 J2EE 技术,以及各个 J2EE 平台组件是如何配合的。 Java Pet Store 演示软件包括构建应用程序所需的Enterprise Java Beans (EJB) 体系结构、 Java Server Pages (JSP) 技术、标记库和 servlet 的完整的源代码及文档。 此外, Java Pet Store 蓝图应用程序还通过具体示例说明了一些模型和设计模式。
完整的 Java Pet Store 包括三个示例应用程序:
•
Java Pet Store: J2EE 蓝图主应用程序。
•
Java Pet Store 管理器: Java Pet Store 的管理器模块
•
Blueprints Mailer: 在小一些的包中给出一些 J2EE 蓝图设计指南的一个小应用程序。
Java Pet Store 的最初版本旨在处理以下数据库: Oracle、Sybase 和Cloudscape 。 IBM 已经开发了一个 DB2 版本的应用程序。 该应用程序可以从 Java 2 Platform Enterprise Edition Blueprints 公开获得。 主应用程序 Java Pet Store 是一个电子商务应用程序,可以通过它在线购买宠物。 启动应用程序后,可以浏览和搜索各种类型的宠物,从狗到爬行动物。
使用 Java Pet Store 的典型会话方案如下:
主页 — 这是用户第一次启动应用程序时加载的主页。
类别查看 — 有五大类: 鱼、狗、爬行动物、猫和鸟。 每一类都有几个相关的产品。如果选择鱼作为类别,可以看到天使鱼等等内容。
产品 — 如果现在选择一个产品,应用程序将显示产品的所有类型。通常产品类型是雄或者雌。
产品详情 — 每种产品类型(分别用不同项目表示)有详细的视图显示产品说明、产品图像、价格和库存数量。
购物车 — 用户可以通过它操作购物车(添加、删除和更新行项目)。
结帐 — 结帐页面以只读视图显示购物车。
登录重定向 — 当用户选择结帐页面上的“Continue”时,如果还没有登录,将重定向到登录页面。
登录验证 — 通过站点的身份验证以后,用户被重定向到信用卡和记帐地址表单。
定单确认 — 显示记帐地址和送货地址。
定单提交 — 这是定单处理流程的最后一步。 定单现在将提交到数据库。
Microsoft .NET Pet Shop
.NET Pet Shop 的目标是把注意力仅仅放在 Java Pet Store 上(管理和Mailer 组件没有在 .NET 中实现)。 除了重现 Java Pet Store 应用程序的功能之外,还增加了两项目标:
•
比较 .NET 和 J2EE 通过最佳实践实现的真实应用程序中代码和代码大小上的异同。
•
提供用 .NET 和 J2EE 实现的典型的设计良好的应用程序能够支持多少用户的数据。
业务需求
作为 Pet Shop 3 体系结构文档的一部分,我们给出了 .NET Pet Shop 的业务需求,这样开发人员和客户就可以理解我们在做应用程序的设计决策时进行的一些选择。
Pet Shop 应用程序的功能性需求是什么?
•
应用程序应该使客户能够按类和通过关键字搜索浏览公司目录。
•
应用程序应该为客户提供一种通过一个购物车模型就能购买多个商品项的机制。
•
应用程序应该提供简单的安全模型,这样客户必须先进行登录,才允许购买购物车的内容。
•
应用程序旨在支持高容量的企业级电子商务解决方案;因此应用程序应该展示以下方面:
•
高性能,通过所支持用户数和用户响应时间进行衡量
•
通过增加更多处理器来扩展的能力
•
通过增加更多机器组成群集的分布式扩展能力
•
在大型企业级系统中,应用程序可能需要访问多个数据库,因此应用程序应该支持分布式事务。
•
应用程序应该考虑灵活的部署策略。默认时应用程序的设计方案是要部署到两台机器上,一台是应用程序服务器,一台是数据库服务器,但是应该能够扩展在其他部署模型下工作。应用程序应该支持多个数据库供应商。 这里我们选择了 Microsoft SQL Server 和Oracle。
•
应用程序应该容易维护,这是通过应用程序中的代码行数来衡量的。
.NET Pet Shop 中使用的数据库架构是直接从 Java Pet Store 移植而来的。 Java Pet Store 支持几种数据库供应商格式,因此我们选取了 Sybase 应用程序的架构,并在一个 Microsoft SQL Server 2000 实例中创建。 这不需要改变 Sybase 版本的架构。 而创建 Oracle 版本的 .NET Pet Shop 时,我们直接采用了 Java Pet Store 数据库原来的 Oracle 实现。
数据库 有如下整体表结构,参见表 1:
表 1. Pet Shop 中的数据库表
表名用途
Account
代表基本客户信息
BannerData
存储广告条信息
Category
目录类别( Fish, Dogs, Cats 等)
Inventory
产品库存状态
Item
各个产品的细节
LineItem
定单细节
Orders
客户下的定单。 定单包括一个或多个行项目
OrderStatus
定单状态
Product
目录产品,每个产品可有一或多类型(项目)。 通常类型可能是雄或雌。
Profile
客户的用户配置情况
Signon
客户登录表
Supplier
有关供应商信息
在 .NET Pet Shop 版本 2 中,应用程序改为要创建一个方案,其中完成定单处理必须使用分布式事务。为了适应分布式事务方案,Orders、OrderStatus 和 LineItem 表都分到不同的可能安装在不同机器上的数据库实例。我们在 .NET Pet Shop 的第三版中保持了这个分布式设计模式。
图 5. .NET Pet Shop 订购数据库架构
图 6. .NET Pet Shop 帐号和产品数据库架构