电子商务之框架分析(一)

本文详细介绍了电子商务网站的数据访问层设计,包括使用存储过程操作数据库、封装数据库操作类库以及业务逻辑层的实现。重点阐述了如何通过类库进行数据库交互,以及在实际项目中的应用。

电子商务之框架分析(一)

前些阵子照着《Pro ASP.NET 2.0 E-Commerce in C#2005》书编辑了一个商务系统网站,想总结一下学习到的所学的知识。

该网站具有一般商务网站的特征

这里先讲讲他的框架

数据访问层

用的的存储过程操作数据库的存储,有一个Shop.DataAccess类库专门(注意我这里将原文的命名空间改为shop了)

该类库使用了一个组件来封装对数据库的操作 为 Microsoft Data Access Application Block, 其实就是将SQLHelper.cs复制到该类下就行了,该类可以自动管理存储过程的连接,参数和名称。

类库下的DataAccessBase类是一个基类,该类库几乎所有的类都会继承它,有两个属性一个是存储过程,以及返回数据库的连接字符串

注意:这里是从web.config文件中获取与数据库连接的字符串,但是在类中无法引用到Configuration类,所以我们要额外的添加引用System.Configuration.dll程序集


usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Configuration;

namespaceShop.DataAccess
{
publicclassDataAccessBase
{
//存储过程的名称
protectedstringStoredprocedureName{set;get;}

//获得连接字符串
protectedstringConnectionString
{
get
{
returnConfigurationManager.ConnectionStrings["db_shopConnectionString"].ToString();
}
}
}

}

类库中的StoreProcedure类

利用枚举存储编写的存储过程名称,这样便于更改及管理

但是对于存储过程很多,一个类来存储肯定显得不够,个人建议在细分,控制一个类中的存储过程不超过20个

例如:

StoreProcedure_User,StoreProcedure_Product,StoreProcedure_Orders


usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;

namespaceShop.DataAccess
{
publicclassStoredProcedure
{
publicenumName
{
ProductByID_Select,
Products_Select,
Products_SelectSerach,
ShoppingCart_Select,
ShoppingCart_Insert,
ShoppingCart_Update,
ShoppingCart_Delete,
EndUser_Insert,
EndUserLogin_Select,
Address_Select,
ContactInformation_Select,
AdminLogin_Select,
Product_Insert,
ProductCategory_Select,
Product_Update,
Orders_Select,
OrderDetails_Select,
OrderAll_Select,
OrderStatus_Select,
OrdersByID_Select,
Orders_Update,
ProductPromotion_Select
}
}
}

类库中的DataBaseHelper类

重新包装了SQLHelper类的功能,因为并不是所有SQLHelper类功能我们都会用到,我们只应用到了一小部分


usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Data.SqlClient;
usingMicrosoft.ApplicationBlocks.Data;
usingSystem.Data;

namespaceShop.DataAccess
{
publicclassDataBaseHelper:DataAccessBase
{
publicSqlParameter[]Parameters{get;set;}

///<summary>
///构造函数
///</summary>
///<paramname="storedproceducename">赋值存储过程</param>
publicDataBaseHelper(stringstoredproceducename)
{
this.StoredprocedureName=storedproceducename;
}

///<summary>
///无数据返回
///</summary>
///<paramname="transaction"></param>
publicvoidRun(SqlTransactiontransaction)
{
SqlHelper.ExecuteNonQuery(transaction,CommandType.StoredProcedure,
this.StoredprocedureName,this.Parameters);
}

///<summary>
///无数据返回,自己提供参数
///</summary>
///<paramname="transaction"></param>
///<paramname="Parameters">参数</param>
publicvoidRun(SqlTransactiontransaction,SqlParameter[]Parameters)
{
SqlHelper.ExecuteNonQuery(transaction,CommandType.StoredProcedure,
this.StoredprocedureName,Parameters);
}

///<summary>
///有参数返回(DataSet)
///</summary>
///<paramname="connectionstring"></param>
///<paramname="parameters"></param>
///<returns></returns>
publicDataSetRun(stringconnectionstring,SqlParameter[]parameters)
{
DataSetds;
ds
=SqlHelper.ExecuteDataset(connectionstring,this.StoredprocedureName,parameters);
returnds;
}

///<summary>
///返回第一行第一列的值
///</summary>
///<paramname="connectionstring"></param>
///<paramname="parameters"></param>
///<returns></returns>
publicobjectRunScalar(stringconnectionstring,SqlParameter[]parameters)
{
objectobj;
obj
=SqlHelper.ExecuteScalar(connectionstring,this.StoredprocedureName,parameters);
returnobj;
}

///<summary>
///返回第一行第一列的值
///</summary>
///<paramname="transaction"></param>
///<paramname="parameters"></param>
///<returns></returns>
publicobjectRunScalar(SqlTransactiontransaction,SqlParameter[]parameters)
{
objectobj;
obj
=SqlHelper.ExecuteScalar(transaction,this.StoredprocedureName,parameters);
returnobj;
}

///<summary>
///无参数返回(DataSet)
///</summary>
///<paramname="connectionstring"></param>
///<returns></returns>
publicDataSetRun(stringconnectionstring)
{
DataSetds;
ds
=SqlHelper.ExecuteDataset(connectionstring,CommandType.StoredProcedure,this.StoredprocedureName);
returnds;
}

///<summary>
///无返回值
///</summary>
publicvoidRun()
{
SqlHelper.ExecuteNonQuery(
base.ConnectionString,CommandType.StoredProcedure,this.StoredprocedureName,this.Parameters);
}

///<summary>
///返回是SqlDataReader
///</summary>
///<paramname="parameters"></param>
///<returns></returns>
publicSqlDataReaderRun(SqlParameter[]parameters)
{
SqlDataReaderdr;
dr
=SqlHelper.ExecuteReader(base.ConnectionString,CommandType.StoredProcedure,this.StoredprocedureName,parameters);
returndr;
}
}
}

业务逻辑层

Shop.BusinessLogic

这里涉及到要编写接口

首先了解下什么是接口,接口就是只包含抽象成员的应用类型,接口中的成员可以是方法,索引器,属性和事件,而不可以是包含任何常量,构造函数,静态成员或数据字段。接口只包含这些成员的声明。而具体的实现必须从实现该接口的任何类中进行初始化。

这里编辑一个接口是因为所有该类库的类都会调用一个函数来实现获得数据

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Shop.BusinessLogic
{
interface IBusinessLogic
{
void Invoke();
}
}
复制代码

Shop.Common类库是编写一个公共类

Shop.Operational自定义一些类

具体的一些内容留在后面的文章分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值