MicrosoftPetShop3x的设计方案模式与体系结构.docx
《MicrosoftPetShop3x的设计方案模式与体系结构.docx》由会员分享,可在线阅读,更多相关《MicrosoftPetShop3x的设计方案模式与体系结构.docx(14页珍藏版)》请在冰豆网上搜索。
MicrosoftPetShop3x的设计方案模式与体系结构
Microsoft.NETPetShop3.x:
.NETPetShop的设计模式与体系结构
发布日期:
4/1/2004|更新日期:
4/1/2004
GregoryLeakeMicrosoftCorporation
JamesDuffVertigoSoftware,Inc.
2003年5月
适用于:
Microsoft?
.NET框架1.0和1.1Microsoft?
Windows2000和WindowsServer?
2003Microsoft?
InternetInformationServicesMicrosoft?
SQLServer?
2000Oracle?
9iDatabase
摘要:
.NETPetShop3.x版针对.NETPetShop2.0的评论者给出的重要反馈进行了改进,开发时确保了应用程序与Microsoft提出的体系结构指导文档保持一致。
(20页打印页)
下载PetShop3.0Installer.msi代码示例.
本页内容
摘要
JavaPetStore是什么?
Microsoft.NETPetShop
业务需求
应用程序数据模型
.NETPetShop2.0体系结构
.NETPetShop3.0体系结构
小结
附录A:
从版本2到版本3的更改
摘要
最初研究.NETPetShop的目的是用Microsoft.NET实现Sun主要的J2EE蓝图应用程序SunJavaPetStore同样的应用程序功能。
根据用.NET实现的SunJ2EE最佳实践示例应用程序,各方面的客户可以直接地对Microsoft的.NET技术与基于J2EE的应用程序服务器进行比较,同时了解构建基于Web的应用程序中用到的各种建议的设计模式之间的异同。
.NETPetShop应用程序现在已经是第三版了,旨在显示构建企业级n层应用程序(可能需要支持多种数据库平台和部署模型)的.NET最佳实践。
根据社区对.NetPetShop2.0的反馈,.NETPetShop3.0遵照MSDN上发布的Microsoft《说明性体系结构指导》进行了重新设计。
第三版还完全符合了Middleware公司的应用程序服务器基准测试规范,将作为Microsoft参加今年春天即将进行的MiddlewareApplicationServerBenchmark的产品:
这是Middleware公司举办的第二轮测试活动,旨在比较.NET和J2EE平台在构建和承载企业级Web应用程序方面的可伸缩性。
返回页首
JavaPetStore是什么?
JavaPetStore是按Sun公司维护的J2EE蓝图开发的分布式应用程序的一个参考实现。
示例应用程序最初的开发目的是帮助开发人员和架构师理解如何使用和利用J2EE技术,以及各个J2EE平台组件是如何配合的。
JavaPetStore演示软件包括构建应用程序所需的EnterpriseJavaBeans(EJB)体系结构、JavaServerPages(JSP)技术、标记库和servlet的完整的源代码及文档。
此外,JavaPetStore蓝图应用程序还通过具体示例说明了一些模型和设计模式。
完整的JavaPetStore包括三个示例应用程序:
JavaPetStore:
J2EE蓝图主应用程序。
JavaPetStore管理器:
JavaPetStore的管理器模块
BlueprintsMailer:
在小一些的包中给出一些J2EE蓝图设计指南的一个小应用程序。
JavaPetStore的最初版本旨在处理以下数据库:
Oracle、Sybase和Cloudscape。
IBM已经开发了一个DB2版本的应用程序。
该应用程序可以从Java2PlatformEnterpriseEditionBlueprints公开获得。
主应用程序JavaPetStore是一个电子商务应用程序,可以通过它在线购买宠物。
启动应用程序后,可以浏览和搜索各种类型的宠物,从狗到爬行动物。
使用JavaPetStore的典型会话方案如下:
主页—这是用户第一次启动应用程序时加载的主页。
类别查看—有五大类:
鱼、狗、爬行动物、猫和鸟。
每一类都有几个相关的产品。
如果选择鱼作为类别,可以看到天使鱼等等内容。
产品—如果现在选择一个产品,应用程序将显示产品的所有类型。
通常产品类型是雄或者雌。
产品详情—每种产品类型(分别用不同项目表示)有详细的视图显示产品说明、产品图像、价格和库存数量。
购物车—用户可以通过它操作购物车(添加、删除和更新行项目)。
结帐—结帐页面以只读视图显示购物车。
登录重定向—当用户选择结帐页面上的“Continue”时,如果还没有登录,将重定向到登录页面。
登录验证—通过站点的身份验证以后,用户被重定向到信用卡和记帐地址表单。
定单确认—显示记帐地址和送货地址。
定单提交—这是定单处理流程的最后一步。
定单现在将提交到数据库。
图1.JavaPetStore
返回页首
Microsoft.NETPetShop
.NETPetShop的目标是把注意力仅仅放在JavaPetStore上(管理和Mailer组件没有在.NET中实现)。
除了重现JavaPetStore应用程序的功能之外,还增加了两项目标:
比较.NET和J2EE通过最佳实践实现的真实应用程序中代码和代码大小上的异同。
提供用.NET和J2EE实现的典型的设计良好的应用程序能够支持多少用户的数据。
图2..NETPetShop
.NETPetShop的整体逻辑体系结构如图3所示,设计的中心是在表示层使用ASP.NETWeb窗体,与逻辑中间层中的C#业务组件通信。
业务组件继而通过ADO.NET和SQLServer名为数据访问应用块(DAAB)(可以从此链接了解更多DAAB信息并下载完整的DAAB源代码)的帮助器类访问后端数据库。
数据访问功能完全抽象到数据访问层(DAL)中,与业务逻辑层(BLL)相分离。
.NETPetShop3.0中的新颖之处在于,我们为Oracle9i和SQLServer2000数据库都引入了DAL层。
相应DAL层的类加载将根据Web.Config中的应用程序配置设置在运行时动态生成。
注意.NETPetShop3.0使用了两个后端数据库,定单处理中要涉及跨两个数据库的分布式事务。
使用简单的Web.Config应用程序设置,用户可以对.NetPetShop进行部署,使用一个或者多个后端数据库,还可以自由地将SQLServer和Oracle后端数据库与由.NET服务的组件通过COM+企业服务处理的分布式事务混合。
图3..NETPetShop高层逻辑体系结构
图4说明了Microsoft.NETPetShop物理上是怎样部署的。
这里使用网络负载平衡(NLB)或者可能是硬件实现的负载平衡技术将入站的网络通信量分到了两台应用程序服务器上。
在网络请求达到群集中的一台机器时,针对该请求的所有工作都会在这台特定机器上进行。
业务逻辑和数据访问组件将以程序集的形式安装在两台服务器上,它们本质上是完全相同的。
如果负载平衡软件配置为使用“StickyIP”,则每台服务器都有自己的会话-状态存储,因为要保证第二个请求返回到实现第一个请求的那台服务器。
如果解决方案所需的容错要求更高,两台应用程序服务器可以共享一个公共会话-状态存储比如SQLServer或者一台专用的会话服务器(图中没有显示)。
会话-状态存储的类型和位置由每个站点‘web.config’文件里‘system.web’元素‘sessionState’子节点中的值决定。
图4..NETPetShop的物理部署图
返回页首
业务需求
作为PetShop3体系结构文档的一部分,我们给出了.NETPetShop的业务需求,这样开发人员和客户就可以理解我们在做应用程序的设计决策时进行的一些选择。
PetShop应用程序的功能性需求是什么?
应用程序应该使客户能够按类和通过关键字搜索浏览公司目录。
应用程序应该为客户提供一种通过一个购物车模型就能购买多个商品项的机制。
应用程序应该提供简单的安全模型,这样客户必须先进行登录,才允许购买购物车的内容。
应用程序旨在支持高容量的企业级电子商务解决方案;因此应用程序应该展示以下方面:
高性能,通过所支持用户数和用户响应时间进行衡量
通过增加更多处理器来扩展的能力
通过增加更多机器组成群集的分布式扩展能力
在大型企业级系统中,应用程序可能需要访问多个数据库,因此应用程序应该支持分布式事务。
应用程序应该考虑灵活的部署策略。
默认时应用程序的设计方案是要部署到两台机器上,一台是应用程序服务器,一台是数据库服务器,但是应该能够扩展在其他部署模型下工作。
应用程序应该支持多个数据库供应商。
这里我们选择了MicrosoftSQLServer和Oracle。
应用程序应该容易维护,这是通过应用程序中的代码行数来衡量的。
返回页首
应用程序数据模型
.NETPetShop中使用的数据库架构是直接从JavaPetStore移植而来的。
JavaPetStore支持几种数据库供应商格式,因此我们选取了Sybase应用程序的架构,并在一个MicrosoftSQLServer2000实例中创建。
这不需要改变Sybase版本的架构。
而创建Oracle版本的.NETPetShop时,我们直接采用了JavaPetStore数据库原来的Oracle实现。
数据库有如下整体表结构,参见表1:
表1.PetShop中的数据库表
表名用途
Account代表基本客户信息
BannerData存储广告条信息
Category目录类别(Fish,Dogs,Cats等)
Inventory产品库存状态
Item各个产品的细节
LineItem定单细节
Orders客户下的定单。
定单包括一个或多个行项目
OrderStatus定单状态
Product目录产品,每个产品可有一或多类型(项目)。
通常类型可能是雄或雌。
Profile客户的用户配置情况
Signon客户登录表
Supplier有关供应商信息
在.NETPetShop版本2中,应用程序改为要创建一个方案,其中完成定单处理必须使用分布式事务。
为了适应分布式事务方案,Orders、OrderStatus和LineItem表都分到不同的可能安装在不同机器上的数据库实例。
我们在.NETPetShop的第三版中保持了这个分布式设计模式。
图5.