前些陣子照著《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程序集
以下為引用的內容:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
namespace Shop.DataAccess
{
public class DataAccessBase
{
//存儲過程的名稱
protected string StoredprocedureName { set; get; }
//獲得連接字符串
protected string ConnectionString
{
get
{
return ConfigurationManager.ConnectionStrings["db_shopConnectionString"].ToString();
}
}
}
}
類庫中的StoreProcedure類
利用枚舉存儲編寫的存儲過程名稱,這樣便於更改及管理
但是對於存儲過程很多,一個類來存儲肯定顯得不夠,個人建議在細分,控制一個類中的存儲過程不超過20個
例如:
StoreProcedure_User,StoreProcedure_Product,StoreProcedure_Orders
以下為引用的內容:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Shop.DataAccess
{
public class StoredProcedure
{
public enum Name
{
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類功能我們都會用到,我們只應用到了一小部分
以下為引用的內容:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClIEnt;
using Microsoft.ApplicationBlocks.Data;
using System.Data;
namespace Shop.DataAccess
{
public class DataBaseHelper:DataAccessBase
{
public SqlParameter[] Parameters { get; set; }
/// <summary>
/// 構造函數
/// </summary>
/// <param name="storedproceducename">賦值存儲過程</param>
public DataBaseHelper(string storedproceducename)
{
this.StoredprocedureName = storedproceducename;
}
/// <summary>
/// 無數據返回
/// </summary>
/// <param name="transaction"></param>
public void Run(SqlTransaction transaction)
{
SqlHelper.ExecuteNonQuery(transaction, CommandType.StoredProcedure, this.StoredprocedureName, this.Parameters);
}
/// <summary>
/// 無數據返回,自己提供參數
/// </summary>
/// <param name="transaction"></param>
/// <param name="Parameters">參數</param>
public void Run(SqlTransaction transaction, SqlParameter[] Parameters)
{
SqlHelper.ExecuteNonQuery(transaction, CommandType.StoredProcedure, this.StoredprocedureName, Parameters);
}
/// <summary>
/// 有參數返回(DataSet)
/// </summary>
/// <param name="connectionstring"></param>
/// <param name="parameters"></param>
/// <returns></returns>
public DataSet Run(string connectionstring, SqlParameter[] parameters)
{
DataSet ds;
ds = SqlHelper.ExecuteDataset(connectionstring, this.StoredprocedureName, parameters);
return ds;
}
/// <summary>
/// 返回第一行第一列的值
/// </summary>
/// <param name="connectionstring"></param>
/// <param name="parameters"></param>
/// <returns></returns>
public object RunScalar(string connectionstring, SqlParameter[] parameters)
{
object obj;
obj = SqlHelper.ExecuteScalar(connectionstring, this.StoredprocedureName, parameters);
return obj;
}
/// <summary>
/// 返回第一行第一列的值
/// </summary>
/// <param name="transaction"></param>
/// <param name="parameters"></param>
/// <returns></returns>
public object RunScalar(SqlTransaction transaction, SqlParameter[] parameters)
{
object obj;
obj = SqlHelper.ExecuteScalar(transaction, this.StoredprocedureName, parameters);
return obj;
}
/// <summary>
/// 無參數返回(DataSet)
/// </summary>
/// <param name="connectionstring"></param>
/// <returns></returns>
public DataSet Run(string connectionstring)
{
DataSet ds;
ds = SqlHelper.ExecuteDataset(connectionstring, CommandType.StoredProcedure, this.StoredprocedureName);
return ds;
}
/// <summary>
/// 無返回值
/// </summary>
public void Run()
{
SqlHelper.ExecuteNonQuery(base.ConnectionString, CommandType.StoredProcedure, this.StoredprocedureName, this.Parameters);
}
/// <summary>
/// 返回是SqlDataReader
/// </summary>
/// <param name="parameters"></param>
/// <returns></returns>
public SqlDataReader Run(SqlParameter[] parameters)
{
SqlDataReader dr;
dr = SqlHelper.ExecuteReader(base.ConnectionString, CommandType.StoredProcedure, this.StoredprocedureName, parameters);
return dr;
}
}
}
業務邏輯層
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自定義一些類
具體的一些內容留在下面文章分析
作者:小風 原文:http://www.cnblogs.com/couhujia/archive/2009/11/16/1604059.Html