分享
 
 
 

.Net Petshop详解(二): petshop三层结构之DataTier

王朝c#·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

.Net Petshop详解(二): petshop三层结构之DataTier

交互的三层综述

在前面的文章中,我们丛整个系统的角度了解了petshop的三层部署结构物理上的一个概貌,没有从应用程序的角度来说明是如何划分的,也不清楚数据展示层,中间层,数据层是如何交互的。为了更好的说明这个三层的结构以及每一层的具体细节问题,也让大家对整个应用有一个walkthrough,在这里我将说明从系统的角度来看(见参考图1),顾客在购物的过程中,系统的三层是如何的工作以及如何的交互。这个东西有点象UML里面的实例情景故事,对需求和分析的进一步是大有帮助的。

图1 .NET Petshop 架构

从这个情景中,我们可以很清晰的了解到Internet Customer在购物时系统的运作情形。首先通过数据展示层的用户交互界面Cart.aspx页面输入顾客购买的商品以及数量,然后这些购物清单由后台的应用程序(cart.aspx.cs)做相应的预处理(如安全验证,校验,数据的格式化等等),接着调用中间件(在程序结构里面就是一些.NET Assembly,封装了购物的商业逻辑),最后通过数据访问接口来更新数据库里面的数据(数据层)。

数据层(Database)

.NET Petshop的数据库并不是十分的庞大,总共有12个用户表和23个存储过程。Petshop数据库里面存储的是用户数据,帐号数据,产品数据,用户配置数据,订单数据,库存数据以及供应商的数据。应用程序访问数据库的数据并不是直接的与数据库表打交道,而是通过存储过程的运行来获取所需要的数据。这样的设计有一个好处就是,避免了频繁的表操作,而通过运行在服务器端的存储过程可以极大的提高运作效率和提升访问数据的速度,同时也很好的屏蔽了数据库表的逻辑,使得数据库访问变成了数据库提供的服务访问。当然,也有人指责说这些存储过程迁移性是值得怀疑的。

下面我将通过表格把这些数据库的基本表列出来(见表1),并一一做说明,希望对大家深入的理解有帮助。

表名称

备注信息

Account

基本用户信息。

BannerData

存储的是系统界面的banner图片的设置信息。

Category

宠物的类别目录表(比如鱼类,狗类等等)。

Inventory

宠物产品的存货信息。

Item

单个产品的详细信息。

LineItem

订单的每一项的详细信息,包括产品名称和数量,价格等。

Orders

用户购物的订单,一个订单可以包括多项LineItem

OrderStatus

订单的状态

Product

宠物的产品列表,一条Product可能包括多个Item

Profile

用户配置表,用于记录他们的favorites。

Signon

用户帐号登陆表,因为常用,故从Account独立出来。

Supplier

供应商信息。

通过上表我们知道了petshop数据库的数据库表的一些信息,但是这些表之间到底是一种什么样的关系呢?关心数据库建模和设计的人可能对这个问题比较感兴趣。在这里,我将给出图表(图2)说明这些数据库表之间的关系。图2中列出了这些表之间的关系和主键信息。

图2:petshop数据库物理设计模式

技巧:其实对于从事过数据库建模和设计的人都知道,得到上面的数据库模型图形并不是一件很困难的事情。正如我们前面提到的一样,我们可以用Visio做工程反转就可以得到上面这么美观的设计模型图了。同时,我们也可以在模型图中做修改设计,可以马上应用到你的物理数据库,使其保持同步。

说完了基本的数据库表,接下来我们看看存储过程。用微软的话说,只有设计称存储过程,才算是”cleaner separation of code from the middle-tier”,我个人觉得这样做是很好的。同样的,我把它列在一个表格里(表2)。

存储过程名称

备注信息

upAccountAdd

增加一个帐号。

upAccountGetAddress

获取用户的地址,主要用于下订单时注册地址与送货地址不一。

upAccountGetDetails

获取帐号的详细信息。

upAccountLogin

用户登陆验证。

upAccountUpdate

更新用户帐号。

upCategoryGetList

获取某个类别的产品列表。

upInventoryAdd

增加指定的项到存活信息。

upInventoryGetList

获取存货列表。

upItemAdd

增加一项产品。

upItemGetDetails

获取指定产品项的详细信息。

upItemGetList

获取某一特定类别的产品的具体项目列表。

upItemGetList_ListByPage

功能与上同,但是分页获取数据。

upOrdersAdd

增加一项订单。

upOrdersGet

获取某一订单的信息。

upOrdersGetDetails

获取某一订单的详细信息。

upOrderStatusGet

获取订单的状态。

upProductAdd

增加一类别产品。

upProductGetList

返回某类产品的列表。

upProductGetList_ListByPage

与上同,但是分页获取结果数据。。

upProductSearch

产品搜索。

upProductSearch_ListByPage

与上同,但是翻页获取结果数据。

upProfileGetBannerOption

Banner的配置信息。

upProfileGetListOption

获取用户配置信息。

表2:petshop存储过程列表

在这些存储过程里面使用了SQL Server2000的OpenXML的特性来代替传统的行集结果,使用在非常频繁的数据访问操作,可以减轻系统的负担。

好了,petshop的Datatier就说到这里了,在后面的文章我会就一个数据访问的实例再次解说存储过程的执行。接下来我将就中间层做介绍了。

[url=http://www.csdn.net/develop/Read_Article.asp?Id=17588][/url]

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有