对于Microsoft .net PetShop程序中的购物车和订单处理模块,文中主要分析两种技术的应用:
1. Profile技术在PetShop程序中用于三处:
1) 购物车ShoppingCart -下面的例子围绕购物车流程进行
2) 收藏WishList
3) 用户信息AccountInfo
注册新用户 NewUser.aspx :使用的是CreateUserWizard 控件,基于MemberShip机制,在数据库MSPetShop4Services的表aspnet_Users中创建用户<o:p></o:p>
修改用户注册信息 UserProfile.aspx: 基于Profile技术,在数据库MSPetShop4Profile的表Profiles和Account中创建用户信息
2. 异步消息处理技术运用于订单处理
4.1 Web.config配置
Profile可以利用数据库存储关于用户的个性化信息,有点象session对象,但session对象是有生存期的,在生存期后,session对象自动失效了。而profile不同,除非显式移除它。要实现profile功能,必须先在web.config中进行定义。<o:p></o:p>
在web.congfig中,将会定义一些属性/值,分别存贮将要保存的变量和值,比如language属性,定义其值是string类型,如此类推。而<group>标签,则是将一些相同或类似功能的变量值放在一起。<o:p></o:p>
程序中使用方法:Profile.language = ddlLanguage.SelectedItem.Value;<o:p></o:p>
<o:p></o:p>
<profile automaticSaveEnabled="false" defaultProvider="ShoppingCartProvider"><o:p></o:p>
<providers><o:p></o:p>
<add name="ShoppingCartProvider" connectionStringName="SQLProfileConnString" type="PetShop.Profile.PetShopProfileProvider" applicationName=".NET Pet Shop 4.0"/><o:p></o:p>
<add name="WishListProvider" connectionStringName="SQLProfileConnString" type="PetShop.Profile.PetShopProfileProvider" applicationName=".NET Pet Shop 4.0"/><o:p></o:p>
<add name="AccountInfoProvider" connectionStringName="SQLProfileConnString" type="PetShop.Profile.PetShopProfileProvider" applicationName=".NET Pet Shop 4.0"/><o:p></o:p>
</providers><o:p></o:p>
<properties><o:p></o:p>
<add name="ShoppingCart" type="PetShop.BLL.Cart" allowAnonymous="true" provider="ShoppingCartProvider"/><o:p></o:p>
<add name="WishList" type="PetShop.BLL.Cart" allowAnonymous="true" provider="WishListProvider"/><o:p></o:p>
<add name="AccountInfo" type="PetShop.Model.AddressInfo" allowAnonymous="false" provider="AccountInfoProvider"/><o:p></o:p>
</properties><o:p></o:p>
</profile><o:p></o:p>
4.2 购物车程序流程-Profile技术<o:p></o:p>
1. 点击“加入购物车”: http://localhost:2327/Web/ShoppingCart.aspx?addItem=EST-34
2. ShoppingCart.aspx文件处理:在init方法之前处理<o:p></o:p>
protected void Page_PreInit(object sender, EventArgs e) {<o:p></o:p>
if (!IsPostBack) {<o:p></o:p>
string itemId = Request.QueryString["addItem"];<o:p></o:p>
if (!string.IsNullOrEmpty(itemId)) {<o:p></o:p>
Profile.ShoppingCart.Add(itemId); //注意ShoppingCart的类型是PetShop.BLL.Cart<o:p></o:p>
//Save 方法将修改后的配置文件属性值写入到数据源,如ShoppingCart属性已经改变<o:p></o:p>
Profile.Save(); <o:p></o:p>
<o:p></o:p>
// Redirect to prevent duplictations in the cart if user hits "Refresh"<o:p></o:p>
//防止刷新造成 多次提交<o:p></o:p>
Response.Redirect("~/ShoppingCart.aspx", true); //将客户端重定向到新的 URL。指定新的 URL 并指定当前页的执行是否应终止。<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
3. PetShop.BLL.Cart类<o:p></o:p>
// Dictionary: key/value <o:p></o:p>
private Dictionary<string, CartItemInfo> cartItems = new Dictionary<string, CartItemInfo>();<o:p></o:p>
<o:p></o:p>
/// <summary><o:p></o:p>
/// Add an item to the cart.<o:p></o:p>
/// When ItemId to be added has already existed, this method will update the quantity instead.<o:p></o:p>
/// </summary><o:p></o:p>
/// <param name="itemId">Item Id of item to add</param><o:p></o:p>
public void Add(string itemId) {<o:p></o:p>
CartItemInfo cartItem;<o:p></o:p>
//获取与指定的键相关联的值TryGetValue(TKey key,out TValue value)<o:p></o:p>
if (!cartItems.TryGetValue(itemId, out cartItem)) {<o:p></o:p>
Item item = new Item();<o:p></o:p>
ItemInfo data = item.GetItem(itemId);<o:p></o:p>
if (data != null) {<o:p></o:p>
CartItemInfo newItem = new CartItemInfo(itemId, data.ProductName, 1, (decimal)data.Price, data.Name, data.CategoryId, data.ProductId);<o:p></o:p>
cartItems.Add(itemId, newItem);<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
else<o:p></o:p>
cartItem.Quantity++;<o:p></o:p>
}<o:p></o:p>
<o:p></o:p>
4. 更新Profile<o:p></o:p>
//Save 方法将修改后的配置文件属性值写入到数据源,如ShoppingCart属性已经改变<o:p></o:p>
Profile.Save(); <o:p></o:p>
如何更新:<o:p></o:p>
根据配置中的ShoppingCartProvider类型 PetShop.Profile.PetShopProfileProvider。<o:p></o:p>
<o:p></o:p>
ASP.NET 配置文件提供对用户特定属性的持久性存储和检索。配置文件属性值和信息按照由 ProfileProvider 实现确定的方式存储在数据源中。
每个用户配置文件在数据库的 Profiles 表中进行唯一标识。该表包含配置文件信息,如应用程序名称和上次活动日期。
CREATE TABLE Profiles<o:p></o:p>
(<o:p></o:p>
UniqueID AutoIncrement NOT NULL PRIMARY KEY,<o:p></o:p>
Username Text (255) NOT NULL,<o:p></o:p>
ApplicationName Text (255) NOT NULL,<o:p></o:p>
IsAnonymous YesNo, <o:p></o:p>
LastActivityDate DateTime,<o:p></o:p>
LastUpdatedDate DateTime,<o:p></o:p>
CONSTRAINT PKProfiles UNIQUE (Username, ApplicationName)<o:p></o:p>
)<o:p></o:p>
<o:p></o:p>
5. PetShop.Profile. PetShopProfileProvider类, 继承自ProfileProvider<o:p></o:p>
// 创建 PetShop.SQLProfileDAL.PetShopProfileProvider类-数据库操作<o:p></o:p>
private static readonly IPetShopProfileProvider dal <o:p></o:p>
= DataAccess.CreatePetShopProfileProvider();<o:p></o:p>
<o:p></o:p>
/// <summary><o:p></o:p>
/// 设置指定的属性设置组的值<o:p></o:p>
/// </summary><o:p></o:p>
public override void SetPropertyValues(SettingsContext context, SettingsPropertyValueCollection collection) {<o:p></o:p>
string username = (string)context["UserName"];<o:p></o:p>
CheckUserName(username); <o:p></o:p>
bool isAuthenticated = (bool)context["IsAuthenticated"];<o:p></o:p>
<o:p></o:p>
int uniqueID = dal.GetUniqueID(username, isAuthenticated, false, ApplicationName);<o:p></o:p>
if(uniqueID == 0)<o:p></o:p>
uniqueID = dal.CreateProfileForUser(username, isAuthenticated, ApplicationName);<o:p></o:p>
<o:p></o:p>
foreach(SettingsPropertyValue pv in collection) {<o:p></o:p>
if(pv.PropertyValue != null) {<o:p></o:p>
switch(pv.Property.Name) {<o:p></o:p>
case PROFILE_SHOPPINGCART: //ShoppingCart<o:p></o:p>
SetCartItems(uniqueID, (Cart)pv.PropertyValue, true);<o:p></o:p>
break;<o:p></o:p>
case PROFILE_WISHLIST:<o:p></o:p>
SetCartItems(uniqueID, (Cart)pv.PropertyValue, false);<o:p></o:p>
break;<o:p></o:p>
case PROFILE_ACCOUNT:<o:p></o:p>
if(isAuthenticated)<o:p></o:p>
分享到:
相关推荐
PetShop还涉及性能优化,如缓存策略的实施、数据库查询的优化等,以提升系统的响应速度和处理能力。 总结,.NET PetShop是一个涵盖广泛.NET技术的实战项目,对于学习和理解.NET开发具有极高的参考价值。通过研究...
ASP.NET PetShop是一个经典的示例应用,用于演示和学习ASP.NET技术,特别是对于那些想深入理解微软.NET框架下的Web应用程序开发的开发者和架构师。这个系统以一个宠物商店的业务流程为背景,提供了完整的源码,让...
.Net PetShop 4.0 是微软推出的一个开源示例项目,旨在演示如何利用 .NET Framework 构建一个完整的、分层的企业级应用程序。这个项目对于初学者,尤其是那些在IT行业中刚刚起步的“菜鸟”来说,是一个极好的学习...
.NET PetShop是一个经典的开源项目,它是一个基于ASP.NET技术构建的在线宠物商店示例应用,旨在展示.NET Framework和Microsoft ASP.NET平台的开发能力。这个项目为开发者提供了学习和理解Web应用程序设计、开发以及...
PetShop是一个由微软创建的示例应用程序,旨在展示使用.NET框架开发企业级系统的潜力。该应用经常被用来对比.NET与J2EE平台的性能,尽管这种比较往往带有商业竞争的色彩。PetShop的最新版本,即PetShop4.0,基于.NET...
ASP.NET PetShop 4.0 和 5.0 是微软为开发者提供的两个经典示例项目,旨在演示如何在 .NET 平台上构建企业级 web 应用程序。这两个版本分别基于 .NET Framework 2.0 和 3.5,展示了 ASP.NET 技术在不同版本中的应用...
在PetShop3_0文件中,可能是早期版本的源代码或相关资料,你可以对比研究不同版本之间的改进和优化,这将有助于你理解软件演进的过程和.NET技术的发展。 总的来说,.Net PetShop4.0项目是.NET开发者学习三层架构、...
ASP.NET Pet Shop 4.0 是一个经典的开源项目,它为开发者提供了一个全面的示例,展示了如何使用ASP.NET技术和Microsoft .NET Framework构建一个完整的网上商店应用。这个项目旨在教育和帮助开发人员学习如何在实际...
PetShop是一款基于ASP.NET技术的经典示例应用,它在.NET Framework 2.0的环境下运行,是学习和理解ASP.NET开发模式、设计原则和最佳实践的理想案例。这个项目以其清晰的架构、模块化的代码和实际的业务场景,吸引了...
《PetShop:微软官方.NET示例程序深度解析》 PetShop是微软官方发布的一个.NET示例程序,旨在为开发者提供一个全面了解.NET框架及其开发工具的实战案例。这个项目不仅包含了一个完整的应用程序,还整合了数据库,...
.NET PetShop 4.0 还包含了新的功能,如自定义的ASP.NET 2.0 配置文件提供程序和通过MSMQ(Microsoft Message Queuing)进行的异步订单处理,这些都是提高系统性能和可靠性的重要组成部分。 #### 从 ASP.NET 1.1 ...
### .NET PetShop项目中的Membership模块详解 #### 一、Membership模块概述 .NET PetShop项目中的**Membership**模块是.NET框架中的一个重要组成部分,主要用于管理应用程序中的用户账户信息,包括用户的注册、...
通过研究PetShop for .NET 3.5,开发者可以深入理解如何利用.NET Framework 3.5和Visual Studio 2008构建一个完整的企业级应用,涉及的技术包括但不限于ASP.NET MVC、ADO.NET、XML Web Services、缓存管理、事务处理...
☆ 程序说明:☆ The .NET Pet Shop application is designed to show the best practices for building enterprise, n-tier .NET 2.0 applications that may need to support a variety of database platforms and...
ASP.NET是一种由微软开发的用于构建Web应用程序的框架,它基于.NET Framework,为开发者提供了丰富的功能和工具,简化了Web应用的开发过程。在"PetShop"这个实例中,我们将会探讨ASP.NET的核心特性和在实际开发中的...
在这里,我们可以看到如何使用ASP.NET控件(如GridView、FormView等)来显示和交互数据,以及如何使用HTTP模块和处理程序来扩展应用程序的功能。同时,PetShop 4.0也展示了状态管理、页面生命周期、自定义控件和用户...
这是一套asp.net的网络购物系统,系统来源于国外,系统的运行需要.net支持环境,系统具备的功能很是强大。相当不错。解压密码:pengyouyi
微软提供PetShop4.0,最佳的ASP.NET学习资料。...4.对于订单的处理提供了两种同步和基于MSMQ的异步处理。 5.使用了ASP.NET2.0中的Master Pages,Wizard Control等 6.使用SqlCacheDependency缓存处理策略