淺析電子商務的框架_.Net教程
推薦:解讀多語言開發的個人體驗在文章的前面,先定義一下,這里談的語言(A)指的是語言以及使用該語言可以很容易調用的基本類庫及可免費或低代價獲得的第三方類庫及開源類庫(B)。在很多情況下談語言和談語言的選擇時的語境,都是指的B。 選擇多語言混合開發的一個目的是為了使用其中某
前些陣子照著《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自定義一些類
分享:解析ASP.NET Routing對請求的處理方式原本這是《關于ASP.NET Routing的幾點內容》一文中的一節,不過等寫完這節之后發現這塊內容已經比較完整了,而且它本身也是獨立和最為常見的部分,因此我把它提取出來單獨成文。至于那片文章的其他部分我會再修改一下,明天發布。希望這些內容會對您理解ASP.
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發送Email實例(可帶附件)
- js實現廣告漂浮效果的小例子
- asp.net Repeater 數據綁定的具體實現
- Asp.Net 無刷新文件上傳并顯示進度條的實現方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報表的使用方法
- ASP.NET中操作SQL數據庫(連接字符串的配置及獲取)
- asp.net頁面傳值測試實例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲過程實現分頁示例代碼
- 相關鏈接:
- 教程說明:
.Net教程-淺析電子商務的框架。