电子商务之框架分析(一)
前些阵子照着《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.Collections.Generic;
using System.Linq;
using System.Text;
namespace Shop.BusinessLogic
{
interface IBusinessLogic
{
void Invoke();
}
}
Shop.Common类库是编写一个公共类
Shop.Operational自定义一些类
具体的一些内容留在后面的文章分析
本文详细介绍了电子商务网站的数据访问层设计,包括使用存储过程操作数据库、封装数据库操作类库以及业务逻辑层的实现。重点阐述了如何通过类库进行数据库交互,以及在实际项目中的应用。

286

被折叠的 条评论
为什么被折叠?



